您的位置:首页 > 其它

使用adapter的notifyDataSetChanged时列表数据没有刷新

2016-01-10 22:07 393 查看
纪录一下之前犯得一个错误,在使用viewPager时,在setUserVisible()方法中加载数据,成功之后发现使用adapter的notifyDataSetChanged时,列表还是没有数据,在滑动viewPager俩页之后时才发现列表中有了数据。

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的数据并没有发生变化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: