Skip to content Skip to sidebar Skip to footer

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"