(已解决)ViewPager禁止预加载-使用Framgment的setUserVisibleHint导致的问题

###(已解决)ViewPager禁用预加载,使用Fragment的setUserVisibleHint导致的问题


不久前,写了一篇博客,《ViewPager禁止预加载,滑动到那个页面再加载网络数据》,根据这篇文章的做法,确实可以解决问题,但是当时我忽略了另一种情况,那就是在Activity中重复利用那个Fragment,结果Fragment没有加载数据,显示空白的

这也是我在实际开发中遇到的,因为有个Fragment在ViewPager中显示,在另一个地方需要跳转到一个Activity,Activity显示内容和逻辑和Fragment里的一样,所以为了代码重用,就直接用Activity嵌套Fragment了,结果Activity显示空白,调试发现根本没运行到setUserVisibleHint(),在ViewPager中嵌套Fragment没有遇到这个问题。

于是我在Activity的onResume()中手动调用setUserVisibleHint(true),结果报空指针,一查才知道,原来setUserVisibleHint()方法要优先于Fragment的onCreateView(),由于Fragment里的必要控件都还没有初始化,所以报空指针了

要解决这个问题,需要用到Fragment的onHiddenChanged()方法,

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden && isFirst){
        //在这里加载数据
        isFirst = false;
    }
}

然后在Activity中手动调用onHiddenChanged(true),这样就能实现和ViewPager + Fragment的方式一样的效果了,在用户看到这个Fragment的时候再加载数据

作者钟子路(zhongzilu)
原文地址: https://zhongzilu.gitbub.io/(已解决)ViewPager禁用预加载使用Fragment的setUserVisibleHint导致的问题/

本文总阅读量