Android 导航架构组件 - 获取当前可见片段

新手上路,请多包涵

在尝试导航组件之前,我曾经手动执行片段事务并使用片段标签来获取当前片段。

val fragment:MyFragment = supportFragmentManager.findFragmentByTag(tag):MyFragment

现在在我的主要活动布局中,我有类似的东西:

 <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nav_host"
        app:navGraph= "@navigation/nav_item"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:defaultNavHost= "true"
        />

如何通过导航组件检索当前显示的片段?正在做

supportFragmentManager.findFragmentById(R.id.nav_host)

返回一个 NavHostFragment 我想检索我显示的“MyFragment”。

谢谢你。

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

阅读 454
2 个回答

我现在设法找到了一种方法,如下所示:

 NavHostFragment navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host);
navHostFragment.getChildFragmentManager().getFragments().get(0);

如果您当然知道这是第一个片段。我仍在研究没有这个的方法。我同意这不是最好的方法,但现在应该是这样。

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

用于在导航图中获取当前活动片段的 Kotlin 版本代码

fun getCurrentFragmentInstance(activity: HomeActivity): Fragment? {
    val navHostFragment =
        activity.supportFragmentManager.primaryNavigationFragment as NavHostFragment?
    val fragmentManager: FragmentManager = navHostFragment!!.childFragmentManager
    return fragmentManager.primaryNavigationFragment
}

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

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