ViewPager调用notifyDataSetChanged()不刷新问题

本文深入探讨了使用ViewPager时遇到的数据不刷新问题,并提供了一种简单有效的解决方案:通过重写PagerAdapter的getItemPosition方法并返回POSITION_NONE,确保数据更新时能够正确刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写项目的时候遇到一个问题,个人主页使用viewpage,设置三张图片,点击编辑 跳转到编辑页面修改图片内容和排序,返回来重新设置viewpage数据,调用notifyDataSetChanged(),结果数据没变化,查资料看到Viewpager 的刷新过程是这样的:

在每次调用 PagerAdapter 的 notifyDataSetChanged()
方法时,都会激活 getItemPosition(Object object) 方法,该方法会遍历 ViewPager 的所有 Item(由缓存的 Item 数量决定,默认为当前页和其左右加起来共3页,这个可以自行设定,但是至少会缓存2页),
为每个 Item 返回一个状态值(POSITION_NONE/POSITION_UNCHANGED),如果是 POSITION_NONE,
那么该 Item 会被 destroyItem(ViewGroup container, int position, Object object) 方法 remove 掉,
然后重新加载,如果是 POSITION_UNCHANGED,就不会重新加载,默认是 POSITION_UNCHANGED,
所以如果不重写 getItemPosition(Object object),修改返回值,就无法看到 notifyDataSetChanged()
的刷新效果。

最简单的解决方案

那就是直接一刀切:重写 PagerAdapter 的 getItemPosition(Object object) 方法,将返回值固定为
POSITION_NONE。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值