@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInVisible();
}
}
Run Code Online (Sandbox Code Playgroud)
我发现这部分代码没有执行。
Yup*_*upi 13
现在 inAndroidX方法setUserVisibleHint(boolean isVisibleToUser)已被弃用,如果您查看文档,它会说:
现在,您可以设置最高
Lifecycle的呼吁片段状态setMaxLifecycle()上FragmentTransaction。这取代了现在已弃用的setUserVisibleHint().FragmentPagerAdapter并FragmentStatePagerAdapter有一个新的构造函数,允许您切换到新的行为。
所以基本上当你使用这种方法时FragmentTransaction:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
Run Code Online (Sandbox Code Playgroud)
将等价于setUserVisibleHint(false)和:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
Run Code Online (Sandbox Code Playgroud)
将相当于: setUserVisibleHint(true)
luk*_*jar 11
他们只是在Fragments中更改了API。
如果使用此方法限制片段生命周期:
现在,您可以通过在FragmentTransaction上调用setMaxLifecycle()来为Fragment设置最大生命周期状态。这将替换现在不推荐使用的setUserVisibleHint()。
来源:https : //developer.android.com/jetpack/androidx/releases/fragment#1.1.0-alpha07。
如果您需要此方法是因为您尝试检测当前在中可见的片段ViewPager。现在,您可以只使用onResume和onPause方法,但是在此之前,您应该更改FragmentPagerAdapter构造函数中的默认行为。
像这样:
FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
Run Code Online (Sandbox Code Playgroud)
小智 11
此答案假定您正在使用 FragmentStatePagerAdapter
在androidx.fragment(从 1.1.0+ 开始)的新版本上,Fragment.setUserVisibleHint如果您FragmentStatePagerAdapter使用由BEHAVIOR_SET_USER_VISIBLE_HINT.
如果你已经构造了你的FragmentStatePagerAdapter并且通过了BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT,那么Fragment.setUserVisibleHint就不会再调用里面了FragmentStatePagerAdapter.instantiateItem。
注意:Fragment.getUserVisibleHint如果您在 中指定BEHAVIOR_SET_USER_VISIBLE_HINT,您仍然可以调用 deprecated FragmentStatePagerAdapter,但请注意,true即使Fragment.isResumed()将返回 false ,它也会返回。
该androidx项目是开源的。通过查看master上的最新代码,可以看到里面if已经添加了一个:https : //android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/fragment/fragment/ src/main/java/androidx/fragment/app/FragmentStatePagerAdapter.java#195setUserVisibleHintinstantiateItem
1.0.x:
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
Run Code Online (Sandbox Code Playgroud)
1.1.0+:
fragment.setMenuVisibility(false);
if (mBehavior == BEHAVIOR_SET_USER_VISIBLE_HINT) {
fragment.setUserVisibleHint(false);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |