Android中ListView调用Adapter的notifyDataSetChanged()界面没有刷新的原因

╰+哭是因爲堅強的太久メ 2022-09-01 14:58 225阅读 0赞

问题描述

今天写了个代码,ListView下面增加展开、收缩的按钮。我的思路是为list准备一个副本list2,原来的list用于展示,副本用于恢复数据,思路其实没有错,但是调用notifyDataSetChanged()并没有起到展开、收起的效果。

原因分析

适配器原来是其他人写的,适配器里面已经有new ArrayList的代码了,但是我在Activity里面又new出了一个ArrayList,这和适配器采用的集合不一致,所以调用notifyDataSetChanged()起不到刷新界面的作用。

错误示范如下:

  1. //其他人原来就写好的适配器
  2. public class OtherPeopleAdapter exends BaseAdapter{
  3. private List<Object> list=new ArrayList();//适配器里面已经new出一个ArrayList了
  4. public OtherPeopleAdapter(List<Object> list){
  5. //构造器
  6. this.list.addAll(list);
  7. }
  8. }
  9. public class MainActivity{
  10. private List<Object> list=new ArrayList();//然而你在活动里又new出一个ArrayList
  11. }

你在活动里又new出一个ArrayList,你希望改变活动里面的ArrayList的元素内容,再调用Adapter的notifyDataSetChanged()方法刷新页面,结果肯定刷新不了的,因为适配器已经早有属于自己的ArrayList了。
正确示范如下:

  1. //其他人原来就写好的适配器
  2. public class OtherPeopleAdapter exends BaseAdapter{
  3. private List<Object> list;//不要在这里new ArrayList
  4. public OtherPeopleAdapter(List<Object> list){
  5. //构造器
  6. this.list=list;
  7. }
  8. }

总而言之,要保证Adapter使用的是同一个ArrayList,不能在这边new一个,那边又new一个,Adapter不会脚踏两条船,别人变成什么样,不关它的事,也就肯定不会刷新页面。

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读