1

I have 2 buttons. On button click I decide which database to select for recyclerview. As for example on button B1's click, I set database DB1 for recyclerview. I am using firebaserecycleradapter. The problem is, getAdapter().notifyDataSetChanged() for recyclerview doesn't seem to work from FirebaseRecyclerAdapter definiton but works from populateviewholder. But since I set query on FirebaseRecyclerAdapter definition, at the end the database to be selected doesn't change on button click.

Here's some code:

//global declaration
  FirebaseRecyclerAdapter<HomeBlog, BlogViewHolder> firebaseRecyclerAdapter;

//FirebaseRecyclerAdapter part:


             firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<HomeBlog, BlogViewHolder>(

                    HomeBlog.class,
                    R.layout.profile_row,
                    BlogViewHolder.class,
                    query

//the query is the Firebase database that I want at a time.
//since getAdapter().notifyDataSetChanged() not reloading from here. query remains same.

            )
            {
                @Override
                protected void populateViewHolder(BlogViewHolder viewHolder, HomeBlog model, int position) {


                    final String post_key = getRef(position).getKey();

                    final String postPosition = String.valueOf(position);

//getAdapter().notifyDataSetChanged() seems to load in populateviewholder though.
//this I checked using Toast.



                    viewHolder.setImage(post_key);

                    viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            //other code


                        }
                    });

                }
            };

            mBlogList.setAdapter(firebaseRecyclerAdapter);




//one button click example:
 grid.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //changing the query

                query = mDatabase.orderByChild("UserId").equalTo(userId);
                mBlogList.setAdapter(firebaseRecyclerAdapter);
                mBlogList.getAdapter().notifyDataSetChanged();

            }
        });

I want to make sure the firebaserecycleradapter definition part also loads when I call getAdapter().notifyDataSetChanged(). Because it holds the query. Is there some approach to do that? Or I am doing a completely wrong process?

Zubayr
  • 369
  • 1
  • 14

1 Answers1

0

After you call setAdapter(), you can then use notifyDataSetChanged() on that adapter. Example:

mBlogList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.notifyDataSetChanged();

Then your data will be updated.

Peter Haddad
  • 65,099
  • 21
  • 108
  • 107