分享

关于Adapter的notifyDataSetChanged是否生效

 一戒745zia4sgs 2016-01-08

碰上了一个很好玩的bug,listview监听的是原始数据源的数据!!!!,还记得rrz里面签到时老是不回显么,最后解决方式是为了保证(List)siDays是同一数据源 siDays.addAll(siDays2);wa ka ka 聪明

最近在开发android一个项目的时候,发现有时候notifyDataSetChanged不起作用。后来发现是我理解错了。

一个典型的错误是:

list1 = new String[]{"listView1 item"};
ap1 = new ArrayAdapter<String>(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是不会生效的了,仅此牢记!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多