ViewPager中切换界面Fragment被销毁

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结合的一些问题解决

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章