Ich habe eine ListView auf meiner Android-Anwendung, die ich die Daten dynamisch ändern. Ich verwende die onFilterComplete()
Methode, um den Inhalt der ListView zu ändern.Android ICS ListView aktualisieren Problem
Pre Ice Cream Sandwich folgender Code funktioniert gut:
if(adapter != null) {
adapter.notifyDataSetInvalidated();
lview3.invalidateViews();
adapter.getFilter().filter(aa1.getItem(item), new Filter.FilterListener() {
public void onFilterComplete(int count) {
adapter.notifyDataSetChanged();
if(lview3.getCount() == 0){
lview3.setVisibility(View.GONE);
}
else{
lview3.setVisibility(View.VISIBLE);
}
}});
jedoch auf Ice Cream Sandwich, wenn ich die Filter auf dem Bildschirm verwenden, nicht richtig aktualisiert erhalten, wenn die Filter eine Anzahl von Einträgen zurückgibt, ist kleiner als die vorherige Listview dann die alten Listendatum erscheinen im Hintergrund noch sichtbar zu sein, da pro diesem Screenshot:
Aus dem Screenshot können Sie den erste Eintrag sehen, wo in der ListView ist, das ist alles, was sichtbar sein sollte, Sie können sehen, wo die vorherigen Ergebnisse noch darunter sichtbar sind, diese sind nur sichtbar, sie sind nicht funktional, da sie nicht angezapft werden können, als ob der Bildschirm nicht richtig aufgefrischt wurde .
Wenn ich wählen Sie die Home-Taste die Anwendung über den Home-Bildschirm zu verlassen und zurück alles scheint, wie es sollte, wie im folgenden Screenshot:
Gibt es etwas anderes habe ich zu implementieren Aktualisieren Sie das ListView auf Ice Cream Sandwich? Hat jemand anderes ein ähnliches Problem festgestellt?
Was ich habe funktioniert gut vor ICS.
Wenn Sie die "alte Listview" sagen, meinen Sie eigentlich nur die alten Daten im Adapter, oder? Oder gibt es mehrere 'ListView's übereinander? –
Entschuldigung ja, ich meine die letzten gefilterten Daten im Adapter, es gibt nur einen ListView im Layout und nur einen ListView im Code, nicht mehrere. Wenn ich den Bildschirm verlasse und zurückkehre erscheint der ListView wie er soll in der Sekunde Bildschirmfoto. –
Wie ich es sehe, sollte der Filter DatasetChanged bereits auf dem Adapter aufrufen, so dass Sie dies wahrscheinlich nicht tun müssen. Ich weiß nicht, ob das dein Problem erklären könnte, aber es lohnt sich, es zu kommentieren und auszuprobieren. –