一前言:
项目中会用到ViewPager+Fragment实现选项卡的切换,如果请求网络会出现网络丢包、阻塞等问题
因为ViewPager配合Fragment使用,默认会加载两个Fragment页面,那么如何解决这个问题呢?
我们可以采用setUserVisibleHint这个方法
二 怎么使用
第一步:声明一个变量
isPageStart
第二步:重写onViewCreated方法并设置isPageStart为true
第三步:重写setUserVisibleHint()方法
当getUserVisibleHint()方法和isPageStart都返回true的时候可以开始加载数据了,为了防止重复加载,把isPageStart变量涉外false
三注意:
1.setUserVisibleHint方法会加载多次,
2.必须结合FragmentPagerAdapter才能使用
- onCreateView调用后任何View变量可以使用
4.androidX当中已经建议使用setUserVisibleHint()方法而是用setMaxLifecycle()代替
下面看一下源码
setUserVisibleHint():
@Deprecated
public void setUserVisibleHint(boolean isVisibleToUser) {
if (!mUserVisibleHint && isVisibleToUser && mState < STARTED
&& mFragmentManager != null && isAdded() && mIsCreated) {
mFragmentManager.performPendingDeferredStart(this);
}
mUserVisibleHint = isVisibleToUser;
mDeferStart = mState < STARTED && !isVisibleToUser;
if (mSavedFragmentState != null) {
// Ensure that if the user visible hint is set before the Fragment has
// restored its state that we don't lose the new value
mSavedUserVisibleHint = isVisibleToUser;
}
}
可以监听到Fragment的UI是否可见。
@NonNull
public FragmentTransaction setMaxLifecycle(@NonNull Fragment fragment,
@NonNull Lifecycle.State state) {
addOp(new Op(OP_SET_MAX_LIFECYCLE, fragment, state));
return this;
}
设置Fragment的生命周期