2012-06-18 6 views
6

Ho un controllo ListView sulla mia applicazione Android che modifico dinamicamente i dati di. Io uso il metodo onFilterComplete() per modificare il contenuto di ListView.Problema di aggiornamento di Elenco ICS Android

Pre gelato Sandwhich il seguente codice funziona bene:

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

Tuttavia su Ice Cream Sandwhich quando uso il filtro dello schermo non viene aggiornato correttamente, Se il filtro restituisce un numero di voci che è più piccolo del precedente ListView quindi i dati lista vecchia sembra essere ancora visibile sullo sfondo, come da questo screenshot:

enter image description here

Dalla schermata si può vedere dove la prima voce nella ListView è, questo è tutto ciò che dovrebbe essere visibile, puoi vedere dove i risultati precedenti sono ancora visibili al di sotto, questi sono solo visibili non sono funzionali in quanto non possono essere tappati, è come se lo schermo non fosse stato aggiornato correttamente .

Quando seleziono il tasto home per lasciare l'applicazione tramite la schermata iniziale e tornare appare tutto come dovrebbe, come nella seguente schermata:

enter image description here

C'è qualcos'altro che devo attuare per aggiorna correttamente il ListView su Ice Cream Sandwhich? Qualcun altro ha riscontrato un problema simile?

Quello che ho funziona bene prima ICS.

+0

Quando si dice "vecchio listview", si intendono solo i vecchi dati nell'adattatore, giusto? O ci sono più 'ListView' uno sopra l'altro? –

+0

Scusa si, voglio dire gli ultimi dati filtrati nell'adattatore, c'è solo un ListView nel layout e sempre un solo ListView nel codice, non più. Quando esco dallo schermo e restituisco il ListView appare come dovrebbe nel secondo immagine dello schermo. –

+0

Come vedo, il filtro dovrebbe già chiamare datasetChanged sull'adattatore, quindi probabilmente non è necessario farlo. Non so se questo potrebbe spiegare il tuo problema, ma vale la pena commentarlo e provarlo. –

risposta

0

Per risolvere questo problema ho cambiato il mio codice di seguito:

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

Dove decLayout è il layout relativo che la mia vista elenco si trova all'interno, questo sembra per aggiornare correttamente lo schermo quando l'elenco viene modificato vista dei dati.

Mentre funziona, non sono sicuro al 100% che sia una correzione valida e mi piacerebbe sentire da chiunque altro abbia problemi simili a questo e potrebbe avere una correzione appropriata.