listview中adapter的notifyDataSetChanged()不生效的問題

adapter中的數據源集合或數組等必須是同一個數據源,也就是同一個對象。

比如從數據中查找了字符串集合來當做adapter中的數據源:

先初始化數據源,然後將數據源設置到adapter中

List<String> list = Dao.getInstance().queryAllData();//初始化數據源
XXXAdaper adapter = new XXAdapter(list);//設置數據源




當數據源發生變化的時候,我們會調用adaper的notifyDataSetChanged()方法,當直接將從數據庫或者其他方式獲取的數據源集合或者數組直接賦值給當前數據源時,相當於當前數據源的對象發生了變化,當前對象已經不是adapter中的對象了,所以adaper調用notifyDataSetChanged()方法不會進行刷新數據和界面的操作。

錯誤的方法:

list = Dao.getInstance().queryNewAllData();
adapter.notifyDataSetChanged();

正確的方法:

List<String> newList = Dao.getInstance().queryNewAllData();
list.clear();
list.addAll(newList);//或者採用遍歷的方式加入集合
adapter.notifyDataSetChanged();

關鍵就在於數據源的對象不能發生改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章