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

未在notifyDataSetChanged上调用GetView,ListView被卡住

是因为数据源的改变没有及时通知ListView刷新界面。在使用ListView时,当数据源发生改变时,需要调用适配器的notifyDataSetChanged方法来通知ListView重新获取视图并刷新界面。

ListView是Android提供的一种常用的列表控件,用于展示大量的数据列表。在使用ListView时,需要通过适配器Adapter来为ListView提供数据,并根据数据的变化来更新ListView的显示。

通常情况下,当数据源发生改变时,我们会调用适配器的notifyDataSetChanged方法来通知ListView进行刷新。这样ListView会重新调用适配器的getView方法来获取每个列表项的视图,并更新界面显示。但是如果在数据源发生改变后没有调用notifyDataSetChanged方法,ListView就不会更新界面,导致列表被卡住。

解决方法是在数据源发生改变后,立即调用适配器的notifyDataSetChanged方法。这样ListView就会重新调用适配器的getView方法来获取视图,并更新列表项的显示。示例代码如下:

代码语言:txt
复制
// 更新数据源
dataList.add(newData);
// 通知适配器数据源改变
adapter.notifyDataSetChanged();

这样就可以解决未在notifyDataSetChanged上调用GetView,ListView被卡住的问题。

关于ListView的更多详细信息,以及适用场景和推荐的腾讯云相关产品和产品介绍链接地址,可以参考腾讯云文档中的ListView相关内容:

请注意,以上链接仅为示例,实际上,要提供完善且全面的答案,需要根据具体的问题和要求,结合实际情况来确定最佳的解决方案和相关资源。

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

相关·内容

