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?"