2012-05-20 6 views

risposta

39

Ebbene sì, c'è.

ListView.invalidateViews() viene utilizzato per dire a ListView di invalidare tutte le sue viste di elementi figlio (ridisegnarle). Si noti che non è necessario un numero uguale di visualizzazioni rispetto agli articoli. Ecco perché una ListView ricicla le sue viste degli oggetti e li sposta sullo schermo in modo intelligente mentre scorri.

Adapter.notifyDataSetChanged() d'altra parte, è quello di dire all'osservatore dell'adattatore che il contenuto di ciò che si sta adattando è cambiato. Notificare il set di dati modificato farà sì che la listview invochi nuovamente i tuoi adattatori per regolare le barre di scorrimento, rigenerare le visualizzazioni degli articoli, ecc ...

La maggior parte delle volte si vorrebbe usare notifyDataSetChanged invece di invalidateViews, ma sicuramente dipende da cosa stai cercando di realizzare.

+0

Sono poco confuso quando si dice _Note che non è necessario un numero uguale di visualizzazioni rispetto agli elementi_. Qual è la differenza tra visualizzazioni e articoli. –

+2

@black crow: una listview non crea una vista per articolo. Invece di solito ha solo il numero di visualizzazioni che si adatteranno allo schermo più uno, e le muoverà mentre scorri. In parole semplici: non crea viste per elementi che non sono visibili. –

+2

Hai spazio per 10 visualizzazioni sullo schermo e hai 20 nella tua scheda ... così hai 10 visualizzazioni e 20 elementi. – Barak