I have implemented a recycler view in my app to show the list of person in a company. I stored all those information in Realm DB. Now I want to implement search option at the top of the window so that user can search a person by name. I have tried with the following code. But this functionality is not working. I cannot make any search on this window. Here is my code for recyclerView searchView.
My activity class
public class MyColleaguesPage extends AppCompatActivity implements MyColleaguesAdapter.ColleagueListListener{
private RecyclerView recyclerView;
private MyColleaguesAdapter adapter;
private Realm colleagueRealm;
private RealmResults<MyColleagueModel> colleagueResult;
private List<MyColleagueModel> filteredModelList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
}
colleagueRealm = Realm.getDefaultInstance();
recyclerView = (RecyclerView) findViewById(R.id.colleagues_recycler);
if (!Prefs.with(this).getPreLoadColleague()) {
setRealmData();
}
setUpRecycler();
showAllPersons();
}
private void showAllPersons() {
colleagueResult = colleagueRealm.where(MyColleagueModel.class).findAll();
setAdapter(colleagueResult);
adapter.notifyDataSetChanged();
}
private void setAdapter(RealmResults<MyColleagueModel> results) {
adapter = new MyColleaguesAdapter(this, colleagueRealm.where(MyColleagueModel.class).findAllSortedAsync("id"),this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
private void setUpRecycler() {
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
recyclerView.setHasFixedSize(true);
// use a linear layout manager since the cards are vertically scrollable
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
}
private void setRealmData(){
.......
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.recycler_menu, menu);
final MenuItem item = menu.findItem(R.id.search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
search(searchView);
return true;
}
private void search(SearchView searchView) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
filteredModelList = filter(colleagueResult, newText);
if (filteredModelList.size() > 0) {
return true;
} else {
Toast.makeText(MyColleaguesPage.this, "Not Found", Toast.LENGTH_SHORT).show();
return false;
}
}
});
}
private List<MyColleagueModel> filter(List<MyColleagueModel> models, String query) {
query = query.toLowerCase();
filteredModelList = new ArrayList<>();
for (MyColleagueModel model : models) {
final String text = model.getName().toLowerCase().toString();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
// arraylist in your adapter
adapter = new MyColleaguesAdapter(this,colleagueRealm.where(MyColleagueModel.class).findAllSortedAsync("name"), getApplicationContext());
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
return filteredModelList;
}
}
My Adapter Class
public class MyColleaguesAdapter extends RealmRecyclerViewAdapter<MyColleagueModel, MyColleaguesAdapter.ColleagueHolder>{
private List<MyColleagueModel> myColleagueModels;
private Context context;
public interface ColleagueListListener {
}
private final ColleagueListListener colleagueListListener;
public MyColleaguesAdapter(ColleagueListListener colleagueListListener, RealmResults<MyColleagueModel> realmResults, Context context ) {
super(realmResults, true);
this.context = context;
this.colleagueListListener = colleagueListListener;
}
// create new views (invoked by the layout manager)
@Override
public ColleagueHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflate a new colleague view
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.colleage_row_layout,parent,false);
return new ColleagueHolder(view);
}
@Override
public void onBindViewHolder(ColleagueHolder holder, int position) {
final MyColleagueModel myColleague = getData().get(position);
//final MyColleagueModel myColleague=realmResults.get(position);
holder.colleagueName.setText(myColleague.getName());
holder.companyName.setText(myColleague.getCompany());
holder.jobTitle.setText(myColleague.getTitle());
holder.cardView.setTag(position);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//editDataInterface.editData(view,position);
int pos = (int)view.getTag();
Intent i=new Intent(context,DetailMyColleague.class);
i.putExtra("name",myColleague.getName());
i.putExtra("title",myColleague.getTitle());
i.putExtra("company",myColleague.getCompany());
context.startActivity(i);
}
});
}
public class ColleagueHolder extends RecyclerView.ViewHolder{
.......
}
}
}