您的位置:首页 > 移动开发 > Android开发

关于listView无法刷新数据的问题

2017-02-01 21:43 302 查看
在Android中,listView 展示数据,是否出现过数据刷新了,但是listView却没有展示数据

//没有上整个demo,把关键代码上传上来

private ListView mListView;

private List<ContentItem> data;

private BaseAdapter adapter;

mListView = (ListView) findViewById(R.id.main_list_view);

adapter = new MainAdapter(data,this);

mListView.setAdapter(adapter);


刚开始,小编是这样写的,集合data是空的,在adapter中做为空判断,等我们刷新数据的时候,再初始化data,也就是先传入空数据,但是想法是这样的,就是刷新 不了数据。

小编仔细思考了这个问题,为什么数据来了,也就是data实例化了,里面有了数据,但是在adapter那边,data确实空的,这是为何。系统是不会给出错误的提示,不需要怀疑系统,应该怀疑代码,两边的data为何会不一样,因为两个data不是同一个data,在初始化adapter的时候,我们传入的是没有实例化的data,也就是在内存里面,根本就不存在data这片内存,这只是一个引用而已,换句话说,这里只是声明了一个对象,并没有实例一个对象。当我们刷新数据的时候,因为data是空的,我们需要实力对象,在内存里面开辟内存,然后添加数据,我们的想法应该就是,在adapter应该数据更新了,但是,我们想一想,在初始化的时候,根本就没有将内存地址传入过去,那边根本就没有内存地址,这个将声明的data实例化,adapter那边是不会知道的,adapter始终保持着一个空引用。可以这么理解,data实例化,adapter初始化没有指定地址,是无法指向data这个对象的。所以正确的写法是传入一个实例化好的对象,而不是一个null类型的数据,保证指向的是同一片内存。仅仅只需要添加一段关键代码


private ListView mListView;

private List<ContentItem> data;

private BaseAdapter adapter;

mListView = (ListView) findViewById(R.id.main_list_view);
//这句代码确保指向了同一片内存
data = new ArrayList();

adapter = new MainAdapter(data,this);

mListView.setAdapter(adapter);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