在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