您的位置:首页 > 其它

adapter.notifyDataSetChanged()不起作用

2015-07-09 10:58 423 查看
</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);这样子就可以刷新数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: