浅析:ListView的动态刷新问题

也许不少开发的朋友,尤为是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并无起到做用。有时会被困扰得很痛苦。工具

 

其实,在使用notifyDataSetChanged过程当中,仍是有细节须要注意的。举个例子:测试

 

个人ListView使用的数据源是来自ArrayList。一般咱们的作法是建立一个已经有咱们想要提供给ListView的数据的ArrayList,例如:spa

1 ArrayList<Integer> list  = new ArrayList<Interger>;内存

2 list.add(1);开发

 

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

1 ArrayList<Integer> newlist  = new ArrayList<Interger>;it

2 list.add(2);自动化

 

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

1 list.clear();List

2 list.addAll(newlist);

3 adapter.notifyDataSetChanged();

 

这样,list的指向就不会改变,它仍是指向原来那块内存,这样调用notifyDataSetChanged()就能够起做用了。

 

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

相关文章
相关标签/搜索