在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....
本文将深入探讨如何在Eclipse开发环境中利用ListView结合Adapter来展示数据。 首先,`ListView`是一个可滚动的视图,用于显示一组项目,每个项目都是一个单独的视图。它通过复用视图(ViewHolder模式)提高性能,...
为了实现更加灵活和丰富的界面展示,我们通常需要对ListView进行自定义,这涉及到自定义Adapter的使用。自定义Adapter允许我们根据需求定制ListView的每一项视图,以适应不同的数据结构和界面设计。 首先,我们需要...
- 绑定Adapter到ListView:使用ListView的`setAdapter()`方法将Adapter与ListView关联。 5. **自定义Adapter** - 当系统提供的Adapter无法满足需求时,可以继承BaseAdapter并覆盖其方法,如`getView()`,来实现...
3. 设置ListView: 在Activity的布局文件中添加ListView,并在代码中找到它。然后设置Adapter: ```java ListView listView = findViewById(R.id.listView); MyAdapter adapter = new MyAdapter(this, dataList); ...
然而,有时我们可能需要在一个ListView中显示来自不同数据源或者具有不同视图样式的条目,这就涉及到使用多个不同的Adapter。本文将深入探讨如何在ListView中实现这一功能,并提供一个名为"SectionedDemo"的示例代码...
it's a normal Android listview adapter.The adapter extends BaseAdapter...
通用Adapter是ListView高效运作的关键,它允许我们以一种灵活的方式绑定不同类型的数据显示在ListView的各个项中。本教程将详细介绍`listview`中的`通用adapter`,以及如何通过方法封装实现调用的便捷与简单。 首先...
在本示例中,我们关注的是如何在ListView中集成Button控件,并通过自定义Adapter来实现这一功能。这涉及到Android UI设计、数据绑定和事件处理等多个方面。 首先,我们了解ListView的基本原理。ListView通过Adapter...
然后,通过`listView.setAdapter(listViewAdapter)`将Adapter绑定到ListView上。 在`getView()`方法中,使用LayoutInflater来解析XML布局文件(如`list_item.xml`),将其转换为一个View对象,然后将这个View填充到...
在Android开发中,ListView是一种非常常见且重要的组件,它用于展示大量的数据列表,通常与Adapter配合使用以实现灵活的数据绑定和界面更新。本教程将详细讲解如何使用Adapter来实现ListView的多种功能,这对于初学...
本篇将详细讲解如何使用三种不同的Adapter来构建ListView,包括ArrayAdapter、SimpleAdapter和CursorAdapter。 首先,ArrayAdapter是最基础的Adapter,适用于简单的数据结构,如数组或ArrayList。使用ArrayAdapter...
总结来说,ListView通过adapter传递对象主要是通过自定义Adapter实现的,Adapter负责将数据对象转化为ListView的视图元素。在这个过程中,我们需要注意数据模型的设计,ListView项的布局设计,以及Adapter的正确实现...
最后,将`CombinedAdapter`设置为ListView的Adapter,这样ListView就能根据数据类型自动选择正确的Adapter来显示内容。 在提供的`SectionedDemo`示例中,可能包含了一个示例代码,展示了如何实现这样的功能。这个...
安卓listview自定义adapter包括demo和一些其他自定义绑定的代码
- 设置Adapter到ListView:通过ListView的`setAdapter()`方法将Adapter关联到ListView。 - 数据更新:当数据源变化时,通知Adapter更新,例如添加、删除、修改数据项。 5. **注意点**: - `getView()`方法应尽...
当数据结构复杂,需要在一个ListView中显示其他ListView时,我们就会涉及到“嵌套ListView”或者“嵌套adapter”的概念。这通常发生在制作如说明书或使用手册类的应用程序中,因为这些应用往往需要展示层次分明、...
Adapter是连接ListView与数据源的关键,它负责将数据转化为ListView可以显示的视图。本篇文章将详细探讨将Adapter放入ListView的三种常见方法,以帮助开发者更好地理解和应用。 ### 1. 直接继承BaseAdapter **描述...