跳转至

琐碎知识点2

1. Fragment懒加载

ViewPager + 多Fragment 懒加载实现方式:

  1. ViewPager + 默认 behavior(BEHAVIOR_SET_USER_VISIBLE_HINT)的 FragmentStatePagerAdapter + Fragment
    在 Fragment 的 onViewCreated 方法 和 setUserVisibleHint 中进行懒加载判断。

    private boolean mDataLoaded;
    
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 跳tab选中时触发加载
        lazyLoad();
    }
    
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisible()) {
            // 平滑滑动tab时触发加载
            lazyLoad();
        }
    }
    
    private void lazyLoad() {
        if (!mDataLoaded && getUserVisibleHint() && isVisible()) {
            mDataLoaded = true;
            doLoadData();
        }
    }
    
    protected void doLoadData() {
    
    }
    

  2. ViewPager + BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 的 FragmentStatePagerAdapter + Fragment
    此处 Fragment 只需要在 onResume 里面进行判断:

    private boolean mDataLoaded;
    
    @Override
    public void onResume() {
        super.onResume();
        lazyLoad();
    }
    
    private void lazyLoad() {
        if (!mDataLoaded) {
            mDataLoaded = true;
            doLoadData();
        }
    }
    
    protected void doLoadData() {
    
    }
    

  3. 使用 ViewPager2 + Fragment
    ViewPager2 搭配第二种方式里面的 Fragment 也可以达到懒加载的效果。但是需要注意如何才能防止Fragment被自动销毁。


最后更新: 2021年12月3日

评论