简体   繁体   English

如何使用适配器位置将数据从 firebase 检索到新活动

[英]How do I use adapter position to retrieve data from firebase to a new activity

SearchPage where I search the books from firebase SearchPage 在那里我从 firebase 搜索书籍

public class SearchPage extends AppCompatActivity {
EditText searchbar;

RecyclerView recyclerView;
DatabaseReference reference;

ArrayList<String> BookNameList;
ArrayList<String> AuthorNameList;
ArrayList<String> PicList;
ArrayList<String> PublisherList;
ArrayList<String> Shelfnols;
ArrayList<String> Desc;
SearchAdapter searchAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_page);

    searchbar = (EditText) findViewById(R.id.searchbar);
    reference = FirebaseDatabase.getInstance().getReference();
    reference.keepSynced(true);
    recyclerView = (RecyclerView) findViewById(R.id.rv);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
    BookNameList = new ArrayList<>();
    PublisherList = new ArrayList<>();
    AuthorNameList = new ArrayList<>();
    Shelfnols = new ArrayList<>();
    PicList = new ArrayList<>();
    Desc=new ArrayList<>();







    searchbar.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!s.toString().isEmpty()) {
                setAdapter(s.toString());

            }
            else{
                BookNameList.clear();
                AuthorNameList.clear();
                PicList.clear();
                PublisherList.clear();
                Shelfnols.clear();
                Desc.clear();


            }
        }

        private void setAdapter(final String searchedString) {
            reference.child("books").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {



                    BookNameList.clear();
                    AuthorNameList.clear();
                    PicList.clear();
                    PublisherList.clear();
                    Shelfnols.clear();
                    Desc.clear();



                    int counter=0;
                    for(DataSnapshot snapshot:dataSnapshot.getChildren()){
                        String uid = snapshot.getKey();


                       Log.i(uid,"ids");
                        String desc = snapshot.child("Desc").getValue(String.class);
                        String bookname = snapshot.child("bookname").getValue(String.class);
                        String author = snapshot.child("author").getValue(String.class);
                        String image = snapshot.child("image").getValue(String.class);
                        String publisher = snapshot.child("Publisher").getValue(String.class);
                        String shelfno = snapshot.child("Shelf_no").getValue(String.class);
                        try {


                            if (bookname.toLowerCase().contains(searchedString.toLowerCase())) {
                                BookNameList.add(bookname);
                                AuthorNameList.add(author);
                                PublisherList.add(publisher);
                                Shelfnols.add(shelfno);
                                PicList.add(image);
                                Desc.add(desc);

                                counter++;
                            } else if (author.toLowerCase().contains(searchedString.toLowerCase())) {
                                BookNameList.add(bookname);
                                AuthorNameList.add(author);
                                PublisherList.add(publisher);
                                Shelfnols.add(shelfno);
                                PicList.add(image);
                                Desc.add(desc);
                                counter++;
                            }
                        }
                        catch (Exception e){
                            Toast.makeText(getApplicationContext(),"not found",Toast.LENGTH_LONG).show();
                        }


                        if(counter==15){
                            break;
                        }
                        SearchAdapter searchAdapter = new SearchAdapter(SearchPage.this, BookNameList, AuthorNameList, PicList, PublisherList, Shelfnols);
                        recyclerView.setAdapter(searchAdapter);
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }




            });
        }
    });


}

this the adapter class SearchAdapter where I am getting the adapter position on click这是适配器类 SearchAdapter,我在单击时获取适配器位置

public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchViewHolder> {
final public String id="bookname";

    Context context;
    ArrayList<String> BookNameList;
    ArrayList<String> AuthorNameList;
ArrayList<String> PicList;
ArrayList<String> PublisherList;
ArrayList<String> Shelfnols;
LinearLayout booklayout;
DatabaseReference reference;





class SearchViewHolder extends RecyclerView.ViewHolder{
    ImageView bookimage;
    TextView bookname, authorname,publisher,shelfno;

    public SearchViewHolder(@NonNull View itemView) {
        super(itemView);
        bookimage =  itemView.findViewById(R.id.Bookimg);
        bookname =  itemView.findViewById(R.id.BookName);
        authorname =  itemView.findViewById(R.id.AuthorName);
        publisher =  itemView.findViewById(R.id.Publications);
        shelfno =  itemView.findViewById(R.id.Shelfno);
        booklayout=itemView.findViewById(R.id.LinLayout);
        reference = FirebaseDatabase.getInstance().getReference();
        reference.keepSynced(true);

    }
}

public SearchAdapter(Context context, ArrayList<String> bookNameList, ArrayList<String> authorNameList, ArrayList<String> picList,ArrayList<String> publisherList,ArrayList<String> shelfnols) {
    this.context = context;
    BookNameList = bookNameList;
    AuthorNameList = authorNameList;
    PicList = picList;
    PublisherList=publisherList;
    Shelfnols=shelfnols;
}


@NonNull
@Override
public SearchAdapter.SearchViewHolder  onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.activity_search_layout,parent,false);
     return new SearchAdapter.SearchViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull SearchViewHolder holder, final int position) {
    holder.bookname.setText(BookNameList.get(position));
    holder.authorname.setText(AuthorNameList.get(position));
    holder.publisher.setText(PublisherList.get(position));
    holder.shelfno.setText(Shelfnols.get(position));




           holder.itemView.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {

                 Toast.makeText(context,"clicked "+position,Toast.LENGTH_LONG).show();
                   Intent i = new Intent(context,Bookdetailslayout.class);

                 context.startActivity(i);
               }
           });






    Glide.with(context).asBitmap().load(PicList.get(position)).placeholder(R.mipmap.ic_launcher_round).into(holder.bookimage);

}

