I'm showing a list of data. By default, I show data using FirebaseRecyclerPagingAdapter
as my list of data is large. I also have search options, when a user submits any query I searched the result in my firebase realtime-database
in this case I used FirebaseRecyclerAdapter
for showing my result. By default, I'm getting expected result but when anything is searched I'm not getting any output. Is it possible to set a different adapter to a single recycler view? Here is my code
private FirebaseRecyclerPagingAdapter<BookLight, BookViewHolder> mAdapter;
private FirebaseRecyclerAdapter<BookLight,BookViewHolder> mAdapterNopage;
private static final String ALL_TYPE="all";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
recyclerView = view.findViewById(R.id.recyclerviewid_grp);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));
loadData(ALL_TYPE);
return view;
}
private void loadData(String queryBook){
Query query;
if(queryBook.equals(ALL_TYPE)){
query=FirebaseDatabase.getInstance().getReference()
.child("GroupMembersBooks")
.child(groupDetails.getGroupID())
.child("books");
mAdapter = new FirebaseRecyclerPagingAdapter<BookLight, BookViewHolder>(options) {
//other stuffs
recyclerView.setAdapter(mAdapter);
};
}
else{
Log.e(TAG, "loadData: "+queryBook);
query=FirebaseDatabase.getInstance().getReference()
.child("GroupMembersBooks")
.child(groupDetails.getGroupID())
.child("books")
.orderByChild("bookName")
.startAt(queryBook);
mAdapterNopage = new FirebaseRecyclerAdapter<BookLight, BookViewHolder>(options) {
//other stuffs
};
recyclerView.setAdapter(mAdapterNopage)
}
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater menuInflater) {
menuInflater.inflate(R.menu.group_timeline_menu,menu);
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.action_book_search).getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getActivity().getComponentName()));
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
loadData(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
super.onCreateOptionsMenu(menu,menuInflater);
}
Use swapAdapter
recyclerView.swapAdapter(yourAdapter, false)
For more information about swapAdapter
refer here swapAdapter