关于ListView中notifyDataSetChanged()刷新数据不更新原因
发布日期:2021-05-24 09:07:28 浏览次数:6 分类:技术文章

本文共 767 字,大约阅读时间需要 2 分钟。

使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据.
这时候就要注意了:
......
private ArrayList<HashMap<String, Object>> usersList;
......
usersList= query(......); //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源usersList
sAdapter.notifyDataSetChanged();
......
如果你也是: 上面这种形式去刷新ListView的数据的话, 是不可以更新的. 必须改成如下形式:
......
//usersList= query(......);
usersList.clear();
usersList.addAll(query(......));
sAdapter.notifyDataSetChanged();
///
原因是: sAdapter会通过usersList获取List中的内容。但是实际上可能(也应该)是,在调用super(MyActivity.this, R.layout.item, usersList)时sAdapter保存了usersList指向原List(假设为List a)的引用,在调用query函数之后,usersList指向了一个新的List(List b)。但是在调用notifyDataSetChanged()时,sAdapter会跟据保存的引用(即指向List a的引用)去更新,因此当然还是原来的结果,不会进行更新。
如果大家也出现这种情况可以使用后者去刷新ListView, 应该就没问题了

转载地址:https://blog.csdn.net/liyong1028826685/article/details/88289133 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:怎样把信息绘制到图片中并且保存到本地硬盘上
下一篇:android中获取联系人相关信息

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月24日 04时37分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章