android fragment 延迟加载数据,《Android-Fragment懒加载》

Fragment懒加载看见这个标题的时候不少人都会问为何Fragment要懒加载,或者在哪一种场景须要懒加载?html

带着这两个疑问咱们开始往下看。java

一、为何Fragment要懒加载android

这个缘由有点简单,就是想在用户可见的状况下Fragment才进行一系列的逻辑操做,这样减小了手机的内存开销。网络

二、那种场景须要Fragment要懒加载app

这个能够说本文中的重点了,就是ViewPager+Fragment联合使用的时候。有时候在ViewPager的第一页有不少网络请求,第二页也仍是有不少网络请求。而ViewPager默认状况(自定义ViewPager不在我说的范围内)是进行预加载一页的,意思就是ViewPager的第一页和第二页的网络请求都是同时发起的,这种状况下咱们手机的内存消耗也多,而网络很差的时候用户体验也不要,因而就想到了Fragment懒加载。ide

上代码(其实很简单的):布局

import android.os.Bundle;

import android.support.annotation.IdRes;

import android.support.annotation.Nullable;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

public abstract class BaseFragment extends Fragment implements View.OnClickListener {

protected View mContentView;

/**

* 控件是否初始化完成

*/

private boolean isViewCreated;

/**

* 数据是否已加载完毕

*/

private boolean isLoadDataCompleted;

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

this.mContentView = inflater.inflate(loadLayoutId(), null);

initViews();

bindListener();

isViewCreated = true;

return mContentView;

}

@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

if (isVisibleToUser && isViewCreated)//只有在用户可见以及初始化以后才加载数据

lazyLoad();

}

/**

* Framgnet重组时候也会跳过onCreate,而onAttach和onActivityCreated仍是会被调用

*/

@Override

public void onActivityCreated(@Nullable Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

if (getUserVisibleHint())

lazyLoad();

}

/**

* 懒加载的方法

*/

protected void lazyLoad() {

if (!isLoadDataCompleted) {

initData();

processLogic();

isLoadDataCompleted = true;

}

}

/**

* 为Fragment加载布局

*/

protected abstract int loadLayoutId();

/**

* 初始化控件

*/

protected abstract void initViews();

/**

* 初始化数

*/

protected abstract void initData();

/**

* 为控件设置监

*/

protected void bindListener() {

}

/**

* 逻辑操做,网络请求

*/

protected void processLogic() {

}

protected T $(@IdRes int viewId) {

return (T) mContentView.findViewById(viewId);

}

protected void bindClickListener(View... views) {

for (View view : views) {

if (view != null)

view.setOnClickListener(this);

}

}

/**

* 控件点击回调

*/

protected void onClick(View view, int id) {

}

@Override

public void onClick(View v) {

onClick(v, v.getId());

}

@Override

public void onDestroyView() {

isLoadDataCompleted = false;//这里须要重置状态,否则加载了以后就没办法再从新加载了

super.onDestroyView();

}

}

看到这里,Fragment懒加载也基本结束了,可能我阐述得不是很清楚,你们能够看看其余大神们的博客什么的。this

ViewPager+Fragment取消预加载(延迟加载).net

Fragment要懒加载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值