Android ListView Adapter notifyDataSetChanged 刷新没有效果

来源:互联网 发布:文字作图软件 编辑:程序博客网 时间:2024/05/19 16:20

1、唠叨
最近发现使用ListView的时候,通过调用Adpater的notifyDataSetChanged方法不能刷新UI数据显示
2、原因分析
1).数据源没有更新,调用notifyDataSetChanged无效。
2).数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。
3).数据源更新了,但是adpter没有收到消息通知,无法动态更新列表。
3、解析

List<String> mList=new ArrayList<String>();mList.add("http://fir.im/yzappsec");CusAdapter mAdapter = new CusAdapter(this,mList);listView.setAdapter(mAdater);

此时mAdapter保存了mList的引用

//模拟一个新数据List<String> newList= new ArrayList<String>();newList.add("http://fir.im/holdyou");//赋值给mListmList = newList;//此时调用,发现没有效果mAdapter.notifyDataSetChanged();

当newList赋值给mList的时候 mList指向了一个新的List,但是notifyDataSetChanged方法调用的时候,mAdapter却更新的是保存的引用,因此原引用根本没发生变化,不会更新UI显示

4、代码展示几种解决办法

//方法一mList.add("http://fir.im/holdyou");List<String> newList = new ArrayList<String>();for (String temp : mList) {      newList.add(temp); } mList.clear(); mList.addAll(newList); //此时mList中就是2条数据 mAdapter.notifyDataSetChanged();
//方法二//通过向自定义的Adapte中增加更新数据的方法public void setList(List<String> list) {        this.mList = list;}//在使用的时候调用mAdapter.setList(mList);mAdapter.notifyDataSetChanged();
0 0