浅析:ListView的动态刷新问题
admin
2023-02-09 21:40:12
0

也许很多开发的朋友,尤其是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。

 

其实,在使用notifyDataSetChanged过程中,还是有细节需要注意的。举个例子:

 

我的ListView使用的数据源是来自ArrayList。通常我们的做法是创建一个已经有我们想要提供给ListView的数据的ArrayList,例如:

1 ArrayList list  = new ArrayList;

2 list.add(1);

 

这里我们的list已经是指向了一个堆内存上了。接着我们想要改变list中的数据,而这个时候,就需要注意了,举个例子:我们在代码中有另外一个ArrayList叫做newlist,它是使用下面代码创建出来的:

1 ArrayList newlist  = new ArrayList;

2 list.add(2);

 

这个时候,newlist指向的是一个和list指向不同的堆内存,这个时候,我们直接用list = newlist来把newlist的数据交给list,在这里,实际上只是把list的指向改变了,让它也指向newlist指向的那个内存。那么这个时候我们再调用notifyDataSetChanged这个方法来通知listview更新数据就起不了任何作用了,原因很简单,就是list的指向已经改变,而调用notifyDataSetChanged会去检查原来list指向的数据是否变化,但是这时的list已经不是原来的list了,所以它无法判断,只能不作出响应了。那么,这个问题的解决方法是直接在原来的list上面更改数据,可以使用下面的代码来操作:

1 list.clear();

2 list.addAll(newlist);

3 adapter.notifyDataSetChanged();

 

这样,list的指向就不会改变,它还是指向原来那块内存,这样调用notifyDataSetChanged()就可以起作用了。

 

总结:在这里的重点就是要注意在开始时传给ListViewlist指向不能被改变,需要从始至终指向同一个内存,这样调用notifyDataSetChanged后就能够检测到list的数据变化,从而触发ListView的重新绘制了!另外,我在开发完APP都会用一些APP在线自动化测试工具进行测试:www.ineice.com


相关内容

热门资讯

今日重大通报“掌酷十三张.开挂... 今日重大通报“掌酷十三张.开挂器?”必胜开挂神器您好,掌酷十三张这个游戏其实有挂的,确实是有挂的,需...
【第一财经】“凉山跑得快.真的... 有 亲,根据资深记者爆料凉山跑得快是可以开挂的,确实有挂(咨询软件无需打...
今日重大消息“八闽状元郎.到底... 家人们!今天小编来为大家解答八闽状元郎透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买...
终于了解“春天扑克.到底有挂吗... 有 亲,根据资深记者爆料春天扑克是可以开挂的,确实有挂(咨询软件无需打开...
今日重大消息“麻友圈2贵阳捉鸡... 您好:麻友圈2贵阳捉鸡这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在...
重磅消息“乐乐四川麻将.怎么开... 有 亲,根据资深记者爆料乐乐四川麻将是可以开挂的,确实有挂(咨询软件无需...
今日重大消息“369河南麻将.... 网上科普关于“369河南麻将有没有挂”话题很是火热,小编也是针对369河南麻将作*弊开挂的方法以及开...
终于懂了“棋乐麻将.可以开挂吗... 家人们!今天小编来为大家解答棋乐麻将透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
最新引进“同城游贵阳捉鸡麻将.... 家人们!今天小编来为大家解答同城游贵阳捉鸡麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂...
玩家攻略科普“琼戏互娱.辅助器... 您好:琼戏互娱这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游戏...