在androidx.fragment.app.fragment,;setUserVisibleHint();已弃用,;而不是执行,为什么?;
我发现这部分代码没有执行。现在在在androidx.fragment.app.fragment,;setUserVisibleHint();已弃用,;而不是执行,为什么?;,android,androidx,Android,Androidx,我发现这部分代码没有执行。现在在AndroidX方法setUserVisibleHint(布尔isVisibleToUser)中不推荐使用,如果您查看文档,它会说: 现在,您可以通过调用 setMaxLifecycle()在FragmentTransaction上。这取代了现在的模式 已弃用setUserVisibleHint()碎片页面编辑器和 FragmentStatePagerAdapter有一个新的构造函数,允许您 切换到新的行为 因此,基本上,当您在片段事务中使用此方法时: @Over
AndroidX
方法setUserVisibleHint(布尔isVisibleToUser)
中不推荐使用,如果您查看文档,它会说:
现在,您可以通过调用
setMaxLifecycle()
在FragmentTransaction
上。这取代了现在的模式
已弃用setUserVisibleHint()
<代码>碎片页面编辑器和
FragmentStatePagerAdapter
有一个新的构造函数,允许您
切换到新的行为
因此,基本上,当您在片段事务中使用此方法时:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInVisible();
}
}
相当于setUserVisibleHint(false)
和:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
这相当于:setUserVisibleHint(true)
现在在AndroidX
方法中setUserVisibleHint(boolean isVisibleToUser)
已被弃用,如果您查看文档,它会说:
现在,您可以通过调用
setMaxLifecycle()
在FragmentTransaction
上。这取代了现在的模式
已弃用setUserVisibleHint()
<代码>碎片页面编辑器
和
FragmentStatePagerAdapter
有一个新的构造函数,允许您
切换到新的行为
因此,基本上,当您在片段事务中使用此方法时:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInVisible();
}
}
相当于setUserVisibleHint(false)
和:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
这相当于:setUserVisibleHint(true)
他们只是在片段中更改了API
如果使用此方法限制碎片生命周期:
现在可以通过调用
在碎片事务上设置MaxLifecycle()。这取代了现在的模式
不推荐使用的setUserVisibleHint()
来源:
如果您因为试图检测当前在ViewPager
中可见的片段而需要此方法。您现在只需使用onResume
和onPause
方法,但在此之前,您应该更改FragmentPagerAdapter
构造函数中的默认行为
像这样:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
他们只是在片段中更改了API
如果使用此方法限制碎片生命周期:
现在可以通过调用
在碎片事务上设置MaxLifecycle()。这取代了现在的模式
不推荐使用的setUserVisibleHint()
来源:
如果您因为试图检测当前在ViewPager
中可见的片段而需要此方法。您现在只需使用onResume
和onPause
方法,但在此之前,您应该更改FragmentPagerAdapter
构造函数中的默认行为
像这样:
.getSupportFragmentManager()
.beginTransaction()
.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
此答案假设您使用的是FragmentStatePagerAdapter
在新版的androidx.fragment
(1.1.0+)上,如果fragment.setUserVisibleHint
使用的是FragmentStatePagerAdapter
所指定的旧行为,则仍将调用fragment.setUserVisibleHint
如果您已经构建了FragmentStatePagerAdapter
并通过了行为\u RESUME\u ONLY\u CURRENT\u FRAGMENT
,那么FRAGMENT.setUserVisibleHint
将不再在FragmentStatePagerAdapter.InstanceItem中调用
注意:如果您在FragmentStatePagerAdapter
中指定了行为\u RESUME\u ONLY\u CURRENT\u片段
,您仍然可以调用不推荐使用的片段。getUserVisibleHint
,但请注意,它将返回true
,即使片段.isResumed()
将返回false
androidx
项目是开源的。通过查看master上的最新代码,您可以看到在setUserVisibleHint
内部实例化项中添加了if
:
TL;医生:
1.0.x:
FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
1.1.0+:
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
此答案假设您使用的是FragmentStatePagerAdapter
在新版的androidx.fragment
(1.1.0+)上,如果fragment.setUserVisibleHint
使用的是FragmentStatePagerAdapter
所指定的旧行为,则仍将调用fragment.setUserVisibleHint
如果您已经构建了FragmentStatePagerAdapter
并通过了行为\u RESUME\u ONLY\u CURRENT\u FRAGMENT
,那么FRAGMENT.setUserVisibleHint
将不再在FragmentStatePagerAdapter.InstanceItem中调用
注意:如果您在FragmentStatePagerAdapter
中指定了行为\u RESUME\u ONLY\u CURRENT\u片段
,您仍然可以调用不推荐使用的片段。getUserVisibleHint
,但请注意,它将返回true
,即使片段.isResumed()
将返回false
androidx
项目是开源的。通过查看master上的最新代码,您可以看到在setUserVisibleHint
内部实例化项中添加了if
:
TL;医生:
1.0.x:
FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
1.1.0+:
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
如果您使用的是FragmentStateAdapter
,则应使用registerFragmentTransactionCallback
方法检查片段与ViewPager2
交互的生命周期
我需要将ViewPager2的后堆栈作为我的备份,并且实现非常简单
fragment.setMenuVisibility(false);
if (mBehavior == BEHAVIOR_SET_USER_VISIBLE_HINT) {
fragment.setUserVisibleHint(false);
}
我的问题是为ViewPager2的片段设置回栈,每个片段都有自己的回栈,只有当它们在每个片段上都被按下后才可见