加载中…
个人资料
SlowlyThinking
SlowlyThinking
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,949
  • 关注人气:86
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

notifyDataSetChanged()不刷新界面的解决办法

(2015-09-09 15:43:10)
分类: JAVA-Android
(亲测有效)


使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据. 

这时候就要注意了: 
                 ...... 
                 private ArrayList> 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, 应该就没问题了

0

阅读 收藏 喜欢 打印举报/Report
前一篇:通宵之后
后一篇:PHP模糊查询
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有