国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > ListView中notifyDataSetChanged()无法刷新数据的错误实例

ListView中notifyDataSetChanged()无法刷新数据的错误实例

来源:程序员人生   发布时间:2015-03-18 09:32:45 阅读次数:3418次
在使用ListView需要动态刷新数据的时候,常常会用到notifyDataSetChanged()函数。
以下为两个使用的毛病实例:

1、
没法刷新:
private List<RecentItem> recentItems; ...... recentItems = getData() mAdapter.notifyDataSetChanged();
正常刷新:
private List<RecentItem> recentItems; ...... recentItems.clear(); recentItems.addAll(getData); mAdapter.notifyDataSetChanged();
缘由:
    mAdapter通过构造函数获得List a的内容,内部保存为List b;此时,a与b包括相同的援用,他们指向相同的对象。
    但是在语句recentItems = getData()以后,List a会指向1个新的对象。而mAdapter保存的List b依然指向原来的对象,该对象的数据也并没有产生改变,所以Listview其实不会更新。

2、
我在页面A中绑定了数据库的数据,在页面B中修改了数据库中的数据,希望在返回页面A时,ListView刷新显示。
没法刷新:
protected void onResume() { mAdapter.notifyDataSetChanged(); super.onResume(); }
正常刷新:
protected void onResume() { recentItems.clear(); recentItems.addAll(recentDB.getRecentList()); mAdapter.notifyDataSetChanged(); super.onResume(); }
缘由:
    mAdapter内部的List指向的是内存中的对象,而不是数据库。所以改变数据库中的数据,其实不会影响该对象。


void
notifyDataSetChanged()
Notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself.


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生