gpt4 book ai didi

android - 在另一个 fragment 中定义 NavHostFragment

转载 作者:行者123 更新时间:2023-12-03 14:08:48 25 4
gpt4 key购买 nike

我有一个 fragment ,我在其中定义了一个 NavHostFragment,如下所示:

<fragment
android:id="@+id/shipping_host_nav"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/shipping_nav_graph"
app:defaultNavHost="true"/>

当试图在 fragment 中调用 findNavController 方法时,它抛出了一个非法状态异常,并说我的 View 组没有 NavController。
    java.lang.IllegalStateException: View androidx.core.widget.NestedScrollView{1dd5506 VFED..... ......I. 0,0-0,0} does not have a NavController set

所以我的问题是: 我可以在另一个 fragment 中定义 NavHostFragment 吗?
还是只适合 Activity ?

我进行了很多搜索以找到我可以在另一个 fragment 中定义一个导航主机 fragment ,但我没有找到任何答案。

最佳答案

我找到了解决此异常的方法,当尝试在不是 NavHostFragment 或不在 NavHostFragment 的 fragment 中调用此方法时,findNavController() 会引发此异常,因此我在 fragment 中调用此方法犯了这个错误。
所以我必须自己使用导航类找到 Controller

Navigation.findNavController(activity, R.id.my_nav_host_fragment)

这是如何找到在 fragment 中定义的 NavHostFragment (NavController)


我为 Fragment 类做了一个扩展函数,所以我可以很容易地使用 id 找到导航 Controller
fun Fragment.getFragmentNavController(@IdRes id: Int) = activity?.let {
return@let Navigation.findNavController(it, id)
}

关于android - 在另一个 fragment 中定义 NavHostFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com