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