? ? ?在ViewPager中的Fragment的生命周期? 隨著頁面的切換 當前的展示頁相鄰的頁面生命周期一直在變化
?
? ?一開始 剛進入Activity時候,ViewPager默認初始化好前兩個Fragment(消息和任務)
消息 ->任務
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方法不會再去onCreate
那么如何避免重復的創建和銷毀呢? 解決方案如下:
方案一(不推薦):
mViewPager.setOffscreenPageLimit(4);
方案二(推薦):
@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不會重復創建
?