您的位置:首页 > 移动开发 > Android开发

关于Adapter的notifyDataSetChanged是否生效

2016-04-10 16:45 357 查看
最近在开发android一个项目的时候,发现有时候notifyDataSetChanged不起作用。后来发现是我理解错了。

一个典型的错误是:

list1 = new String[]{“listView1 item”};

ap1 = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list1);

listView1.setAdapter(ap1);

list1 = new String[]{“new listView1 item”};

ap1.notifyDataSetChanged();

我一直以为ap1会监听list1的变化,重新初始化list1,然后执行相应的更新,现在才知道不对,ap1监听的是new String[]{“listView1 item”}的变化。

换种说法就是ap1本身会保存一个对原始数据源(new String[]{“listView1 item”})的内部引用inner_list1。

  list1 = new String[]{“new listView1 item”};相当与切断了list1与原始数据源(new String[]{“listView1 item”})的关系,因此之后调用notifyDataSetChanged并不会起作用,因为list1 和inner_list1已经是存在于堆上的完全不同的两个对象了,自然而然,notifyDataSetChanged是不会生效的了,仅此牢记!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android listview