从内存角度分析notifyDataSetChanged刷新数据无效
来源:互联网 发布:mac更新 进度条 编辑:程序博客网 时间:2024/04/29 18:03
当我们的界面上有ListVIew这种控件,每当数据源改变时,我们希望调用Adapter的notifyDataSetChanged这个方法,来更新ListView中的数据.但有时候会发现,明明已经调用了这个方法,但是数据却没有任何变化.下面就来详细解释一下为什么会出现这种情况.
通常,我们会创建一个List来提供我们所需要的数据源
List<Object> mList=new ArrayList<Object>();
当程序运行的时候,这句代码做了两件事
(1),在堆内存中创建一个ArrayList<Object>();
(2).在栈内存中创建了一个List类型的引用,并将这个引用指向堆内存中的ArrayList实例.
当我们的数据改变时(一般从网络上获取),如果我们采用下面的错误写法
写法一
List<Object> dataList=(网络获取数据);mList=dataList;adapter.notifyDataSetChanged();
或者
写法二
mList=(网络获取数据);adapter.notifyDataSetChanged();
则ListView不会有任何变化.
原因在于,无论是使用哪种方法,都会试mList的引用发生改变.
前面已经说了,当mList创建的时候,mList是保存在栈内存中的,他里面保存的是一个内存地址,而当我们无论采用写法一还是写法二的时候,都会改变mList的指向.这时候调用adapter.notifyDataSetChanged();时,由于mList的指向已经发生改变,所以adapter无法判断,所以也就不进行刷新了.
那么,如果我们想要在数据发生改变时,ListView能够刷新数据,只需要这样写就可以了
List<Object> dataList=(网络获取数据);mList.clear();mList.addAll(dataList);adapter.notifyDataSetChanged();
这样,当数据发生改变时,我们的ListView就能够正确刷新数据了
0 0
- 从内存角度分析notifyDataSetChanged刷新数据无效
- FragmentPagerAdapter刷新notifyDataSetChanged无效
- ListView中notifyDataSetChanged()刷新数据不更新原因分析
- ListView notifyDataSetChanged()不刷新数据
- 从源代码的角度分析--在BaseAdapter调用notifyDataSetChanged()之后发生了什么
- 从源代码的角度分析--在BaseAdapter调用notifyDataSetChanged()之后发生了什么
- 从源代码的角度分析--在BaseAdapter调用notifyDataSetChanged()之后发生了什么
- 从源代码的角度分析--在BaseAdapter调用notifyDataSetChanged()之后发生了什么
- 从源代码的角度分析--在BaseAdapter调用notifyDataSetChanged()之后发生了什么
- 从java内存分配角度分析android内存泄漏问题
- fragment更新数据后使用notifyDataSetChanged()无效
- 【android】从源码分析调用ViewPager的notifyDataSetChanged无刷新的问题及解决方法
- 【Android】从源码分析PagerAdapter/FragmentPagerAdapter调用notifydataSetChanged()刷新的原理
- notifyDataSetChanged无效
- 解决用notifyDataSetChanged动态刷新ListView无效的问题
- Android FragmentStatePagerAdapter.notifyDataSetChanged()刷新数据的问题
- notifyDataSetChanged()刷新数据不更新原因
- 多态机制原理解析--从内存角度分析
- Otsu’s 二值化
- 关于JobTracker和TaskTracker 的理解
- 关于springmvc @requestmapping(自己整理总结)
- Android中的Junit单元测试
- 浅议JavaMail使用教程以及所遇问题及解决方案(壹)
- 从内存角度分析notifyDataSetChanged刷新数据无效
- 394. Decode String 题解
- 视觉相机镜头专业名词
- 【工具】--Docker简介
- gradle错误。
- Mapping Oracle XMLType to Document with Hibernate
- 浅析this指针(c++)
- 秒杀实现原理及实现方式
- 显示vim当前编译的文件名