web-dev-qa-db-fra.com

Composant de navigation: passer des SafeArgs de l'activité à un fragment

J'ai deux graphiques, donc le premier graphique passe d'un fragment à une activité en passant safeArgs à l'activité.

val action = MyFragmentDirections.actionMyActivity(arg1, arg2)
Navigation.findNavController(view).navigate(action)  

Maintenant dans la seconde, je veux passer ces arguments de MyActivity à un fragment qui appartient à cette activité.

Je peux obtenir les arguments:

val args = MyActivity.fromBundle(intent.extras)

Le problème est qu'il n'y a pas de fichier Directions pour cette activité, donc je ne peux pas passer les arguments.

9

Navigation 1.0.0-alpha07 correction de la demande de fonctionnalité pour passer des arguments à la destination de départ d'un graphique.

Pour l'utiliser, vous devez:

  1. Supprimez l'attribut app:navGraph De votre NavHostFragment
  2. Appeler findNavController(R.id.your_nav_Host_fragment).setGraph(R.navigation.your_graph, intent.extras)

Utilisation du R.id De votre NavHostFragment et R.navigation Que vous aviez précédemment sur votre balise app:navGraph. En passant les arguments dans l'appel setGraph, votre destination de départ obtiendra directement les arguments, sans appeler à nouveau navigate (ce qui, par défaut, créerait une nouvelle instance de la destination sur votre pile arrière - pas ce que vous voulez).

2
ianhanniballake

Je ne sais pas si cela est recommandé, mais cela fonctionne:

val args = MyActivity.fromBundle(intent.extras)
navController.navigate(R.id.myActivityFragment, args.toBundle())
0