码迷,mamicode.com
首页 > 其他好文 > 详细

关于ListView中notifyDataSetChanged()刷新数据不更新原因

时间:2015-10-22 21:15:38      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

使用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中notifyDataSetChanged()刷新数据不更新原因

标签:

原文地址:http://www.cnblogs.com/jasonxcj/p/4902724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!