###(已解决)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导致的问题/