在androidx.fragment.app.Fragment中,setUserVisibleHint()被Deprecated,并且没有被执行,为什么?

新手上路,请多包涵
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
        isVisible = true;
        onVisible();
    } else {
        isVisible = false;
        onInVisible();
    }
}

我发现这部分代码没有执行。

原文由 limengxin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

他们只是更改了 Fragments 中的 API。

如果您使用此方法来限制片段生命周期:

您现在可以通过在 FragmentTransaction 上调用 setMaxLifecycle() 来为 Fragment 设置最大生命周期状态。这取代了现已弃用的 setUserVisibleHint()。

资料来源: https ://developer.android.com/jetpack/androidx/releases/fragment#1.1.0-alpha07。

如果您需要此方法,因为您尝试检测哪个片段当前在 ViewPager 中可见。您现在可以只使用 onResumeonPause 方法,但在此之前,您应该更改 FragmentPagerAdapter 构造函数中的默认行为。

像这样:

 FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

编辑:因为 FragmentPagerAdapter 也已弃用,所以现在最好使用 ViewPager2 。在 ViewPager2 的情况下,这是默认行为,我们可以使用 onResumeonPause 方法来了解当前可见的片段。

原文由 lukjar 发布,翻译遵循 CC BY-SA 4.0 许可协议

现在 AndroidX 方法 setUserVisibleHint(boolean isVisibleToUser) 已弃用,如果您查看文档,它说:

您现在可以通过在 FragmentTransaction setMaxLifecycle() 为片段设置最大 Lifecycle 状态。这取代了现已弃用的 setUserVisibleHint()FragmentPagerAdapterFragmentStatePagerAdapter 有一个新的构造函数,允许您切换到新的行为。

所以基本上当你在 FragmentTransaction 中使用这种方法时:

 .getSupportFragmentManager()
            .beginTransaction()
            .setMaxLifecycle(fragment, Lifecycle.State.STARTED);

相当于 setUserVisibleHint(false) 和:

 .getSupportFragmentManager()
            .beginTransaction()
            .setMaxLifecycle(fragment, Lifecycle.State.RESUMED);

相当于: setUserVisibleHint(true)

原文由 Yupi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