在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