2012-06-18 8 views
6

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:

enter image description here

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:

enter image description here

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.

+0

Wenn Sie die "alte Listview" sagen, meinen Sie eigentlich nur die alten Daten im Adapter, oder? Oder gibt es mehrere 'ListView's übereinander? –

+0

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. –

+0

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. –

Antwort

0

Um dies zu beheben, änderte ich meinen Code auf die folgenden:

if(adapter != null) { 
    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); 
     decLayout.invalidate(); 
    } 
}}); 

Wo decLayout die relative Layout ist, dass meine Listenansicht innerhalb sitzt, scheint dies auf den Bildschirm, wenn die Listenansicht Datenänderungen nicht korrekt aktualisiert werden.

Während dies funktioniert, bin ich nicht 100% sicher, es ist eine gültige Lösung und ich würde gerne von jemand anderem hören, der ähnliche Probleme hat und möglicherweise eine richtige Lösung hat.