Android调用notifyDataSetChanged方法失败解决办法

  

<强> Android调用notifyDataSetChanged方法失败解决办法

  

如果使用列表视图,显示数据表格等进行数据展示,当绑定的数据有了更新的时候,需要实时刷新视图,即调用适配器的notifyDataSetChanged方法,但是很多人在调用之后会发现ListView是数据并没有刷新,这是什么原因呢?下面将对其进行详细解释。

  

1,数据源没有更新,调用notifyDataSetChanged无效。
  2、数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。
  3、数据源更新了,但是要求企业没有收到消息通知,无法动态更新列表。

  

一个典型的错误是:
  

        列表=new String[]{“列表视图项”};   适配器=new ArrayAdapter (android.R.layout.simple_list_item_1,列表);   listView.setAdapter(适配器);   列表=new String[]{}“新列表视图项”;   adapter.notifyDataSetChanged ();   之前      

原先一直以为适配器会监听列表的变化,当重新初始化之列表后,视图会自动进行数据的刷新,其实不然,适配器监听的是新String[]{“列表视图项”}的变化.adapter本身会保存一个对原始数据源(新String[]{“列表视图项”})的内部引用inner_list。
  

  

当执行了列表=new String[]{“新listView1项”};语句之后,重新初始化了,也就是相当与切断了列表与原始数据源(新String[]{“列表视图项”})的关系,因此之后调用notifyDataSetChanged并不会起作用,因为列表和inner_list已经是存在于堆上的完全不同的两个对象了。
  

  

<强>错误回顾:
  

  

前段时间都是所以要针对原始数据对象进行操作,而不是重新赋值。
  

  

看了一下Arrayadapter的源码:
  

        ArrayAdapter:   公共ArrayAdapter(上下文语境、int textViewResourceId T[]对象){   init(上下文、textViewResourceId 0, arrays . aslist(对象));   }   数组:   公共静态& lt; T>ListasList (T…数组){   返回新ArrayList(数组);//注意这里的ArrayList不是常见的那个ArrayList,而是数组的一个内部类. .   }         之前      

以上就是Android调用notifyDataSetChanged方法失败的常见原因及解决办法的总结,如有疑问希望大家留言讨论,或者到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android调用notifyDataSetChanged方法失败解决办法