fragment懒加载

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同。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值