Android 导航组件在图表之间导航
Android Navigation Component navigate between graphs
我有两个导航图 nav_graph_red
和 nav_graph_blue
以及两个活动 ActivityRed
和 ActivityBlue
。
在每个导航图中,我都有一个包含 3 个片段的流程。 redFragmentOne
、redFragmentTwo
、redFragmentThree
和 blueFragmentOne
、blueFragmentTwo
、blueFragmentThree
现在我想从 ActivityRed
- redFragmentOne
导航到目的地 blueFragmentTwo
。
有办法做到这一点吗?
我这样试过:
Navigation.findNavController(ActivityBlue.newInstance(),R.id.host_navigation).navigate(R.id.blueFragmentTwo)
有什么建议吗?
解法:
带着意图开始 Activity 并将您的目的地作为 Intent extra
。
val blueIntent = Intent(requireActivity(), ActivityBlue::class.java)
blueIntent.putExtra("navigationStartDestination", R.id.blueFragmentTwo)
startActivity(blueIntent)
在ActivityBlue
onCreate
-> 获取intent extra
并定义导航图
val startDestination = intent.getIntExtra("navigationStartDestination", 0)
val navHostFragment = nav_host_fragment_blue as NavHostFragment
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_graph_blue)
graph.startDestination = startDestination
navHostFragment.navController.graph = graph
重要!:
删除 ActivityBlue
的布局 xml 中的 navGraph="nav_graph_blue"
<fragment
android:id="@+id/nav_host_fragment_blue"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintTop_toTopOf="parent" />
我有两个导航图 nav_graph_red
和 nav_graph_blue
以及两个活动 ActivityRed
和 ActivityBlue
。
在每个导航图中,我都有一个包含 3 个片段的流程。 redFragmentOne
、redFragmentTwo
、redFragmentThree
和 blueFragmentOne
、blueFragmentTwo
、blueFragmentThree
现在我想从 ActivityRed
- redFragmentOne
导航到目的地 blueFragmentTwo
。
有办法做到这一点吗?
我这样试过:
Navigation.findNavController(ActivityBlue.newInstance(),R.id.host_navigation).navigate(R.id.blueFragmentTwo)
有什么建议吗?
解法:
带着意图开始 Activity 并将您的目的地作为 Intent extra
。
val blueIntent = Intent(requireActivity(), ActivityBlue::class.java)
blueIntent.putExtra("navigationStartDestination", R.id.blueFragmentTwo)
startActivity(blueIntent)
在ActivityBlue
onCreate
-> 获取intent extra
并定义导航图
val startDestination = intent.getIntExtra("navigationStartDestination", 0)
val navHostFragment = nav_host_fragment_blue as NavHostFragment
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_graph_blue)
graph.startDestination = startDestination
navHostFragment.navController.graph = graph
重要!:
删除 ActivityBlue
navGraph="nav_graph_blue"
<fragment
android:id="@+id/nav_host_fragment_blue"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintTop_toTopOf="parent" />