2013-01-31 17 views
9

So, nachdem ich den Filter auf meinem Listview gesetzt:Android - Listenansicht Filterzähler

//Log adapter count before filter 
listView.getFilter().filter(searchStr) 
//Log adapter count after filter 

Was zu erreichen Ich versuche, ist die Anzahl der das Ergebnis dieser Filterung zu erhalten. Wie wenn vorher 10 Elemente vorhanden sind, dann wende ich den Filter an, so dass jetzt nur 5 Elemente angezeigt werden, ich möchte diese Anzahl "5" erhalten. Ich habe versucht, die Adapterzahl vor und nach dem Filter zu überprüfen, ohne Glück. Sie zeigen dieselbe Anzahl an (ich verwende einen BaseExpandableListAdapter), wenn ich Filter anwende, und wenn ich den Filter erneut anwende, ändert sich die Zahl von vorher (aber das Vorher und Nachher des Filters ist immer noch dasselbe).

Unten finden Sie eine Probe Ergebnis das, was ich auf meinen Protokollen bekommen:

Before filter the count is 10. After filter the count is 10. 
Before filter the count is 8. After filter the count is 8. 

Ich dachte, vielleicht mein Adapter nicht das reflektierte Zählung sofort bekommt aber auf dem zweiten Filter, ändert es den Wert , also dachte ich, notifyDataSetChanged nach dem Filter würde einen Unterschied machen, aber es nicht. Jede Hilfe wäre willkommen.

Danke.

Antwort

19

Dies ist, wie ich es geschafft:

myAdapter.getFilter().filter(searchText, new Filter.FilterListener() { 
    public void onFilterComplete(int count) { 
     Log.d("log", "result count:" + count); 
    } 
}); 
+0

das löste mich tatsächlich das ursprüngliche Problem, plus ein anderes: meine Liste erschien für einen Bruchteil einer Sekunde mit allen Elementen, aufgrund der Tatsache, dass der Filter in Asynctask transparent ausgeführt wird, und setAdapter aufgerufen wurde, bevor publishResults tatsächlich passierte – leRobot

+1

fehlend) ; \t in Ihrem Code ,,, seine offene Nähe Filter (aber keine enge Klammer.so hinzufügen); am Ende – sasikumar

-1

Versuchen Sie, nach dem Anwenden des Filters listview.getCount() aufzurufen.

+0

ich ExpandableListView bin mit. Und wenn Sie dies verwenden, gibt die Gruppe nicht die Anzahl der Kinder für jede Gruppe zurück. – lorraine