美文网首页
预加载+懒加载,ViewPager+Fragment

预加载+懒加载,ViewPager+Fragment

作者: shiyuzhe | 来源:发表于2018-05-22 23:09 被阅读200次

预期效果:用户不可见界面只初始化UI,UI可见时开始获取数据并更新UI。

预加载

        ViewPager默认会缓存当前页相邻的界面,比如当滑动到第2页时,会初始化第1页和第3页的界面(即Fragment对象,且生命周期函数运行到onResume()),可以通过setOffscreenPageLimit(count)设置离线缓存的界面个数。

懒加载

        ViewPager+Fragment中,滑动到新的Fragment,先显示”正在加载”,过会才会正常显示界面

为什么懒加载:用户没进入的界面需要有一系列的网络、数据库等耗资源、耗时的操作,预先做这些数据加载是不必要的。

屏蔽未显示UI初始化数据:

UI可见时请求数据

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

public class Fra_1extends Fragment {

private ViewmRootView;

private boolean mIsInited;

private boolean mIsPrepared;

@Override

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

mRootView = inflater.inflate(R.layout.activity_main, container,false);

mIsPrepared =true;

lazyLoad();

return mRootView;}

public void lazyLoad() {

if (getUserVisibleHint() &&mIsPrepared && !mIsInited) {

//异步初始化,在初始化后显示正常UI

            loadData();}}

private void loadData() {

    new Thread() {

        public void run() {

        //1. 加载数据

        //2. 更新UI

        //3. mIsInited = true

            }

}.start();}

@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

if (isVisibleToUser) {

lazyLoad();}}

public static Fra_1 newInstance() {

return new Fra_1();}}

Tips:为避免不必要的重新数据加载(重复调用onCreateView()),设置Viewpager默认缓存半径为Fragment数-1;既4个Fragment设置setOffscreenPageLimit(3);

转至:https://mp.weixin.qq.com/s/dUuGSVhWinAnN9uMiBaXgw

相关文章

网友评论

      本文标题:预加载+懒加载,ViewPager+Fragment

      本文链接:https://www.haomeiwen.com/subject/tqfljftx.html