fragment视图缓存

最近练手,再做一个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.csdn.net/wukong1981/article/details/42198217

你可能感兴趣的:(Android)