Skip to content Skip to sidebar Skip to footer

Android Action Bar Search: How To Filter A List By The Property Of A List Item?

I have a list view with a list item, which has few text views and a checkbox. Using action bar search, I need to filter out the list by a text view value. This is my list which I

Solution 1:

the most efficient way is to implement a filter on your adapter. For this you must implement the interface Filterable (implements Filterable). Then implement the method getFilter like this.

@OverridepublicFiltergetFilter() {
        returnnewFilter() {
            @OverrideprotectedFilterResultsperformFiltering(CharSequence charSequence) {
                List<Object> filteredResult = getFilteredResults(charSequence);

                FilterResults results = newFilterResults();
                results.values = filteredResult;
                results.count = filteredResult.size();

                return results;
            }

            @OverrideprotectedvoidpublishResults(CharSequence charSequence, FilterResults filterResults) {
                listaFiltrada = (ArrayList<Documento>) filterResults.values;
                MyAdapter.this.notifyDataSetChanged();
            }


            privateArrayList<Object> getFilteredResults(CharSequence constraint){
                if (constraint.length() == 0){
                    return  listaDocumentos;
                }
                ArrayList<Object> listResult = newArrayList<Object>();
                for (Object obj : listaTotal){
                    if (condition){
                        listResult.add(obj);
                    }
                }
                return listResult;
            }
        };
    }

Finally, in your Fragment or Activity, in the method onCreateOptionsMenu get the EditText (search) and add this:

finalEditTexteditText= (EditText) menu.findItem(R.id.menu_buscar).getActionView();
        editText.addTextChangedListener(newTextWatcher() {
            @OverridepublicvoidbeforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

            }

            @OverridepublicvoidonTextChanged(CharSequence charSequence, int i, int i2, int i3) {
                if (myAdapter != null) {
                    myAdapter.getFilter().filter(charSequence);
                }
            }

            @OverridepublicvoidafterTextChanged(Editable editable) {

            }
        });

Hope it helps you :)

Post a Comment for "Android Action Bar Search: How To Filter A List By The Property Of A List Item?"