adapter.notifyDataSetChanged()不起作用
</pre><pre name="code" class="java">ArrayAdapter<String> adapter;
private List<String> list = new ArrayList<String>();
// ......
        list.add("1");
        list.add("1");
        list.add("1");
        list.add("1");
        list.add("1");
        list.add("1");
        adapter = new ArrayAdapter<String>(mCtx, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);

//-------------------------------
@Override
    public void onClick(View v) {
<span style="white-space:pre">	</span>List<String> tmp = new ArrayList<>();
<span style="white-space:pre">	</span>tmp.add("A");
<span style="white-space:pre">	</span>tmp.add("A");
<span style="white-space:pre">	</span>tmp.add("A");
<span style="white-space:pre">	</span>tmp.add("A");
<span style="white-space:pre">	</span>tmp.add("A");
<span style="white-space:pre">	</span>list = tmp;
<span style="white-space:pre">	</span>adapter.notifyDataSetChanged();
}
这里点击事件触发的实际并不能实现数据的刷新,原因是
private List<T> mObjects;
<pre name="code" class="java">public ArrayAdapter(Context context, int resource, List<T> objects) {
        init(context, resource, 0, objects);
    }

private void init(Context context, int resource, int textViewResourceId, List<T> objects) {
        mContext = context;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mResource = mDropDownResource = resource;
        mObjects = objects;
        mFieldId = textViewResourceId;
    }
可以看到这里仅仅是做了一个引用。上面list = tmp;做法将变量list重新指向了一块新的内存。

而adapter里面mObjects指向的还是原来的那块数据。adapter里面的数据并发生改变。
可以使用list.addAll(tmp);这样子就可以刷新数据了。
阅读更多
个人分类: Android学习
想对作者说点什么? 我来说一句

ListViewTest

2016年09月12日 103KB 下载

没有更多推荐了,返回首页

不良信息举报

adapter.notifyDataSetChanged()不起作用

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