ViewPager中Fragment的重複建立、複用問題

     在ViewPager中的Fragment的生命週期  隨着頁面的切換 當前的展現頁相鄰的頁面生命週期一直在變化ide

 

   一開始 剛進入Activity時候,ViewPager默認初始化好前兩個Fragment(消息和任務)spa

消息 ->任務

05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 團隊onAttach
05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 團隊onCreate
05-09 14:47:39.593 31509-31509/tyh.com.tablayout E/TYH: 團隊onCreateView
05-09 14:47:39.603 31509-31509/tyh.com.tablayout E/TYH: 團隊onStart
05-09 14:47:39.603 31509-31509/tyh.com.tablayout E/TYH: 團隊onResume

任務 ->團隊

5-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onPause
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onStop
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 消息onDestroyView
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 部門onAttach
05-09 14:55:26.932 31509-31509/tyh.com.tablayout E/TYH: 部門onCreate
05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部門onCreateView
05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部門onStart
05-09 14:55:26.942 31509-31509/tyh.com.tablayout E/TYH: 部門onResume

團隊 ->部門

05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任務onPause
05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任務onStop
05-09 14:57:18.371 31509-31509/tyh.com.tablayout E/TYH: 任務onDestroyView

部門 ->團隊

05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任務onCreateView
05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任務onStart
05-09 15:00:50.918 31509-31509/tyh.com.tablayout E/TYH: 任務onResume

    你會發現 當 Fragment完成onCreate以後再去切換的時候  只會執行onCreateView和onDestroyView方法不會再去onCreatecode

那麼如何避免重複的建立和銷燬呢  解決方案以下:blog

方案一(不推薦):生命週期

mViewPager.setOffscreenPageLimit(4);

方案二(推薦):rem

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if(view==null){
view = inflater.inflate(R.layout.contentfragment,container,false);
tvContent = (TextView) view.findViewById(R.id.tv_content);
String string = getArguments().getString(KEY);
tvContent.setText(string);
tvContent.setTextColor(Color.BLUE);
tvContent.setTextSize(30);
}
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if(view!=null){
view.getParent().remove(view);
}
}

    如此當從新建立Fragment的時候就會複用以前建立好的View不會重複建立get

相關文章
相關標籤/搜索