18
ListView.invalidateViews()
和Adapter.notifyDataSetChanged()
之間有什麼區別嗎?`ListView.invalidateViews()`和'Adapter.notifyDataSetChanged()'之間是否有區別?
ListView.invalidateViews()
和Adapter.notifyDataSetChanged()
之間有什麼區別嗎?`ListView.invalidateViews()`和'Adapter.notifyDataSetChanged()'之間是否有區別?
嗯,是的,有。
ListView.invalidateViews()
用於告訴ListView使其所有子項視圖無效(重繪它們)。 請注意,不需要有與項目相同數量的視圖。這是因爲在滾動時,ListView可以循環使用它的項目視圖並以智能方式在屏幕上移動它們。
Adapter.notifyDataSetChanged()
另一方面,是告訴適配器的觀察者,正在改編的內容已經改變。通知更改的數據集將導致列表視圖再次調用適配器方法來調整滾動條,重新生成項目視圖等...
大多數時候您想要使用notifyDataSetChanged
而不是invalidateViews
,但它肯定取決於什麼你正在努力完成。
當你說_注意不需要與items_有相同數量的視圖時,我有點困惑。視圖和項目之間有什麼區別。 –
@black crow:listview不會爲每個項目創建一個視圖。相反,它通常只有適合屏幕加1的視圖數量,並在滾動時移動它們。簡而言之:它不會爲不可見的項目創建視圖。 –
您可以在屏幕上顯示10個視圖的空間,並且您的適配器中有20個視圖...所以您有10個視圖和20個項目。 – Barak