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方法失败解决办法相关推荐

  1. android notifydatasetchanged 刷新错误,android – notifyDataSetChanged()不刷新可扩展列表视图...

    我正在使用Expandable ListView,其中的数据通过Sqlite数据库填充.我已经选择从ExpandableListView中删除一个组,它实际上删除了数据库中的相应行.但是活动不会刷新, ...

  2. android notifydatasetchanged 刷新错误,Android中适配器的notifyDataSetChanged()为何有时不刷新...

    学过Android开发的人都知道,ListView控件在开发中经常遇到,并且ListView通常结合Adapter适配器来进行数据显示和数据更新操作.姑且假设数据存储在名为dataList的成员变量中 ...

  3. Android gradle编译错误OOM:java heap space的解决办法

    Android开发中,在编译较大规模项目时,出现内存溢出错误: OutOfMemeryError OOM:java heap space; 尝试解决办法: 1. 开发项目根项目下增加/demo/gra ...

  4. 【Android】Lenovo K860 framework-res.apk回编译失败解决办法

    现象: 79: error: Found tag </item> where </plurals> is expected 79: error: Multiple substi ...

  5. c++调用动态库失败解决办法

    之前写好的程序今天早上过来发现在服务器上出错了,于是就各种查问题,整整一个早上外加下午两个小时都在查这个问题,最终被我找到了问题: 在程序中我发现LoadLibrary()返回的句柄是空的,于是用Ge ...

  6. android 无刷新 好友,Android viewPage notifyDataSetChanged无刷新

    转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分享.其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅.整理出来,分享给大家. 建议使用自 ...

  7. android 生成泛型对象,java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法...

    ####问题描述 * java 解析多层含有泛型对象的json数据获取不到泛型类型 * 如果将泛型改成实际的类型就能正常解析 * 如果不改成实际的类型泛型数据被解析成com.google.gson.i ...

  8. 【Android】APP嵌入百度地图骑行导航一直初始化引擎失败解决办法

    [Android] APP嵌入百度地图骑行导航一直初始化引擎失败解决办法 最近手头上有个需求需要做骑行导航 首先百度地图开放平台http://lbsyun.baidu.com/ 按提示找到Androi ...

  9. Android 缺少SO库(只有armabi)的解决办法

    Android 缺少SO库(只有armabi)的解决办法 前段时间做一个项目,需要引用一些第三方的插件,结果插件只有armabi的so库,而项目中其他依赖除过armabi的库外基本都有("a ...

最新文章

  1. python比较两个xml_python比较2个xml内容的方法
  2. ACM题集以及各种总结大全(转)
  3. js 选择 checkbox
  4. springboot学习笔记(七)
  5. Shell脚本对比两个文本文件找出不同行的2个方法分享
  6. [SDOI2013]森林(树上主席树+启发式合并+lca)
  7. 如何选择python书籍_如何选择一本优质的数据科学书籍
  8. java方法和 IDEA Debug调试
  9. android webview卡顿检测_Android webview隐藏后跳转新页面input输入卡顿与白屏渲染慢的问题说明及修复方案...
  10. 系统总结vue组件间通信、数据传递(父子组件,同级组件)
  11. Python使用数学形态学腐蚀运算删除验证码图片中的干扰噪点和线条
  12. 交换机、路由器、PIX密码恢复
  13. CentOS6.7安装Python3.4
  14. 2018年高教社杯全国大学生数学建模竞赛A题解题思路
  15. 送书 | 《深入浅出Python机器学习》
  16. 杨中科:我的大学生活 转载
  17. python3自动化软件发布系统pdf_Python 3自动化软件发布系统 -Django 2实战
  18. C++_primer_plus学习笔记 第14章 C++中的代码重用
  19. win10怎么更新显卡驱动_Intel发布核显新驱动:支持Win10 H2更新、11代酷睿狂喜-Intel,核显,驱动,Win10 ——快科技(驱动之家旗下媒体)-...
  20. 小白入门C语言之浮点数详解

热门文章

  1. 方向盘可以打一圈半和两圈的有什么不一样吗
  2. 《水浒传》读后(2) 鲁智深
  3. 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本
  4. css字体样式属性大全(内附实例)
  5. LeetCode:House Robber
  6. ubuntu下texmaker安装及配置
  7. 记一次AKS报错-Harbor
  8. 浅谈2022梧桐杯乡村、城市赛道双TOP1——从数据分析的角度
  9. 2021亚马逊黑五网一已开放提报,你做好备战准备了吗?
  10. soc(九) 中断控制器