notifyDataSetChanged方法通過一個外部的方法控制如果適配器的內(nèi)容改變時需要強制調(diào)用getView來刷新每個Item的內(nèi)容。
public void notifyDataSetChanged ()
該方法內(nèi)部實現(xiàn)了在每個觀察者上面調(diào)用onChanged事件庄敛。每當(dāng)發(fā)現(xiàn)數(shù)據(jù)集有改變的情況鸣哀,或者讀取到數(shù)據(jù)的新狀態(tài)時,就會調(diào)用此方法。
public void notifyDataSetInvalidated ()
該方法內(nèi)部實現(xiàn)了在每個觀察者上面調(diào)用onInvalidated事件。每當(dāng)發(fā)現(xiàn)數(shù)據(jù)集監(jiān)控有改變的情況,比如該數(shù)據(jù)集不再有效蒲赂,就會調(diào)用此方法。
notifyDataSetInvalidated()刁憋,會重繪控件(還原到初始狀態(tài))
notifyDataSetChanged()凳宙,重繪當(dāng)前可見區(qū)域
心得:
1. notifyDataSetChanged()和notifyDataSetInvalidated()刷新ListView的時候都不會改變當(dāng)前顯示的位置。而重新new一個Adapter职祷,然后ListView重新setAdapter氏涩,會回到初始位置。
2. notifyDataSetChanged:糧倉中得糧食少了有梆,或者多了是尖,發(fā)送通知。(數(shù)據(jù)集合的引用不變)
notifyDataSetInvalidated:糧倉變換了泥耀,比如原來從A倉取糧食饺汹,現(xiàn)在換成了B糧倉。比如重新setList()痰催,更新Adapter中的List兜辞。(數(shù)據(jù)集合的引用變了)