android - How to filter ListView by something else then CharSequence? -


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 synchronized stuff, or you'll have funny errors (npe without visible reason caused race conditions)
  • using filterable filtering process doing in background, ui keeps responsive
  • call adapter.getfilter().filter() method when want filter results, example when writing in edittext

Comments