fragment视图缓存

在使用ViewPager+fragment+TabLayout实现底部导航栏时,发现每当fragment焦点切换时,onCreateView方法会重新执行导致每次加载。为优化此问题,可以采取两种视图缓存方法:1. 缓存已创建的View,避免重复加载;2. 利用ViewPager的setOffscreenPageLimit方法,设置缓存的fragment数量。经测试,这两种方法都能有效提高性能。

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

最近练手,再做一个APP,采用MVP+Retrofit2+RxJava2+Glide组合App。



实现底部导航栏时,使用的时ViewPager+fragment+TabLayout来实现的,实现后发现一个问题,在这个项目中每次一个fragment失去焦点又获得焦点时,都会重新执行

onCreateView方法,这个可以理解的,通过fragment的生命周期可以知道,的确是这样的。但是这样不好啊,每次都要加载。所以我们要想办法将fragment的视图进行缓存。


我们在使用ListView时,遇到过对ListView进行优化,其中有一项就是对ListView的视图进行缓存。先判断视图是否存在,不存在就加载,如果已经存在了就不用加载了,直接使用存在的视图。


这里应该也是一样的,经过我上网搜集的资料,参考别的大神的做法,总结两种方法。

1,缓存创建过得View


private View view=null;
    @Override
    public View onCreateView(LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
         if(view==null)
        {
            view =inflater.inflate(R.layout.fragment_first,container,false);
        }
        else
        {
            //缓存的rootView需要判断是否已经在一个ViewGroup中, 如果在,就先移除自己,要不然会发生这个rootview已经有parent的错误。
            ViewGroup parent=(ViewGroup)view.getParent();
            if(parent!=null)
            {
                parent.removeView(view);
            }
        }
        return view;
}


2,第二种特别适合ViewPager结合使用的fragment,用来缓存多fragment来回切换情况下的fragment视图。

ViewPager提供一个setOffscreenPageLimit(int  num)  方法,num的值表示缓存该fragment左右两边各num个fragment视图,默认1个。


经过测试,这两个方法都是可行的。


参考:http://m.blog.youkuaiyun.com/wukong1981/article/details/42198217

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值