fragment优化----当页面可见时加载数据

当页面可见的时候,加载当前页面。 没有打开的页面,就不会预加载。

通过Fragment中的setUserVisibleHint()方法进行判断,此方法会在onCreateView()之前执行,当viewPager中fragment改变可见状态时就会调用。

注意点:当view创建后进行调用,防止数据加载方法报空指针异常;

 调用方法之后记录加载状态,防止ViewPager来回切换时方法不会被重复调用。

方法:

使用 isViewCreate 和 isLazyLoaded记录状态,在系统调用onActivityCreated时设置为true,这时onCreateView方法已调用完毕;在第一次调用onLazyLoad()方法后马上执行 isLazyLoaded = true。

@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        isViewCreate = true;
        lazyLoad();
    }

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        lazyLoad();
    }

    private void lazyLoad() {
        if (isViewCreate && getUserVisibleHint() && !isLazyLoaded) {
            isLazyLoaded = true;
            initData();
        }
    }

题外:fragment的setUserVisibleHint不执行,setUserVisibleHint只有结合FragmentPagerAdapter才能使用。你的adapter需要继承FragmentPagerAdapter而不是PagerAdapter。

你可能感兴趣的:(Android)