如何找到具有视图绑定的 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"
/>
我正在我的应用程序中使用视图绑定。 但现在我面临着寻找具有视图绑定的 navcontroller 的问题。
如果我使用传统方式设置内容视图和布局,我可以通过这段代码轻松找到 navcontroller。
Navigation.findNavController(this, R.id.nav_host_fragment)
但是,如果我使用视图绑定来设置内容视图,我该如何找到 navcontroller,因为上面的代码需要 navHostFragment 的 ID,但如果我给出 binding.navHostFragment
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"
/>