@Override
public int getItemCount() {
    return BookNameList.size();
}

this is my new activity where i want the book details to be shown这是我的新活动,我希望在其中显示书籍详细信息

public class Bookdetailslayout extends SearchPage {

DatabaseReference reference;
TextView bookname,author,publisher,desc,location;
ImageView image;




@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bookdetailslayout);
    image=(ImageView)findViewById(R.id.img) ;

    bookname = (TextView)findViewById(R.id.bkname);
    author = (TextView) findViewById(R.id.aname);
    publisher = (TextView) findViewById(R.id.pname);
    desc = (TextView) findViewById(R.id.bkdescription);
    location = (TextView) findViewById(R.id.bklocation);
    String Bname=getIntent().getStringExtra("bookname");
    Log.i(Bname, "onCreate: ");



    DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference().child("books");



}

till now I was able to set onclick to new activity and get the position of the click as item 1,2,etc...how do I use this position to get data from firebase to the new activity到目前为止,我能够将 onclick 设置为新活动并将点击位置作为项目 1,2 等...我如何使用此位置从 firebase 获取数据到新活动

create interface创建界面

public interface SetclickListener {

    public void  getposition(int position);
}

inside adapter create constructor内部适配器创建构造函数

 SetclickListener setclicklistener;
public SetclickListener getSetclick(Context context) {
        this.context=context;
        return setclicklistener;
    }

public void setclicklistener(SetclickListener setclickListener){
        setclicklistener=setclickListener;
    }

get selected position获得选定的位置

 setclicklistener.getposition(getAdapterPosition());

then you can implement inside SearchPage activity then you can pass selected position data using Bundle you can send data to other activity然后您可以在 SearchPage 活动中实现 然后您可以使用 Bundle 传递选定的位置数据 您可以将数据发送到其他活动

@Override
    public void getposition(int position) {
                        Intent intent = new Intent(context,DetailsActivity.class);
                        intent.putExtra("name", bookNameList.get(position));
                        startActivity(intent);

                }

        }

}

i used this in my adapter class to get position我在我的适配器类中使用它来获得位置

 public void onClick(View v) {


                   Intent i = new Intent(context,Bookdetailslayout.class);
                   i.putExtra("bookname",BookNameList.get(position));

                   i.putExtra("Image",PicList.get(position));
                   i.putExtra("author_name",AuthorNameList.get(position));
                   i.putExtra("publisher_name",PublisherList.get(position));
                   context.startActivity(i);
               }
           });

then in the next activity然后在下一个活动中

 String imgs=getIntent().getStringExtra("Image");
    String Bname=getIntent().getStringExtra("bookname");
    title.setText(Bname);
    String Author=getIntent().getStringExtra("author_name");
    author.setText(Author);
    String publisher=getIntent().getStringExtra("publisher_name");
    pub.setText(publisher);
    Toast.makeText(this,"image "+imgs,Toast.LENGTH_LONG).show();
    Picasso.get().load(imgs).into(image);

and it works ..thanks for all the help here它有效......感谢这里的所有帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将数据从 FireBase 检索到我的适配器而不是关键 - How can I retrieve data from FireBase to my adapter not the key Firebase 数据检索并将其从片段传递到新活动不起作用 - Firebase data retrieve and passing it from fragment to new activity not working 如何从 Firebase 检索数据到 ListView(使用自定义数组适配器) - How to retrieve data from Firebase into a ListView (with custom Array Adapter) Android Studio:如何从 Firebase 检索特定数据? - Android studio : How do I retrieve specific data from Firebase? 我如何单击一个活动上的卡片视图并使用Firebase中的数据打开新活动 - How can i click on card view on one activity and open new activity with data from Firebase 如何在两个不同的活动中从Firebase实时数据库检索数据 - How can I retrieve data from Firebase Realtime Database in two different activity FireBase Recycler Adapter 未从 FireBase 检索数据 - FireBase Recycler Adapter doesn't retrieve data from FireBase 如何从Firebase Realtime Database Java中的子节点检索数组数据? (Firebase回收器适配器) - How to retrieve array data from children node in Firebase Realtime Database Java? (Firebase Recycler Adapter) 如何从 Adapter 类调用活动方法 - How do I call activity method from Adapter class 如何从适配器获取数据并在Android中的Activity中显示 - how can i get data from adapter and show in Activity in Android
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM