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結合的一些問題解決

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