i'm writing custom baseadapter (backed set), , need filter data other charsequence (price range, color, etc.).
i looked @ filterable interface , filter class, methods filter uses charsequences.
so, how that? should encode filter parameters charsequence (as json, maybe?), or there better way?
also, what's convertresulttostring method for? because don't need result string, object set, because i'm displaying more information string.
if implements filterable , filter and, since adapter backed set of elements, can ignore charsequences in public filterresults performfiltering(charsequence prefix) method. inside adapter, make copy of set of elements, 1 you'll use fill listview or whatever using.
after that, inside performfiltering(...) method remove elements choosen criteria:
private class clientsfilter extends filter { @override public filterresults performfiltering(charsequence prefix) { // thats result of our filtering process filterresults results = new filterresults(); synchronized (mlock) { // it's idea work copy of original set of elements, can reuse every time want filter arraylist<client> filteredclients = new arraylist<>(originalclients); (int = 0; < filteredclient.size(); i++) { if (// !fit criteria) { // remove clients doesn`t fit criteria, ones stay here filteredclients.remove(i); i--; } } results.values = filteredclients; results.count = filteredclients.size(); } return results; } @override protected void publishresults(charsequence prefix, filterresults results) { // , use filtered clients in our listview, gridview or whatever listviewclients= (arraylist<client>) results.values; adapter.notifydatasetchanged(); } } some tips:
- don't forget use
synchronizedstuff, or you'll have funny errors (npe without visible reason caused race conditions) - using
filterablefiltering process doing in background, ui keeps responsive - call
adapter.getfilter().filter()method when want filter results, example when writing inedittext
Comments
Post a Comment