android notifydatasetchanged 刷新错误,Android 调用notifyDataSetChanged方法失败解决办法
Android 调用notifyDataSetChanged方法失败解决办法
如果使用ListView、GridView等进行数据展示,当绑定的数据有了更新的时候,需要实时刷新ListView,即调用Adapter的notifyDataSetChanged方法,但是很多人在调用之后会发现ListView是数据并没有刷新,这是什么原因呢?下面将对其进行详细解释。
1、数据源没有更新,调用notifyDataSetChanged无效。
2、数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。
3、数据源更新了,但是adpter没有收到消息通知,无法动态更新列表。
一个典型的错误是:
list = new String[]{"listView item"};
adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
list = new String[]{"new listView item"};
adapter.notifyDataSetChanged();
原先一直以为adapter会监听list的变化,当重新初始化list之后,ListView会自动进行数据的刷新,其实不然,adapter监听的是new String[]{"listView item"}的变化。adapter本身会保存一个对原始数据源(new String[]{"listView item"})的内部引用inner_list。
当执行了list = new String[]{"new listView1 item"};语句之后,重新初始化了list,也就是相当与切断了list与原始数据源(new String[]{"listView item"})的关系,因此之后调用notifyDataSetChanged并不会起作用,因为list 和inner_list已经是存在于堆上的完全不同的两个对象了。
错误回顾:
前段时间都是使用的Arrayist等等作为原始数据源,一般都是进行add之类的操作,所以list和inner_list和一直都是保持对同一个变量的引用,并没有出什么问题,当然,改为直接赋值就会出现调用无效的问题。所以要针对原始数据对象进行操作,而不是重新赋值。
看了一下Arrayadapter的源码:
ArrayAdapter:
public ArrayAdapter(Context context, int textViewResourceId, T[] objects) {
init(context, textViewResourceId, 0, Arrays.asList(objects));
}
Arrays:
public static List asList(T... array) {
return new ArrayList(array);//注意这里的ArrayList不是常见的那个ArrayList,而是Arrays的一个内部类。。
}
以上就是Android 调用notifyDataSetChanged方法失败的常见原因及解决办法的总结,如有疑问希望大家留言讨论,或者到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
android notifydatasetchanged 刷新错误,Android 调用notifyDataSetChanged方法失败解决办法相关推荐
- android notifydatasetchanged 刷新错误,android – notifyDataSetChanged()不刷新可扩展列表视图...
我正在使用Expandable ListView,其中的数据通过Sqlite数据库填充.我已经选择从ExpandableListView中删除一个组,它实际上删除了数据库中的相应行.但是活动不会刷新, ...
- android notifydatasetchanged 刷新错误,Android中适配器的notifyDataSetChanged()为何有时不刷新...
学过Android开发的人都知道,ListView控件在开发中经常遇到,并且ListView通常结合Adapter适配器来进行数据显示和数据更新操作.姑且假设数据存储在名为dataList的成员变量中 ...
- Android gradle编译错误OOM:java heap space的解决办法
Android开发中,在编译较大规模项目时,出现内存溢出错误: OutOfMemeryError OOM:java heap space; 尝试解决办法: 1. 开发项目根项目下增加/demo/gra ...
- 【Android】Lenovo K860 framework-res.apk回编译失败解决办法
现象: 79: error: Found tag </item> where </plurals> is expected 79: error: Multiple substi ...
- c++调用动态库失败解决办法
之前写好的程序今天早上过来发现在服务器上出错了,于是就各种查问题,整整一个早上外加下午两个小时都在查这个问题,最终被我找到了问题: 在程序中我发现LoadLibrary()返回的句柄是空的,于是用Ge ...
- android 无刷新 好友,Android viewPage notifyDataSetChanged无刷新
转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分享.其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅.整理出来,分享给大家. 建议使用自 ...
- android 生成泛型对象,java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法...
####问题描述 * java 解析多层含有泛型对象的json数据获取不到泛型类型 * 如果将泛型改成实际的类型就能正常解析 * 如果不改成实际的类型泛型数据被解析成com.google.gson.i ...
- 【Android】APP嵌入百度地图骑行导航一直初始化引擎失败解决办法
[Android] APP嵌入百度地图骑行导航一直初始化引擎失败解决办法 最近手头上有个需求需要做骑行导航 首先百度地图开放平台http://lbsyun.baidu.com/ 按提示找到Androi ...
- Android 缺少SO库(只有armabi)的解决办法
Android 缺少SO库(只有armabi)的解决办法 前段时间做一个项目,需要引用一些第三方的插件,结果插件只有armabi的so库,而项目中其他依赖除过armabi的库外基本都有("a ...
最新文章
- python比较两个xml_python比较2个xml内容的方法
- ACM题集以及各种总结大全(转)
- js 选择 checkbox
- springboot学习笔记(七)
- Shell脚本对比两个文本文件找出不同行的2个方法分享
- [SDOI2013]森林(树上主席树+启发式合并+lca)
- 如何选择python书籍_如何选择一本优质的数据科学书籍
- java方法和 IDEA Debug调试
- android webview卡顿检测_Android webview隐藏后跳转新页面input输入卡顿与白屏渲染慢的问题说明及修复方案...
- 系统总结vue组件间通信、数据传递(父子组件,同级组件)
- Python使用数学形态学腐蚀运算删除验证码图片中的干扰噪点和线条
- 交换机、路由器、PIX密码恢复
- CentOS6.7安装Python3.4
- 2018年高教社杯全国大学生数学建模竞赛A题解题思路
- 送书 | 《深入浅出Python机器学习》
- 杨中科:我的大学生活 转载
- python3自动化软件发布系统pdf_Python 3自动化软件发布系统 -Django 2实战
- C++_primer_plus学习笔记 第14章 C++中的代码重用
- win10怎么更新显卡驱动_Intel发布核显新驱动:支持Win10 H2更新、11代酷睿狂喜-Intel,核显,驱动,Win10 ——快科技(驱动之家旗下媒体)-...
- 小白入门C语言之浮点数详解