使用adapter的notifyDataSetChanged时列表数据没有刷新
2016-01-10 22:07
393 查看
纪录一下之前犯得一个错误,在使用viewPager时,在setUserVisible()方法中加载数据,成功之后发现使用adapter的notifyDataSetChanged时,列表还是没有数据,在滑动viewPager俩页之后时才发现列表中有了数据。
notifyDataSetChanged方法是通过反射查看view中使用的数据是否发生了改变,发生了改变,则进行重绘图形
首先在onCreateView方法中给listview设置了一个空的list.
然后我们从网络获取数据赋值给list,然后调用adapter的更新数据的方法,但是这样的结果是列表并没有任何的数据的增加。
问题的原因出在我们是让list引用到了另外一块内存数据块,但他之前引用的那个数据块并没有发生任何的变化,而notifyDataSetChanged恰恰就是检查的那个数据,所以造成了数据没有更新的结果,而滑动viewPager之后,他会重新调用onCreateView方法,给adapter重新设置了更新数据之后的list,故这时列表才有了数据,
可以提供上述的方法,把更新的数据加到之前的list里面,就不会发生原来的情况了.
这里可能有人就会说怎么我在Fragment中这样使用就是错的,而在adapter中使用就不会发生错误,主要是因为在更新adapter时他只会看adapter中list中的数据变化了,当你改变了Fragemnt中list的值,可adapter中的list的数据并没有发生变化
notifyDataSetChanged方法是通过反射查看view中使用的数据是否发生了改变,发生了改变,则进行重绘图形
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { convertView = inflater.inflate(R.layout.zhihu_aty_main,container,false); listView = (ListView) convertView.findViewById(R.id.listView); adapter = new MessageAdapter(list, context); listView.setAdapter(adapter);
首先在onCreateView方法中给listview设置了一个空的list.
list = NetUtils.parseJsonData(); adapter.notifyDataSetChanged();
然后我们从网络获取数据赋值给list,然后调用adapter的更新数据的方法,但是这样的结果是列表并没有任何的数据的增加。
问题的原因出在我们是让list引用到了另外一块内存数据块,但他之前引用的那个数据块并没有发生任何的变化,而notifyDataSetChanged恰恰就是检查的那个数据,所以造成了数据没有更新的结果,而滑动viewPager之后,他会重新调用onCreateView方法,给adapter重新设置了更新数据之后的list,故这时列表才有了数据,
那么该如何来刷新数据呢?
public void addItems(List<MessageWenWen> list){ this.list.addAll(list); notifyDataSetChanged(); }
可以提供上述的方法,把更新的数据加到之前的list里面,就不会发生原来的情况了.
若是想要更换全新的数据则可以
public void updateItemsData(List<MessageWenWen> list){ this.list = list; notifyDataSetChanged(); }
这里可能有人就会说怎么我在Fragment中这样使用就是错的,而在adapter中使用就不会发生错误,主要是因为在更新adapter时他只会看adapter中list中的数据变化了,当你改变了Fragemnt中list的值,可adapter中的list的数据并没有发生变化
相关文章推荐
- 雷锋举报了快播
- 浅析多线程
- synchronized 用法总结
- Servlet3.0注解新特性笔记 (转载IBM)
- HPU:1879畅通工程(kruskal)
- document.body.scrollTop用法
- 触摸事件
- PPAPI插件与浏览器的交互过程
- 使用gdb调试Nginx worker进程
- UIScreen、UIWindow、UIView浅析
- 面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)
- Crazepony软件框架讲解
- 2016第一周日
- poj-2240- Arbitrage bellmanfoyd 模板
- 【iOS】Quartz 2D图片压缩和裁剪
- 史上最全的推广渠道(值得收藏)
- 学习Android从0开始之基础篇(4)-TextView与EditText
- oracle常规与直接路径插入(append)区别
- iOS调用相机和相册 并编辑保存到本地(个人中心设置头像)
- OpenCV程序交叉编译注意事项