Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究或不执行OnCreatView方法导致界面不刷新

在Android中,当使用Fragment+ViewPager组合时,遇到数据刷新但界面不更新的问题。问题源于OnCreateView方法未执行,导致UI未刷新。解决方法包括:在数据变更后调用FragmentPagerAdapter的notifyDataSetChanged,以及重写getItemPosition返回POSITION_NONE。然而,这仅更新已存在的Fragment,未执行OnCreateView。最终解决方案是将FragmentPagerAdapter替换为FragmentStatePagerAdapter,确保界面刷新。

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

今天遇到一个问题是Fragment+ViewPager搭配使用的时候,页面刷新不执行OnCreateView方法到时,数据是有刷新了,但是UI界面没有刷新,还是原来的数据显示。
下面先说说我项目中的需求吧,这样我们可以针对问题去解决。
需求:在一个页面中使用ViewPager+Fragment搭配使用,在ViewPager中实现不同页面的滑动。并且ViewPager中的页面数量是根据网络请求回来的数据进行添加的。每个页面还都有相应的网络请求。这里还要考虑到的因素是如果网络请求出错的时候,那么没有数据ViewPager就不能根据数据进行页面的添加,这里就要默认的显示一个页面。
我这里的做法是:先定义一个容量来装载页面ArrayList fragments,程序一进入的时候先默认的给fragments添加一个页面默认显示,后面再在网络请求回数据的时候再fragments.clear();清空列表的数据,再重新添加页面数据。运行了之后,根本就没有效果。当你更新里fragment List集合后调用FragmentPagerAdapter 的notifyDataSetChanged方法时发现数据根本就没有刷新。网络上会提到pageadapter的刷新方案如下代码:
复写pageradapter的getItemPosition方法设置tag为POSITION_NONE意思是没有找到child要求重新加载。

@Override 
    public int getItemPosition(Object object) {  
        return POSITION_NONE;  
    }  

结果你发现是刷新了一下但内容还是原始的数据。通过对fragmentpageadapter的源码查看你会在instantiateItem方法里面发现这一段

 // Do we already have this fragment?
        String name = makeFragmentName(container.getId(), position);
        Fragment fragment = mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            if (DEBUG) Log.v(TAG, 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值