baseadapter - Android Custom listView Adapter Filter not going back to original list -
i have edited adapter class , extended filterable class. search functionality works unable go original content if backspace in search menu.
here adapter class:
public class menu_list_item_adapter extends baseadapter implements filterable { context context; list<foodmenurowitem> rowitems; public menu_list_item_adapter(context context, list<foodmenurowitem> items) { this.context = context; this.rowitems = items; } private class viewholder { imageview imageview; textview txttitle; textview txtdesc; } @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder = null; layoutinflater minflater = (layoutinflater) context .getsystemservice(activity.layout_inflater_service); if (convertview == null) { convertview = minflater.inflate(r.layout.food_menu_item_list_row, null); holder = new viewholder(); holder.txtdesc = (textview) convertview.findviewbyid(r.id.price); holder.txttitle = (textview) convertview .findviewbyid(r.id.description); holder.imageview = (imageview) convertview.findviewbyid(r.id.img); convertview.settag(holder); } else { holder = (viewholder) convertview.gettag(); } foodmenurowitem rowitem = (foodmenurowitem) getitem(position); holder.txtdesc.settext(rowitem.getdesc()); holder.txttitle.settext(rowitem.gettitle()); holder.imageview.setimageresource(rowitem.getimageid()); return convertview; } @override public int getcount() { return rowitems.size(); } @override public object getitem(int position) { return rowitems.get(position); } @override public long getitemid(int position) { return rowitems.indexof(getitem(position)); } @override public filter getfilter() { return new filter() { @suppresswarnings("unchecked") @override protected void publishresults(charsequence constraint, filterresults results) { if (results.count == 0) notifydatasetinvalidated(); else { rowitems = (list<foodmenurowitem>) results.values; menu_list_item_adapter.this.notifydatasetchanged(); } } @override protected filterresults performfiltering(charsequence constraint) { filterresults results = new filterresults(); if (constraint == null || constraint.length() == 0) { // no filter implemented return list results.values = rowitems; results.count = rowitems.size(); } else { // perform filtering operation list<foodmenurowitem> filteredrowitems = new arraylist<foodmenurowitem>(); (foodmenurowitem p : rowitems) { if (p.getname() .touppercase() .startswith(constraint.tostring().touppercase())) { filteredrowitems.add(p); } } results.values = filteredrowitems; results.count = filteredrowitems.size(); } return results; } }; }
}
i check if results 0 or null , if return original list? missing?
you should store rowitems it, , after getting empty text on search area, should restore array rowitems adapter can reload itself. like:
public class menu_list_item_adapter extends baseadapter implements filterable { context context; list<foodmenurowitem> rowitems; list<foodmenurowitem> storedrowitems; public menu_list_item_adapter(context context, list<foodmenurowitem> items) { this.context = context; this.rowitems = items; this.storedrowitems = new list<foodmenurowitem>(items); } // ... @override public filter getfilter() { return new filter() { @suppresswarnings("unchecked") @override protected void publishresults(charsequence constraint, filterresults results) { if (results.count == 0) notifydatasetinvalidated(); else { rowitems = (list<foodmenurowitem>) results.values; menu_list_item_adapter.this.notifydatasetchanged(); } } @override protected filterresults performfiltering(charsequence constraint) { filterresults results = new filterresults(); if (constraint == null || constraint.length() == 0) { // no filter implemented return list results.values = storedrowitems; results.count = storedrowitems.size(); } else { // perform filtering operation list<foodmenurowitem> filteredrowitems = new arraylist<foodmenurowitem>(); rowitems = storedrowitems; (foodmenurowitem p : rowitems) { if (p.getname() .touppercase() .startswith(constraint.tostring().touppercase())) { filteredrowitems.add(p); } } results.values = filteredrowitems; results.count = filteredrowitems.size(); } return results; } }; }
Comments
Post a Comment