在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()。然后重新更新加载数据,这样一般可以解决问题。
我的原因:
我改变了数据集,比如我把数据全清空了userBooks.clear(),这个时候我没有及时调用adapter.notifyDataSetChanged(),会导致ListView没有数据而抛java.lang.IllegalStateException这个异常。
记住,当改变了数据集之后,需要及时adapter.notifyDataSetChanged()
也就是说,这2句话需要写在一起:
userBooks.clear();
if(adapter!=null){
adapter.notifyDataSetChanged();
}
分享到:
相关推荐
java.lang.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...
ListView:The content of the adapter has changed but ListView did not receive a notification使用ListView时遇到如下的异常信息: 10-26 18:30:45.085: E/AndroidRuntime(7323): java.lang....
Android listview例子, 采用自定义Adapter:包含了Button控件
it's a normal Android listview adapter.The adapter extends BaseAdapter...
Android自定义adapter的listview代码
Android listview与adapter操作和用法
基于Eclipse开发平台,Android中使用ListView和三种适配器(ArrayAdaper,SimpleAdapter,BaseAdapter)实现数据的填充。
安卓listview自定义adapter包括demo和一些其他自定义绑定的代码
Android之自定义Adapter的ListView
• Improvement: The type of the property BackgroundImage in TJamShellList and TJamFileList has been changed from TBitmap to TPicture. That way other file types beside BMP are supported, e.g. JPG and ...
使用三种Adapter构建ListView
In the MouseMove event you need to check the index of the item under the mouse pointer, and if this item is changed, you simply redefine the text of the tooltip attached to the ListView control....
listview中通用adapter,方法封装,调用方便简单
Adapter的一种写法 package com.xxkjx.jiusanqi; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; ...
Adapter放到ListView的三种方式
ListView 通过adapter传递对象
这是我一下午的总结,listview常用的方法,和三种基本适配器以及实际开发中通过泛型的适配器以及万能适配器,如果大家感兴趣,这里有文章的地址:http://write.blog.csdn.net/postlist
博客ListView中含有Button时setOnclickListener应写在Adapter的什么地方的代码http://blog.csdn.net/yangzl2008/article/details/7863938
分别用simple Adapter和array Adapter实现listview的布局,用simple Adapter实现gridview的布局。