Adapter报错:The content of the adapter has changed

转载 2013年12月05日 10:21:07


在Android编程中使用Adapter时,偶尔会出现如下错误:
The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread。
DDMS中的log也无法定位到准确的出错位置。检查错误可以从下面几点入手:
1、检查Thread,确定没有在Background thread中直接调用adapter,如果有,请移除相关代码到Handler中处理;
2、尽量将数据放在adapter类中管理,不需要的时候清除信息(勤写clear()),及时用notifyDataSetChanged()刷新;
3、在Activity或者Fragment合适的位置(onPause/onStop)要及时检查thread,有adapter数据处理相关的应马上停止;
4、这个错误经常出现在Activity休眠起来之后,主要还是使用adapter不太小心造成的。如果实在找不到原因,在onPause()函数中停止所有的background thread,并且在onResume()函数最前面清空adapter中的数据,并且adapter.notifyDataSetChanged()。然后重新更新加载数据,这样一般可以解决问题。
-----------------------------------------
很多新手在Android开发时可能对Thread和Message以及Handler、Looper概念不是很清楚,可能产生类似 The content of the adapter has changed but ListView did not receive a notification make sure the content of your adapter is not modified from a background thread . but only from the UI thread.的错误。在这里给出以下几点可以帮助你了解该问题:

  1.改变适配器Adapter内容时不要在后台线程中,必须在UI线程中处理,这点可以通过Handler传出来解决。

  2.尝试Adapter的notifyDataSetChanged()方法,当然主要看你代码的具体情况。

  以上只貌似只是把错误信息翻译过来而已,真正的原因请看源代码:

  mItemCount = mAdapter == null ? 0 : mAdapter.getCount();

  ..... //中间是其他代码就不拷贝了

  else if (mItemCount != mAdapter.getCount()) {//这里可以看出为什么会抛出adapter has changed,是因为你可能还有线程在跑,更新了mAdapter.getCount();的返回值

  throw new IllegalStateException("The content of the adapter has changed but "

  + "ListView did not receive a notification. Make sure the content of "

  + "your adapter is not modified from a background thread, but only "

  + "from the UI thread. [in ListView(" + getId() + ", " + getClass()

  + ") with Adapter(" + mAdapter.getClass() + ")]");

  ============

  ps:知其然,知其所以然。刚开始我发现写不写notifyDataSetChanged()都能实现效果,于是我就把它注释了,直到出了问题,我看了以上内容,我就明白为什么会有adapter has changed的提示,也明白了notifyDataSetChanged()的含义。

  我的理解是:增加了内容长度改变了 但是没有通知更新 当选中增加的那个内容时 就造成了 数组越界(或者别的问题)

  所以添加内容后要更新。


 

Adapter报错:The content of the adapter has changed的解决

在listView的编程中使用Adapter时,第一次加载没有问题,但是第二次加载的时候报了一些的错误: The content of the adapter has changed but Lis...
  • hwwzyh
  • hwwzyh
  • 2012年07月11日 11:22
  • 5712

android报The content of the adapter has changed but ListView did not receive a notification的解决方案

在android开发中,ListView用的非常多,不管是新手还是多年的开发多年的老鸟,可能都会遇到这个异常:java.lang.IllegalStateException: The content ...
  • lovexieyuan520
  • lovexieyuan520
  • 2016年03月14日 00:15
  • 1029

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive

不擅长写博客,大家就可下面的连接吧 1、http://blog.csdn.net/changemyself/article/details/8116670 2、这种方法的实质和第一种是一样的htt...
  • swust_chenpeng
  • swust_chenpeng
  • 2013年09月25日 10:24
  • 7387

Android开发教程--关于Adapter的The content of the adapter has changed问题分析

我们在做android list开发的时候,有时候会遇到类似这样的问题: java.lang.IllegalStateException: The content of the adapter ha...
  • wanglixin1999
  • wanglixin1999
  • 2015年04月01日 10:31
  • 2599

java.lang.IllegalStateException: The content of the adapter has changed but ListView...的问题

本文转自:http://gundumw100.iteye.com/blog/1738829 在Android编程中使用Adapter时,偶尔会出现如下错误:  The content of the...
  • u012885094
  • u012885094
  • 2015年04月15日 14:08
  • 303

The content of the adapter has changed but ListView did not receive a notification错误分析

在Android开发过程中,使用了大量的ListView,发现这个错误偶尔会出现。特别是做压力测试的时候,不停的点击刷新,更容易出现这个错误。代码中已经使用了Adapter的notifyDataSet...
  • jiong056
  • jiong056
  • 2012年12月03日 23:36
  • 4794

android学习笔记:AndroidRuntime: java.lang.IllegalStateException: The content of the adapter has change

最近项目遇到一个bug,在没有通知adapter的情况下改掉了adapter的内容,但是问题的发生是在一个message传过来之后发生的,所以log里面完全没有自己代码的只言片语,在线程记录里面也没有...
  • wcnmcsnm
  • wcnmcsnm
  • 2014年03月05日 17:52
  • 894

(转)关于Adapter的The content of the adapter has changed问题分析

原地址:https://www.cnblogs.com/monodin/p/3874147.html 关于Adapter的The content of the adapter has...
  • duyiqun
  • duyiqun
  • 2018年01月30日 14:13
  • 23

异常 The content of the adapter has changed but ListView did not receive a notification可能的一种解决方法

最近后台异常信息中总是出现这个异常: STACK_TRACE=java.lang.IllegalStateException: The content of the adapter has chang...
  • victor_E_N_01185
  • victor_E_N_01185
  • 2017年06月13日 15:48
  • 407

关于Adapter的The content of the adapter has changed but ListView did not receive a notification.问题分析

1、问题描述 1 07-28 17:22:02.162: E/AndroidRuntime(16779): java.lang.IllegalStateException: The content...
  • cxc19890214
  • cxc19890214
  • 2015年09月25日 09:52
  • 391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Adapter报错:The content of the adapter has changed
举报原因:
原因补充:

(最多只允许输入30个字)