在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的片段设置回栈,每个片段都有自己的回栈,只有当它们在每个片段上都被按下后才可见