ViewPager+Fragment的懒加载

public abstract class LazyBaseFragment extends Fragment {

	// Fragment的View加载完毕的标记
	private boolean isViewCreated;

	// Fragment对用户可见的标记
	private boolean isUIVisible;

	@Override
	public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
		super.onViewCreated(view, savedInstanceState);

		isViewCreated = true;
		/*  由于 setUserVisibleHint 先于 onCreateView 和 onViewCreated ,
            所以第一页显示时会 回调 setUserVisibleHint触发lazyLoad(); 
            但是由于isViewCreated 为false 所以不进行加载
		    所以 下面语句用于 第一页加载 。 由于其他页面 getUserVisibleHint 为false
            所以不会影响其他页面的 懒加载*/
		if (getUserVisibleHint()) {
			loadData();
			isViewCreated = false;
			isUIVisible = false;
		}
	}

	protected abstract void loadData();

	private void lazyLoad() {

		/* 这里进行双重标记判断,是因为setUserVisibleHint会多次回调,
           并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,
           才加载数据*/
		if (isViewCreated && isUIVisible) {
			loadData();
			// 数据加载完毕,恢复标记,防止重复加载
			isViewCreated = false;
			isUIVisible = false;
		}
	}

	@Override
	public void setUserVisibleHint(boolean isVisibleToUser) {
		super.setUserVisibleHint(isVisibleToUser);
		if (isVisibleToUser) {
			isUIVisible = true;
			lazyLoad();
		} else {
			isUIVisible = false;
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值