Fragment数据懒加载


  • Fragment懒加载的使用场景便是在一个ViewPager管理多个Fragment时候,由于ViewPager”出色”的缓存机制会在显示一个Fragment的同时,预先加载好左右相邻两个Fragment的部分资源(会触发相邻Fragment的onCreate生命周期)。所谓的懒加载就是让我们加载数据的操作仅在Fragment可见的时候执行,可以节省不必要的开销。
  • 看”懒加载”这个名称挺唬人的,其实就是通过系统提供的setUserVisibleHint(boolean isVisibleToUser)方法,在这其中进行数据的加载。
  • setUserVisibleHint:

Set a hint to the system about whether this fragment’s UI is currently visible to the user.
An app may set this to false to indicate that the fragment’s UI is scrolled out of visibility
or is otherwise not directly visible to the user.
This may be used by the system to prioritize operations such as fragment lifecycle updates
or loader ordering behavior.

/**
 * 懒加载Fragment
 */
public abstract class BasePageFragment extends BaseFragment {

    protected boolean isViewInitiated;
    protected boolean isVisibleToUser;
    protected boolean isDataInitiated;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        isViewInitiated = true;
        prepareFetchData();
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.isVisibleToUser = isVisibleToUser;
        prepareFetchData();
    }

    public abstract void fetchData();

    public boolean prepareFetchData() {
        return prepareFetchData(false);
    }

    public boolean prepareFetchData(boolean forceUpdate) {
        if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
            fetchData();
            isDataInitiated = true;
            return true;
        }
        return false;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值