必威体育Betway必威体育官网
当前位置:首页 > IT技术

notifyDataSetChanged()刷新数据不更新原因

时间:2019-09-03 00:11:04来源:IT技术作者:seo实验室小编阅读:60次「手机版」
 

notifydatasetchanged

使用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, 应该就没问题了 。

相关阅读

Android 解决 adapter.notifyDataSetChanged() 不起作

转载请注明出处:http://blog.csdn.net/like_program/article/details/52517119 使用 Listview 的时候,给 adapter 的数据源 List

Android ListView优化之局部刷新(更新)(非notifyDataSetC

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53020164 【DylanAndroid的csdn博客】 在Android开

notifyDataSetChanged和notifyDataSetInvalidated区别

notifyDataSetChanged和notifyDataSetInvalidated区别以及观察者模式的使用 看Observer和Observable的时候,爬了下Listview的

分享到:

栏目导航

推荐阅读

热门阅读