C'è qualche differenza tra ListView.invalidateViews()
e Adapter.notifyDataSetChanged()
?C'è qualche differenza tra `ListView.invalidateViews()` e 'Adapter.notifyDataSetChanged()'?
risposta
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.
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. –
@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. –
Hai spazio per 10 visualizzazioni sullo schermo e hai 20 nella tua scheda ... così hai 10 visualizzazioni e 20 elementi. – Barak