adapter的notifyDataSetChanged()无效

本文探讨了Android开发中ListView与Adapter交互时遇到的界面不刷新问题。特别关注了数据源已更新但Adapter未能正确接收更新通知的情况,并提供了一种通过重新设置Adapter来触发界面刷新的有效解决方案。

1、数据源没有更新,调用notifyDataSetChanged无效。

2、数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。

3、数据源更新了,但是adpter没有收到消息通知,无法动态更新列表。


第一点就不说了 第二点网上也有很多资料可以参考

http://blog.youkuaiyun.com/williamz1980/article/details/5837998

我碰到最头碰是第三种 

项目情景:有一个listView给他添加一个HeadView , Headview的控件有一个GridView,当点击ListView中的Item时要将Iten加入到HeadView的GridView中 在模拟器上都没有问题但是在真机上时发现 将ListView下拉到底部,这个时候HeadView已经不再界面上了 ,点击listView的Item ,这个时候GridView不刷新界面。deBug发现list的数据源已经更新了 Adapter也不为空notifyDataSetChanged()方法也调用了 但是就是不刷新界面  , Adapter的getView()方法也不调用 ,所以应该是属于第三种数据源更新 但是adapter没有收到刷新通知  这个时候重新调用setAdapter()方法 即:


if(mHeadAdapter != null){

 headGridview.setAdapter(mHeadAdapter);
 mHeadAdapter.notifyDataSetChanged();

 }
在notifyDataSetChanged()方法前先setAdapter;
在 Android 开发中,ListView 是常用的列表控件,而 Adapter 则是 ListView 显示列表数据的适配器。当数据源改变时,我们需要调用 AdapternotifyDataSetChanged() 方法来通知 ListView 更新数据。不过有时候,我们会发现调用 notifyDataSetChanged() 方法后,ListView 并有更新数据,这通常是由以下几个原因造成的: 1. 数据源有更新 在调用 notifyDataSetChanged() 方法之前,需要先确保数据源已经更新了。如果数据源有更新,调用 notifyDataSetChanged() 方法也不会更新 ListView 显示的数据。 2. Adapter 对象有重新设置 如果使用的是同一个 Adapter 对象,那么需要重新设置 Adapter 对象才能更新 ListView 显示的数据。可以通过 setAdapter() 方法重新设置 Adapter 对象。 3. ListView 有重新绘制 当调用 notifyDataSetChanged() 方法后,ListView 并不会立即重新绘制,而是等到系统认为需要重新绘制时才会更新。可以通过调用 invalidate() 方法让 ListView 立即重新绘制。 4. 数据源和 Adapter 对象不匹配 如果数据源和 Adapter 对象不匹配,即数据源中的数据类型和 Adapter 中的数据类型不一致,调用 notifyDataSetChanged() 方法也无法更新 ListView 显示的数据。 综上所述,如果在 ListView 中调用 notifyDataSetChanged() 方法无效,可以先检查数据源是否更新,是否重新设置 Adapter 对象,是否调用了 invalidate() 方法以及数据源和 Adapter 对象是否匹配。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值