浅析:ListView的动态刷新问题

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

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

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

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

2 list.add(1);

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

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

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()就可以起作用了。

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

时间: 2024-08-26 14:33:10

浅析:ListView的动态刷新问题的相关文章

Android UI组件----自定义ListView实现动态刷新

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3910541.html 联系方式:[email protected] [正文] 一.具体步骤: (1)在activiy_main.xml中加一个ListView控件:再添加一个item的模板activity_main_item.xml,加一个底部加载的视图activity_main_load.xml

ListView的动态刷新问题——用notifyDataSetChanged没作用

也许很多开发的朋友,尤其是Android初学者(笔者也是个初学者),在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用.有时会被困扰得很痛苦. 其实,在使用notifyDataSetChanged过程中,还是有细节需要注意的.举个例子: 我的ListView使用的数据源是来自ArrayList.通常我们的做法是创建一个已经有我们想要提供给ListView的数据的ArrayList,例如: 1 ArrayList<Integer> list = new Ar

ListView数据动态刷新

在Android开发中用到ListView时,经常遇到要更改ListView内容的情形,比如删除或增加ListView中显示的条目,这里给大家提供一下思路:不论ListView要显示的对象是什么(如:Cursor或Array或List),要实现ListView数据的更新,都要手动去更改要显示的数据对象,然后调用相应的方法(如:requery()或notifyDataSetChanged())来刷新ListView.针对不同的情形,下面给出相应解决办法的关键代码: 1.用ListView来显示数据

listview(3、动态刷新)

listview的动态刷新主要是调用adapter的notifyDataSetChanged. 在下面的例子中除了记录正常的刷新外,还记录一种错误的情况(注释掉的),作为备忘. notifyDataSetChanged除了数据无改变时不起作用,当数据的引用变化时也不起作用.因此在下面那个用数组的例子里,listview不会更新. package com.example.demo_dlv; import java.util.ArrayList; import java.util.List; imp

ListView中notifyDataSetChanged()无法刷新数据的错误实例

在使用ListView需要动态刷新数据的时候,经常会用到notifyDataSetChanged()函数. 以下为两个使用的错误实例: 1. 无法刷新: private List<RecentItem> recentItems; ...... recentItems = getData() mAdapter.notifyDataSetChanged(); 正常刷新: private List<RecentItem> recentItems; ...... recentItems.c

Android ListView内容变化后的动态刷新

ListView内容变化后的动态刷新 基本知识点: 1.更新适配器Adapter数据源 2.调用适配器Adapter的刷新方法notifyDataSetChanged() 首先需要定义ListView和对应适配器Adapter: //用于显示用户列表的ListView private ListView userList = null; //用户列表userList对应的适配器 SimpleAdapter simpleAdapter = null; //用户列表userList对应的适配器的数据源

Android ListView动态刷新某项Item

使用ViewHolder来刷新某项数据,而不用每次都全部刷新数据. 继承BaseAdapter,新建ViewHolder类. public class TestListAdapter extends BaseAdapter { private Context mContext; private List<String> strList; public TestListAdapter(Context context, List<String> list) { super(); thi

从 ListView 到 RecyclerView 的用法浅析

文章目录 要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路. ListView,一种在垂直滚动列表中显示条目的视图:RecyclerView,一种在局限的窗口呈现大数据集合的灵活视图.RecyclerView 部件是 ListView 的一种更高级且更灵活的版本. 以上描述来自官网. 移动设备屏幕空间有限,导致在屏幕上一次性显示的内容也是有限的.当需要显示大量的数据时,设想有这样的控件,可以帮助用户只通过手指上下滑动,就可以让屏幕外的数据滚动到屏幕内,同时,屏幕上原有的数据会滚动出屏幕

Android 动态刷新listview中的数据

之前一直困扰listview刷新后位置的问题,现在才明白,原来不能重新设置listview的adapter,而应该用notifyDataSetChanged()来刷新,这样位置就不会置顶. 下面做了一个测试的例子,点击最后一条记录,会增加一条新的记录, 代码如下: 1.TestAdapter package com.TestAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i