adapter.notifyDataSetChanged()不起作用

原创 2015年07月09日 10:58:04
</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);这样子就可以刷新数据了。

ArrayAdapter的notifyDataSetChanged方法与观察者模式的应用

ArrayAdapter的notifyDataSetChanged方法是源码如下的: public void notifyDataSetChanged() { super....
  • piglite
  • piglite
  • 2015年10月10日 11:58
  • 1049

关于ListView中adapter调用notifyDataSetChanged失效的原因总结

相信很多人都曾经被这个问题困扰,当然我也是这样过来的,原来以为只要数据变了,调用adapter的notifyDataSetChanged就会更新列表,然而结果却没有实现,其实是在一些细节上没有注意造成...
  • whitley_gong
  • whitley_gong
  • 2016年01月22日 18:43
  • 7072

adapter.notifyDataSetChanged()使用没有效果的解决办法。

adapter.notifyDataSetChanged()使用没有效果的解决办法。最近写代码,遇到适配器的问题,就是写了listview,里面有个全选框,用来设置全选列表项的。然而,在点击之后,更改...
  • A112740
  • A112740
  • 2015年09月07日 18:04
  • 1085

Adapter Adapter.notifyDataSetChanged()使用时容易出现的问题 跑马灯效果Demo

先来一段跑马灯效果的Demo package com.viewpager.viewpager; import java.util.ArrayList; import java.util.List; ...
  • v587ge
  • v587ge
  • 2014年11月25日 18:01
  • 840

给RecycleView的adapter的加载list更新了,notifyDataSetChanged()无效,未更新

请问大神,为什么,我在给RecycleView的adapter的加载list更新了,notifyDataSetChanged()无效,未更新 。 package sunland.com.itaxi...
  • maimu9365
  • maimu9365
  • 2017年01月02日 09:34
  • 374

数据加载完 adapternotifyDataSetChanged()不更新的问题

上一篇博客,我们的程序才刚开始做。          当你看到这一篇的时候我们的app已经接近尾声了,说实在的还是有点慢啊。         每天都很紧,所以也没有抽出时间来写博客。         ...
  • u012536005
  • u012536005
  • 2015年08月02日 00:11
  • 1652

关于调用adapter.notifydatasetchanged()没有效果的问题

最近在使用ListView的时候,发现调用其Adapter的notifydatasetchanged()并没有刷新数据,代码如下: 首先是初始化ListView: list = dbHelper....
  • liuyi1207164339
  • liuyi1207164339
  • 2016年06月05日 21:48
  • 960

Notification不起作用

今天在学习安卓Notification的时候,按照书上的代码写了一个简单的按理,但是由于没有书上的图片资源,所以在注掉.setSmallIcon(R.drawable.abc)这一行代码 Int...
  • w623423004
  • w623423004
  • 2016年11月17日 11:22
  • 606

@Async不起作用

解决@Async不起作用 3配置spring依赖的jar(不介绍这个了) 4在你需要异步调用的方法上使...
  • bai_bug
  • bai_bug
  • 2017年07月21日 15:30
  • 2784

SetWindowRgn不起作用

不知道,大家在使用windows 这个
  • lixiang987654321
  • lixiang987654321
  • 2014年05月14日 11:26
  • 2030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:adapter.notifyDataSetChanged()不起作用
举报原因:
原因补充:

(最多只允许输入30个字)