首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从BaseAdapter调用notifyDataSetChanged时,ListView不会更新

当从BaseAdapter调用notifyDataSetChanged时,ListView不会更新的问题可能是由以下几个原因引起的:

  1. 数据源未正确更新:在调用notifyDataSetChanged之前,确保你的数据源已经更新。如果数据源没有正确更新,ListView将无法获取到新的数据,因此不会更新。
  2. Adapter未正确绑定:确保你的Adapter已经正确绑定到ListView上。你可以通过调用ListView的setAdapter方法来绑定Adapter。
  3. 主线程更新问题:在Android中,UI更新必须在主线程中进行。确保你在主线程中调用了notifyDataSetChanged方法。你可以使用Handler或者runOnUiThread方法来确保在主线程中更新UI。
  4. 缓存问题:ListView在绘制时会使用缓存来提高性能。如果你的数据源发生了变化,但是ListView中的缓存没有被清除,那么ListView将不会更新。你可以尝试调用ListView的invalidateViews方法来清除缓存并强制更新。
  5. ListView高度问题:有时候,当ListView的高度设置为wrap_content时,调用notifyDataSetChanged可能不会触发更新。你可以尝试将ListView的高度设置为固定值或者match_parent来解决这个问题。

总结起来,当从BaseAdapter调用notifyDataSetChanged时,ListView不会更新可能是由于数据源未正确更新、Adapter未正确绑定、主线程更新问题、缓存问题或者ListView高度问题引起的。你可以根据具体情况逐一排查这些原因,并进行相应的处理来解决问题。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

BaseAdapternotifyDataSetChanged方法

