`
zhouxiaoli521
  • 浏览: 562225 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android adapter has changed解决方法

阅读更多

      很多新手在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()的含义。

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

所以添加内容后要更新。

分享到:
评论

相关推荐

    android adapter详解

    Android Adapter 详解 Android Adapter 是 Android 开发中一个重要的组件,负责将数据绑定到用户界面中。今天,我们将深入探讨 Android Adapter 的原理和实现方式。 什么是 Android Adapter? Android Adapter 是...

    Android ListView出现异常解决办法

    Android ListView 异常解决办法: ...10-26 18:30:45.085: E/AndroidRuntime(7323): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. M

    Android自定义adapter的listview

    Android提供了一些预定义的Adapter,如ArrayAdapter和CursorAdapter,但它们可能无法满足所有需求,因此我们常常需要自定义Adapter。 自定义Adapter的步骤如下: 1. 创建一个新的类,继承自BaseAdapter或已有的...

    android之各种Adapter加载数据

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据源与UI展示之间的桥梁作用。本文将深入探讨Android的Adapter机制,以及如何使用各种Adapter来加载数据。 首先,我们需要理解Adapter的基本概念。...

    Android Adapter的使用

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据源与UI展示之间的桥梁作用。本文将深入探讨Android适配器的使用,特别是针对初学者,旨在帮助他们更好地理解和掌握这一核心概念。 首先,我们来理解...

    android Adapter教程

    - **BaseAdapter**:这是一个抽象类,提供了一套基础的 Adapter 方法,如 getCount()、getItem() 和 getItemId()。由于其高度的灵活性,开发者可以基于 BaseAdapter 实现自定义的 Adapter 类,但这也意味着需要手动...

    Android之Adapter用法总结

    ### Android之Adapter用法总结 #### 一、概念与作用 **Adapter** 是 Android 开发中连接后端数据和前端视图的一个关键组件。它作为数据和用户界面(UI)之间的桥梁,在Android开发中扮演着极其重要的角色。尤其是...

    android listview 自反射 adapter

    通常,开发者会创建一个继承自BaseAdapter的自定义Adapter,重写其中的方法,如`getCount()`、`getItem()`、`getItemId()`以及`getView()`等,来实现数据的绑定和视图的创建。 然而,使用反射技术,我们可以简化这...

    Android自定义Adapter适配器

    在Android开发中,Adapter是一个至关重要的组件,它作为数据源与UI控件之间的桥梁,使得数据能够被适配并显示在界面中。本项目聚焦于自定义Adapter的实现,特别是如何将其应用于ListView的数据显示。 首先,理解...

    Android ListView adapter不同布局

    总结来说,实现“Android ListView adapter不同布局”涉及自定义Adapter,重写关键方法,特别是`getView()`,并处理好数据源和布局的对应关系。在处理嵌套ListView时,需要考虑到性能优化,避免过度复杂的设计,以...

    android gridview adapter 实例

    在这个"android gridview adapter 实例"中,我们将深入探讨如何使用Adapter来填充GridView,并实现每个GridView的item(单元格)显示不同的数据。 首先,理解Adapter在Android中的作用至关重要。Adapter是连接数据...

    ListView后台更新报错:java.lang.IllegalStateException

    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...

    android 一个对adapter的封装使用

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据与视图之间的桥梁作用。Adapter类通常用于将数据源(如数组或列表)映射到UI组件,如ListView、GridView等。在这个“android 一个对adapter的封装使用”...

    android 打造万能的Adapter

    8. **动态加载和回收**:当数据发生变化时,使用`notifyDataSetChanged()`或`notifyItemInserted/Removed/Changed()`通知Adapter更新。同时,Adapter应适当地回收不再使用的ViewHolder,以节省内存。 9. **扩展性...

    android adapter 开发总结

    自定义Adapter通常需要重写`getView()`方法,以便在其中填充每个列表项的视图内容。 总结起来,Adapter在Android开发中扮演着不可或缺的角色,它们是连接数据和UI的桥梁,使得开发者可以轻松地将各种类型的数据转换...

    android中adapter的使用

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据与视图之间的桥梁作用。Adapter类允许我们将数据集合(如数组或列表)绑定到UI组件,如ListView、GridView或Spinner等。在Android中,我们通常会遇到三...

    Android listview与adapter用法

    在Android开发中,ListView是展示大量数据的一种常见方式,而Adapter则是实现ListView数据绑定的关键组件。本篇文章将详细探讨Android中的Adapter用法及其在ListView中的应用。 1. **Adapter的概念** - `Adapter`...

    Android Adapter里面嵌套ListView实例详解

    为了解决这个问题,可以使用 Utility 类中的 setListViewHeightBasedOnChildren 方法,该方法可以根据ListView的子项目重新计算ListView的高度,然后把高度设置为LayoutParams。 使用该方法需要注意以下几点: 1. ...

    android recyclerview adapter 照片选择器

    android recyclerview adapter 照片选择器 给recyclerview 添加adapter适置器进行照片选择,可以对recyclerview进行行数和张数的设置,也可以对已选择的照片进行增减。

    android adapter

    同时,针对Android Adapter的学习,建议做好个人资料整理,方便快速查阅相关资料和解决方案。 最后,随着Android开发环境的更新,对于Adapter的使用也在不断变化,因此在开发过程中应当注意不断更新和积累相关知识...

Global site tag (gtag.js) - Google Analytics