问题
I've got two navigation graphs nav_graph_red
and nav_graph_blue
and two Activities ActivityRed
and ActivityBlue
.
In each navigation graph I have a flow with 3 Fragments. redFragmentOne
,redFragmentTwo
,redFragmentThree
and blueFragmentOne
,blueFragmentTwo
,blueFragmentThree
Now I want to navigate from ActivityRed
- redFragmentOne
to the destination blueFragmentTwo
.
Is there a way to accomplish this?
I tried it this way:
Navigation.findNavController(ActivityBlue.newInstance(),R.id.host_navigation).navigate(R.id.blueFragmentTwo)
Any suggestions?
回答1:
Solution:
Start Activity with intent and pass your destination as Intent extra
.
val blueIntent = Intent(requireActivity(), ActivityBlue::class.java)
blueIntent.putExtra("navigationStartDestination", R.id.blueFragmentTwo)
startActivity(blueIntent)
In ActivityBlue
onCreate
-> get the intent extra
and define navigation graph
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
Important!:
Remove navGraph="nav_graph_blue"
in your layout xml of the ActivityBlue
<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" />
来源:https://stackoverflow.com/questions/57924345/android-navigation-component-navigate-between-graphs