都用过 BaseAdapternotifyDataSetChanged()方法,用法很简单,当BaseAdapter的数据更新了,需要更改显示,这时候就要调用notifyDataSetChanged(...Adapter的源码中不难看出,关于数据更新的代码只有两个函数: public interface Adapter { /** * Register an observer that is called...调用NotifyDataSetChanged就是调用了这个类的onChanged()函数,细看以下AdapterDataSetObserver 的onChanged函数,发现,其实这个函数并没有什么奇特的写法...中有四个数据更新相关的函数: 其实我们很容易发现,这两个函数仅仅是调用BaseAdapter函数的内部成员变量的的notifyInvalidated()函数和notifyChanged()函数,而这个成员变量则是通...requestLayout();熟悉这个函数的都知道,这个函数的调用会让子控件,也就是当前的ListView重新向父控件请求layout。

1.1K30
  • 观察者模式及在Android源码中的应用

    Android源码中的应用 在以前,我们最常用到的控件就是ListView了,而ListView最重要的一个点就是Adapter,在我们往ListView添加数据后,我们都会调用一个方法: notifyDataSetChanged...跟进这个方法notifyDataSetChanged方法,这个方法定义在BaseAdapter中,代码如下: public abstract class BaseAdapter implements ListAdapter...当ListView的数据发生变化时,调用Adapter的notifyDataSetChanged函数,这个函数又会调用DataSetObservable的notifyChanged函数,这个函数会调用所有观察者...而Adapter中包含一个数据集可观察者DataSetObservable,在数据数量发生变更开发者手动调用Adapter.notifyDataSetChanged,而notifyDataSetChanged...在AdapterDataSetObserver的onChanged函数中会获取Adapter中数据集的新数量,然后调用ListView的requestLayout()方法重新进行布局,更新用户界面。

    51610

    ListView数据动态更新

    接下来通过一个简单的示例程序来学习ListView的数据更新。...="wrap_content" /> 由于当ListView没有数据,整个页面一片白,非常难看,所以加了一个文本框,当列表没有数据提示用户。...提供Adapter,使用自定义的BaseAdapter决定ListView所要显示的列表项,然后为4个按钮设置监听监听器。...再点击删除按钮,可以看到将会列表中删除随机列表项,如上图右侧所示。 点击清空按钮,可以将列表所有数据全部清空,显示启动的页面。...以上几个操作,可以看到动态更新离不开每次调用notifyDataSetChanged()方法,这个方法的主要作用就是当适配器里面的内容发生改变需要强制调用getView()方法来刷新每个Item的内容

    2.2K60

    自定义BaseAdapter完美解决ListView异常:java.lang.IllegalStateException这是代码使用方法原理另外

    在我们Android 开发中,ListView是在常用不过的控件了。但是有时候会爆出这种异常,就搞得好尴尬了。...异常图片 明明我们在代码中的确是有调用adaptor.notifyDataSetChanged()这个方法的,明显没问题啊。...我们在adaptor内部就封装了一个List用于保存用户传过来的List数据,我们这里只是对外部的list有一个引用,但是真正使用到的list,却是内部的List,通过每一次调用notifyDataSetChanged...再调用父类的更新、这样,我们玩来玩去就是外部的list,并不会对内部listview使用到的list有任何影响。就完美屏蔽了这个异常了。...另外 分享一句我最喜欢的歌词: 如果那两个字没有颤抖 我不会发现我难受 怎么说出口也不会是分手 如果对于明天没有要求 牵牵手就像旅游(女友) 成千上万个门口 总有一个人要先走 怀抱既然不能逗留

    56280

    浅谈Android设计模式学习之观察者模式

    抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知更新自己。...了,而ListView最重要的一个点就是Adapter,在我们往ListView添加数据后,我们都会调用一个方法: notifyDataSetChanged(), 这个方法就是用到了我们所说的观察者模式...跟进这个方法notifyDataSetChanged方法,这个方法定义在BaseAdapter中,代码如下: public abstract class BaseAdapter implements ListAdapter...而Adapter中包含一个数据集可观察者DataSetObservable,在数据数量发生变更开发者手动调用AdapternotifyDataSetChanged,而notifyDataSetChanged...从而使得各自的变化都不会影响另一边的变化。 缺点 依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者。 适用场景 当一个对象的改变需要给变其它对象,而且它不知道具体有多少个对象有待改变

    49810

    手机卫士黑名单功能(ListView结合SQLite增删改)

    ,数据库增加一条记录,参数:String电话号码,String拦截模式 此时ListView不会显出出来刚添加的记录,需要退出这个Activity重写进入,我们通知适配器数据更新 调用集合List对象的...add()方法,添加一条数据,参数:0(第一个),数据 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 删除记录 条目布局文件中,在右侧放置一个垃圾桶的小图标...,它所在的包是DialogInterface.OnClickListener 调用之前定义好的Dao类BlackNumberAdo对象的delete()方法,参数:String电话号码 调用集合List...对象的remove()方法,删除一条数据,参数:int索引 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 CallSmsSafeActivity.java...public TextView modeView; public ImageView iv_delete; } private class MyAdapter extends BaseAdapter

    88630

    Android设计模式学习之观察者模式

    抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知更新自己。...了,而ListView最重要的一个点就是Adapter,在我们往ListView添加数据后,我们都会调用一个方法: notifyDataSetChanged(), 这个方法就是用到了我们所说的观察者模式...跟进这个方法notifyDataSetChanged方法,这个方法定义在BaseAdapter中,代码如下: public abstract class BaseAdapter implements ListAdapter...而Adapter中包含一个数据集可观察者DataSetObservable,在数据数量发生变更开发者手动调用AdapternotifyDataSetChanged,而notifyDataSetChanged...从而使得各自的变化都不会影响另一边的变化。 缺点 依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者。 适用场景 当一个对象的改变需要给变其它对象,而且它不知道具体有多少个对象有待改变

    31710

    Android编程设计模式之观察者模式实例详解

    Observer:抽象观察者,该角色是观察者的抽象类,它定义了一个更新接口,使得在得到主题的更改通知更新自己。...抽象观察者类: /** * 抽象观察者类,为所有具体观察者定义一个接口,在得到通知更新自己 */ public interface Observer { /** * 有更新 *...六、Android源码中的观察者模式 1、BaseAdapter BaseAdapter我相信大家都不陌生,在ListView的适配器中我们都是继承它。下面来简单分析分析。...Adapter的notifyDataSetChanged的时候会调用所有观察者的onChanged方法,核心实现就在这里 @Override public void onChanged() {...的数据发生变化时,调用Adapter的notifyDataSetChanged函数,这个函数又会调用DataSetObservable的notifyChanged函数,这个函数会调用所有观察者 (AdapterDataSetObserver

    45110

    ViewPager无限滑动

    执行完container.removeView((View) object)后,可以使用一个List来维护回收的View,这样可以避免创建大量的View对象——就像ListViewBaseAdapter...ViewPager和PagerAdapter关联同步 ViewPager和PagerAdapter的关系就如同ListViewBaseAdapter的关系,是视图和视图数据适配器的关系——满满都是模式...PagerAdapter的notifyDataSetChanged并不像它应该承诺的那样,而为了实现在Adapter数据发生变化后通知更新ViewPager的目的:需要再次执行viewPager.setAdapter...关于viewPager设计的吐槽 ViewPager显然是按照了ListView那样的方式来计算总页数的,但是对于一个每次只显示3页的View来说,每次左滑和右滑的时候调用一个让子类重写的判断是否还有左边...这里强调的是:既然ViewPager每次只展示最多3个page,而且左右滑动的逻辑可以在每次滑动进行检查,那么对于任意大的数据集合,它都应该不会卡顿。

    2.2K70

    ListView详解

    ListView 针对每个item,要求 adapter“返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView...的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项。...但是当xml文件被解析的时候,只要被创建出来了,其孩子的id就不会改变了。根据这个特点,可以将孩子id存入到指定的集合中,每次就可以直接取出集合中对应的元素就可以了。...分发到listview,但是页面往上拉依然会有问题。...为了解决这个问题(如何将事件消费listview转到scrollview,就是子传父)我考虑过return true将事件消费掉,但是dispatchTouchEvent两者都会调用,不能这么做。

    1.2K60

    Android开发笔记(三十八)列表类视图

    2、定义了一个数据观察者AdapterDataSetObserver,用于在列表数据发生变化时,可以通过notifyDataSetChanged方法来更新视图。...像ListView和GridView一般都是直接使用BaseAdapter,并不使用布局过于简单的SimpleAdapter。...但实际开发中发现这个设置不起作用,即使该属性设置为true,开头也不会显示分隔线。查看ListView的源码,发现分隔线是画在子视图的下方,所以列表上方的分隔线就画不出来了。...; 2、不管是否指定headerDividersEnabled,列表上方的分隔线都不会显示; ListView的使用方式 Android提供了两种使用ListView的方式: 1、ListActivity...该方式要从布局文件中获取ListView的对象,然后调用该对象的setAdapter方法设置适配器,并调用ListView对象的setOnItemClickListener方法来设置点击事件的监听器。

    2.3K20
    领券