如何找到具有视图绑定的 navcontroller?

How to find navcontroller with view binding?

我正在我的应用程序中使用视图绑定。 但现在我面临着寻找具有视图绑定的 navcontroller 的问题。

如果我使用传统方式设置内容视图和布局,我可以通过这段代码轻松找到 navcontroller。

Navigation.findNavController(this, R.id.nav_host_fragment)

但是,如果我使用视图绑定来设置内容视图,我该如何找到 navcontroller,因为上面的代码需要 navHostFragment 的 ID,但如果我给出 binding.navHostFragment

,则视图弯曲 returns 片段

ViewBinding,顾名思义,是用来绑定视图而不是绑定资源标识符.

ViewBinding 以简单的形式为您提供什么,您不再需要 findViewById(view_id);相反,它提供 binding.myView.. 两种情况 returns 视图。

但是在 NavController 上下文中,您不必获取视图(而是资源 ID),因此视图绑定不会给您带来好处(同样因为它绑定的是视图而不是 ID)。

因此,您将不得不使用相同的代码来获取 NavController:

Navigation.findNavController(this, R.id.nav_host_fragment)

首先你必须使用 FragmentContainerView 而不是 fragment 不要忘记使用相同的名称属性,仅此而已!现在您可以在绑定元素中找到它

例如,您必须更改此设置:

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

进入这个:

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