Autosearching Option Using Filter Method In Recyclerview
In my app I have implemented a recyclerview with cardview to show the list of the employee inside a company. Now I want to implement a serch option by which user can search with th
Solution 1:
follow this stpes
step 1 implements SearchView.OnQueryTextListener
in youractivity
step 2 in onCreateOptionsMenu
write below code
@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_album_search, menu);
finalMenuItemitem= menu.findItem(R.id.menu_search_album);
finalSearchViewsearchView= (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
returntrue;
}
step 3 write this in onQueryTextChange()
method
@Overridepublic boolean onQueryTextChange(String newText) {
List<MyColleageModel> filteredModelList = filter(data_fieldses, newText);
if (filteredModelList.size() > 0) {
//myPhotosAdapter.setFilter(filteredModelList);returntrue;
} else {
Toast.makeText(MyPhotosActivity.this, "Not Found", Toast.LENGTH_SHORT).show();
returnfalse;
}
}
step 4
private List<MyColleageModel> filter(List<MyColleageModel> models, String query) {
query = query.toLowerCase();
final List<MyColleageModel> filteredModelList = newArrayList<>();
for (MyColleageModel model : models) {
finalStringtext= model.getImagename().toLowerCase().toString();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
// arraylist in your adapter
myPhotosAdapter = newMyPhotosAdapter( MyPhotosActivity.this, (ArrayList<MyColleageModel>) filteredModelList);
recyclerViewMyPhotos.setLayoutManager(newGridLayoutManager(MyPhotosActivity.this, 2));
recyclerViewMyPhotos.setAdapter(myPhotosAdapter);
myPhotosAdapter.notifyDataSetChanged();
return filteredModelList;
}
ask me in case of any query
Solution 2:
IMO you missed setNotifyDatachaged() in onPostExecute() try above code
publicclassMyColleaguesPageextendsAppCompatActivity{
privateRecyclerView recyclerView;
privateMyColleaguesAdapter adapter;
privateList<MyColleageModel> colleagueObject;
InputStream is;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
// Showing and Enabling clicks on the Home/Up buttonif (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
recyclerView = (RecyclerView) findViewById(R.id.colleagues_recycler);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = newLinearLayoutManager(MyColleaguesPage.this);
recyclerView.setLayoutManager(layoutManager);
adapter = newMyColleaguesAdapter(colleagueObject, getApplicationContext());
recyclerView.setAdapter(adapter);
newJSONTask().execute();
}
publicclassJSONTaskextendsAsyncTask<String, String, List<MyColleageModel>> {
@OverrideprotectedvoidonPreExecute() {
super.onPreExecute();
}
@OverrideprotectedList<MyColleageModel> doInBackground(String... params) {
colleagueObject = newArrayList<MyColleageModel>();
try {
//withou GsonJSONObject obj = newJSONObject(loadJSONFromAsset());
JSONArray m_jArry = obj.getJSONArray("contacts");
// ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();// HashMap<String, String> m_li;MyColleageModel my_clg;
for (int i = 0; i < m_jArry.length(); i++) {
JSONObject jo_inside = m_jArry.getJSONObject(i);
//my_clg=new MyColleageModel();String val1 = jo_inside.getString("mobile");
String val2 = jo_inside.getString("mail");
String val3 = jo_inside.getString("name");
String val4 = jo_inside.optString("company");
String val5 = jo_inside.optString("department");
String val6 = jo_inside.optString("title");
my_clg = newMyColleageModel(val1, val2, val3, val4, val5, val6);
colleagueObject.add(my_clg);
}
} catch (JSONException e) {
e.printStackTrace();
}
returnnull;
}
@OverrideprotectedvoidonPostExecute(final List<MyColleageModel> result) {
super.onPostExecute(result);
adapter.notifyDataSetChanged();
}
}
privateStringloadJSONFromAsset() {
...........
}
@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.recyclerviewmenu, menu);
MenuItem search = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
search(searchView);
returntrue;
}
privatevoidsearch(SearchView searchView) {
searchView.setOnQueryTextListener(newSearchView.OnQueryTextListener() {
@OverridepublicbooleanonQueryTextSubmit(String query) {
returnfalse;
}
@OverridepublicbooleanonQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
returntrue;
}
});
}
@OverridepublicbooleanonOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
}
returnsuper.onOptionsItemSelected(item);
}
Post a Comment for "Autosearching Option Using Filter Method In Recyclerview"