fragment生命周期
·生长消亡联动规律:activity先生长,fragment再生长,fragment先消亡,activity再消亡
·具体联动:
AonCreate==>FonAttatch-FonCreate-FonCreateView-FonActivityCreated
AonStart==>FonStart
AonResume==>FonResume
====================
FonPause==>AonPause
FonStop==>AonStop
FonDestoryView-FonDestroy-FonDetach==>AonDestroy
进入activity视图:
1、onAttach(): 当该Fragment被添加到Activity时被回调。该方法只会被调用一次;
2、onCreate(): 当创建Fragment时被回调。该方法只会被调用一次;
进入fragment视图:
3、onCreateView():每次创建、绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View 组件;
4、onActivityCreated(): 当Fragment的宿主Activity被启动完成后回调该方法;(可请求网络数据)
5、onStart(): 启动Fragment时被回调;(home退出又进入、锁屏点亮又进入调用)
6、onResume(): onStart()方法后一定会回调onResume()方法;
退出fragment视图:
7、onPause(): 暂停Fragment时被回调;
8、onStop(): 停止Fragment时被回调;
9、onDestroyView(): 销毁该Fragment所包含的View组件时调用;(直接home、锁屏不调用)
退出activity视图
10、onDestroy(): 销毁Fragment时被回调。该方法只会被调用一次;
11、onDetach(): 将Fragment从Activity中删除、替换完成时调用该方法。onDestroy()方法后一定会回调onDetach()方法。该方法只会被调用一次。
懒加载的核心方法:setUserVisibleHint
public abstract class LazyFragment extends Fragment {
protected boolean isVisible;
/**
* 在这里实现Fragment数据的缓加载.
* //有viewpager才会调用,没有则需要主动调用getUserVisibleHint
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected abstract void onVisible();
protected abstract void onInvisible();
}
public class OpenResultFragment extends LazyFragment{
// 标志位,标志已经初始化完成。
private boolean isPrepared;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(LOG_TAG, "onCreateView");
View view = inflater.inflate(R.layout.fragment_open_result, container, false);
//XXX初始化view的各控件
isPrepared = true;
onVisible();
return view;
}
@Override
protected void onVisible() {
if (!isPrepared || !isVisible) {
return;
}
reqKnowledgeCata();// 创建fragment时请求列表数据
}
@Override
protected void onInvisible() {
// TODO Auto-generated method stub
}
}
viewpager缓存核心方法:
viewPager.setOffscreenPageLimit()
ViewPager 的setOffscreenPageLimit(int arg0);
方法用于设置ViewPager的后台加载页面个数。
假设ViewPager中设置了3个页面
现在给参数为2,即setOffscreenPageLimit(2);那么就是3个页面全部会在第一次加载的时候被加载完成。
参数2的含义就是,除去当前显示页面以外需要被预加载的页面数。
参数最少设置为1,当给的参数小于等于1的时候,效果与给1同。
369

被折叠的 条评论
为什么被折叠?



