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);这样子就可以刷新数据了。
相关文章推荐
- JAVA Socket通讯
- NIS概述
- Innode表空间碎片优化
- 手动脱UPX 壳实战
- 吐槽
- ajax异步传送数据的方法
- MVC系统过滤器、自定义过滤器
- tomcat启动Flash退出错误不能被视为解决该错误信息
- Python-PyQt4学习资料汇总
- Linux下合并前缀相同的文件的程序流程及其C代码实现
- UML类图关系表示
- 获取屏幕宽高,和dp,px,sp的转化工具类
- 影响进程未调度的一些资料
- 【数据结构】复杂表达式的求值
- elasticsearch的集群配置更新和索引配置更新
- Oracle 中count(1) 和count(*) 的区别
- iOS 动态画圆圈
- java实现中文汉字的首字母排序
- drupal 开发简单网站流程
- cocos2d-x路~使得第一个字游戏(一个)