欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ViewPager中切换界面Fragment被销毁

程序员文章站 2022-05-28 11:54:05
...

ViewPager+Fragment进行切换,adapter使用FragmentPagerAdapter,切换的时候,会自动创建相邻的fragment,比如最开始处于第0页时,adapter不仅为第0页创建Fragment实例,还为相邻的第1页创建了Fragment实例,第1次从第0页滑到第1页,adapter同样会为相邻的第2页创建Fragment实例,但是会把上上页的实例保留,销毁了它的视图,所以界面会显示异常。
解决的方法有三种,第一是扩大ViewPager的缓存界面数,默认是一个界面,可以通过

mPager .setOffscreenPageLimit(maxNum-1);

设置,maxNum为最大Fragment数目
第二种方法是在onDestroyView方法内保存相关信息,在onCreateView方法内恢复信息设置
第三种是复用Fragment的RootView

 private View mFragmentView;
  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Inflate the layout for this fragment
        if(mFragmentView==null)
        {
            mFragmentView = inflater.inflate(R.layout.fragment_health_education, container, false);
            ButterKnife.bind(this, mFragmentView);
        }
        return mFragmentView;
    }
 @Override
    public void onDestroyView()
    {
        super.onDestroyView();
        if (null != mFragmentView) {
            ((ViewGroup) mFragmentView.getParent()).removeView(mFragmentView);
        }
    }

参考文献
关于ViewPager+Fragment中Fragment不销毁/生命周期
Android App中ViewPager与Fragment结合的一些问题解决