我对NavController
有疑问:
有计划(对我的画很抱歉,希望对您有帮助:D)
我有MainActivity
和BottomNavigationView
,带有3个标签: A,B,C 。
当我点击A
时,它将打开Fragment A1
,还有next button
会打开Fragment A2
。
在Fragment A2
中有按钮back
,next
,此处的导航没有问题。
问题是,当我需要从Fragment A2
导航到section B
时,就像单击B
中的BottomNavigationView
一样。
问题在于它是不同的图形,如何切换它们?
我的想法:
我找到了解决方法:requireActivity().bottomBar.selectedItemId = R.id.graph_b
,但这不是一个好主意。
我想使用navigation component
实现它。我试图做findNavController().navigate(R.id.graph_b)
,但是会导致崩溃:
java.lang.IllegalArgumentException:导航目标 NavController未知com.my.app.staging:id / graph_b
如何使用NavController
进行制作?
有一个具有所有架构的Google Example项目: https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample
为简化我的问题,我在此项目中添加了一个按钮,单击时应打开另一个屏幕:
答案 0 :(得分:0)
您的图表是在“家长活动”中定义的,这就是您可以控制它们的地方。
您的第一种方法实际上是解决方案。您的活动中定义了图。当您位于图A内的任何目标位置(例如A1,A2等)时,他们都不了解其他图B和C。到达图的唯一方法是通过父项活动,因此
requireActivity().bottomBar.selectedItemId = R.id.graph_b
您尝试过的第二种方法肯定不会起作用,因为嵌套导航时会使用findNavController().navigate(R.id.graph_b)
。换句话说,graph_b
应该放在graph_a
内,这不是您的情况。
话虽如此,你可以做的就是写
requireActivity().bottomBar.selectedItemId = R.id.graph_b
鸽友。与其在片段内部运行,不如在活动内部运行。
// In your fragment
requireActivity?.moveToGraphB()
// and in your activity
fun moveToGraphB() {
bottomBar.selectedItemId = R.id.graph_b
}
或者更多的爱好者会使用SharedViewModel
,我认为这不是必需的。
答案 1 :(得分:0)
在图B中,您可以添加线
其中nav_graphA是单击按钮时要导航到的图形的名称。然后您可以添加
` <fragment
android:id="@+id/aboutFragment"
android:name="com.mycompany.aboutFragment"
tools:layout="@layout/fragment_about"
android:label="About" >
<action
android:id="@+id/action_aboutFragment_to_nav_graphA"
app:destination="@id/nav_graphA" />
</fragment>
`
创建单击按钮时进行导航的操作。