2012-06-18 18 views
6

Mam ListView na mojej aplikacji Android, którą dynamicznie zmieniam dane. Używam metody onFilterComplete() do zmiany zawartości ListView.Android ICS ListView Odśwież problem

Pre Lody Sandwhich następujący kod działa poprawnie:

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); 
    } 
}}); 

Jednak na Ice Cream kanapki kiedy użyć filtru ekran nie zostanie odświeżony prawidłowo Jeśli filtr zwraca liczbę wpisów, które są mniejszy niż w poprzednim ListView następnie stara lista danych wydaje się być nadal widoczne w tle, jak na tym zrzucie ekranu:

enter image description here

z zrzucie ekranu można zobaczyć, gdzie pierwsza pozycja w ListView, to wszystko, co powinno być widoczne, możesz zobaczyć, gdzie poprzednie wyniki są nadal widoczne pod spodem, są tylko widoczne, że nie działają, ponieważ nie można ich użyć, wygląda to tak, jakby ekran nie został poprawnie odświeżony .

Kiedy wybrać przycisk home opuścić aplikację za pomocą ekranu głównego i powrót pojawia się wszystko tak jak powinno, jak na poniższym zrzucie ekranu:

enter image description here

Czy coś jeszcze muszę wdrożyć do właściwie odświeżyć ListView na Ice Cream Sandwhich? Czy ktoś napotkał podobny problem?

Co mam działa dobrze przed ICS.

+0

Kiedy mówisz "stary widok listy", masz na myśli tylko stare dane w adapterze, prawda? Czy istnieje wiele "ListView" jeden na drugim? –

+0

Przepraszam tak, mam na myśli ostatnie przefiltrowane dane w adapterze, istnieje tylko jeden ListView w układzie i tylko jeden kod ListView w kodzie, nie wiele., Kiedy opuszczam ekran i zwracam ListView pojawia się tak, jak powinien w drugim zrzut ekranu. –

+0

Jak widzę, filtr powinien już wywołać datasetChanged na adapterze, więc prawdopodobnie nie musisz tego robić. Nie wiem, czy to by wyjaśniało twój problem, ale warto go komentować i wypróbowywać. –

Odpowiedz

0

Aby rozwiązać ten problem zmieniłem kod do następujących:

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(); 
    } 
}}); 

Gdzie decLayout jest względny układ, że moja lista widok siedzi wewnątrz, to wydaje się poprawnie odświeżania ekranu, gdy lista zmian widoku danych.

Podczas tej pracy nie jestem w 100% pewien, czy jest to poprawna poprawka i chciałbym usłyszeć od kogoś, kto ma problemy podobne do tego i może mieć poprawną poprawkę.