Android ListView优化之局部刷新(更新)(非notifyDataSetChanged

在Android开发中我们经常会用到listview的数据和界面刷新动作,我们每次可能会用到的都是Adapter.notifyDataSetChanged()方法。...局部刷新方法三:调用一次getView()方法 这种方法是调用适配器对应的getView方法,用它里面的代码对界面进行刷新。...listview调用了多次,在点击更新界面的时候只调用了一次。...因为ListView默认只会加载一屏的数据,所以要判断其可见范围。不可见的在滑动的时候getView会自动调用更新数据。...最后要强调的一点就是关于布局优化,最好将item的高度设置为一个固定的值,这样能减少getView调用次数。因为一个不确定的值,ListView会频繁调用多次getView去确定其高度和渲染。

2.4K20
  • ListView使用技巧-更新中

    使用ViewHolder模式提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次在getView()时重复的调用findViewById()....需要显示一行时,它会调用此方法 @Override public View getView(int position, View convertView, ViewGroup parent...取消ListView的Item点击效果 当点击ListView的某一项Item时,系统默认会出现一个点击效果,在Android5.X是一个波纹的效果,而在5.X以下是一个改变背景颜色的效果,但是我们可以通过修改...动态修改ListView-notifyDataSetChanged notifyDataSetChanged mData.add("new"); notifyDataSetChanged(); 当修改了传递给...Adapter的映射List之后,只需要通过调用Adapter的notifyDataSetChanged方法,通知ListView更改数据源即可完成对ListView的动态修改。

    94830

    BaseAdapter的notifyDataSetChanged方法

    都用过 BaseAdapter的notifyDataSetChanged()方法,用法很简单,当BaseAdapter的数据更新了,需要更改显示,这时候就要调用notifyDataSetChanged(...NotifyDataSetChanged就是调用了这个类的onChanged()函数,细看以下AdapterDataSetObserver 的onChanged函数,发现,其实这个函数并没有什么奇特的写法...总结而言,NotifyDataSetChanged就是告诉ListView数据变化了,进行数据改变,setAdapter函数将清空所有的数据,并且重新设置监听和添加View。这点有很大的不同。...不多说,源码,先看一下Adapter的源码和BaseAdapter的源码,为了简明,我删去了原本的注释: 这里的英文我就不做翻译了,友情提示一下大家,想做软件开发英语不好的抓紧学,否则就不要做了。...requestLayout();熟悉这个函数的都知道,这个函数的调用会让子控件,也就是当前的ListView重新向父控件请求layout。

    1.1K30

    ListView详解

    ListView 针对每个item,要求 adapter“返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView...的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项。...用convertView减少文件解析次数 Android系统本身为我们考虑了ListView的优化问题,在复写的Adapter的类中,比较重要的两个方法是getCount()和getView()。...界面上有多少个条显示,就会调用多少次的getView()方法;因此如果在每次调用的时候,如果不进行优化,每次都会使用View.inflate(….)的方法,都要将xml文件解析,并显示到界面上,这是非常消耗资源的...但是当xml文件解析的时候,只要被创建出来了,其孩子的id就不会改变了。根据这个特点,可以将孩子id存入到指定的集合中,每次就可以直接取出集合中对应的元素就可以了。

    1.2K60

    ListView数据动态更新

    经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是静态的,但在实际开发中,这些数据往往都是动态变化的,比如数据内容发生改变...、增加几行、或者删除几行,这就涉及到ListView数据的更新问题。...接下来通过一个简单的示例程序来学习ListView的数据更新。...public long getItemId(int position) { return position; } @Override public View getView...从以上几个操作,可以看到动态更新时离不开每次调用notifyDataSetChanged()方法,这个方法的主要作用就是当适配器里面的内容发生改变时需要强制调用getView()方法来刷新每个Item的内容

    2.2K60

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

    修改界面,在顶部横条增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/5370378...,数据库增加一条记录,参数:String电话号码,String拦截模式 此时ListView并不会显出出来刚添加的记录,需要退出这个Activity重写进入,我们通知适配器数据更新 调用集合List对象的...add()方法,添加一条数据,参数:0(第一个),数据 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 删除记录 条目布局文件中,在右侧放置一个垃圾桶的小图标...对象的remove()方法,删除一条数据,参数:int索引 调用ListAdapter对象的notifyDataSetChanged()方法,通知数据更新 CallSmsSafeActivity.java...Auto-generated method stub return infos.size(); } @Override public View getView

    88730

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

    在我们Android 开发中,ListView是在常用不过的控件了。但是有时候会爆出这种异常,就搞得好尴尬了。...异常图片 明明我们在代码中的确是有调用adaptor.notifyDataSetChanged()这个方法的,明显没问题啊。...super.getItemViewType(position); } @SuppressWarnings("unchecked") @Override public View getView...我们在adaptor内部就封装了一个List用于保存用户传过来的List数据,我们这里只是对外部的list有一个引用,但是真正使用到的list,却是内部的List,通过每一次调用notifyDataSetChanged...再调用父类的更新、这样,我们玩来玩去就是外部的list,并不会对内部listview使用到的list有任何影响。就完美屏蔽了这个异常了。

    56280

    GridView结合tablayout实现展开收缩功能

    public long getItemId(int position) { return position; } @Override public View getView...listRow用来存放显示的数据,咱们是一行四列,所以,需要在全部数据中拿出前四个数据,放在list中,然后通过适配器把list传进去显示,当点击展开按钮时,再 去除全部数据放在listRow中,同时调用...myGVAdapter.notifyDataSetChanged();这里也可以直接把listDataAll传进去,但传进去还要再new一个适配器,这就不如直接notifyDataSetChanged(...position; dataShow(carID,gvID); } }); 写到这里,就已经GV和tablayout关联起来了,因为他们都调用了...myGVAdapter2.notifyDataSetChanged();这里只通知listview就可以了,GV通知要在btn(展开收缩按钮)中添加。

    3K80

    列表、存储以及WebView 相关优化

    列表优化 ListView 优化逻辑 在adapter中的getView方法中尽量少使用逻辑 尽最大可能避免GC 滑动的时候不载入图片 将ListView的scrollingCache和animateCache...你能够检查一下: item布局的层级是否太深 getView()方法中是否有大量对象存在 ListView的布局属性 载入图片 假设你的ListView中须要显示从网络上下载的图片的话。...的scrollingCache和animateCache设置为false scrollingCache: scrollingCache本质是drawing cache,你能够让一个View将他自己的drawing...animateCache: ListView默认开启了animateCache,这会消耗大量的内存,因此会频繁调用GC,我们能够手动将它关闭掉 优化前的ListView <ListView...不要什么情况都用adapter.notifyDataSetChanged(),小范围修改可以试试adapter.notifyItemChanged(position)或者adapter.notifyItemRangeChanged

    65010

    ListView:The content of the adapter has changed but ListView did not receive a notification终极解决方法

    )] 其实我在listview的adapter添加完数据后,使用了handler去调用datper.notifyDataSetChanged();来通知listview显示变化结果; 虽然自己很确定没有多线程操作...解决方法1: ListView.requestLayout();   Adatper.notifyDataSetChanged(); 在你adpater更新前,调用listview的requestLayout...但是实际用的时候我发现也会出问题,想了想最彻底的解决办法 彻底解决方法: 把  listview的adapter数据更新和dapter.notifyDataSetChanged()方法的调用必须同时放到单独一个线程里...方法的调用放到了非UI线程,仔细一看是说更新ListView的数据以及通知数据更新要放到同一个线程(主线程),是为了保持数据一致,adapter里面一般是会存放一个数组,对那个数据的修改和调用notifyDataSetChanged...方法要放到一起,而且是放到主线程,如果对数据的更新放到了子线程,notifyDataSetChanged调用在主线程,notifyDataSetChanged调用会默认把ListView绑定到主线程里面了

    1.4K70
    领券