J'ai suivi la documentation de composant d'architecture de navigation pour comprendre le fonctionnement de ce nouveau système de navigation.
Pour passer d’un écran à l’autre, vous avez besoin d’un composant qui implémente l’interface NavHost
.
Le NavHost est une vue vide dans laquelle les destinations sont échangées à mesure qu'un utilisateur navigue dans votre application.
Mais, il semble que pour le moment, seuls les fragments implémentent NavHost
L’implémentation NavHost par défaut du composant Architecture de navigation est NavHostFragment.
Donc, mes questions sont:
Même si j’ai un écran très simple qui peut être implémenté avec un Activity
, pour pouvoir utiliser ce nouveau système de navigation, un Fragment
doit être hébergé avec la vue réelle?
Est-ce que Activity
implémentera NavHost
une interface dans un futur proche?
- MIS À JOUR -
D'après la réponse de ianhanniballake, je comprends que chaque activité contient son propre graphe de navigation. Mais si je veux passer d'une activité à une autre en utilisant le composant nav (en remplaçant "old" startActivity
call), je peux utiliser activity destinations
. Quel est activity destinations
n'est pas clair pour moi parce que les docs pour la migration n'entrent pas dans les détails:
Des activités distinctes peuvent ensuite être liées en ajoutant des destinations d'activité au graphique de navigation, en remplaçant les utilisations existantes de startActivity () dans l'ensemble de la base de code.
ActivityNavigator
au lieu de startActivity
?J'ai réussi à naviguer d'une activité à l'autre sans héberger un fragment en utilisant ActivityNavigator
.
ActivityNavigator(this)
.createDestination()
.setIntent(Intent(this, SecondActivity::class.Java))
.navigate(null, null)
Le graphique de navigation n'existe que dans une seule activité. Selon le Guide de migration vers la navigation , <activity>
destinations peuvent être utilisées pour démarrer une activité à partir du graphe de navigation, mais une fois cette deuxième activité démarrée, elle est totalement séparée du graphe de navigation d'origine (il peut s'agir de son propre graphe ou simplement d'une simple activité).
Vous pouvez ajouter une destination d'activité à votre graphique de navigation via l'éditeur visuel (en appuyant sur le bouton + puis en sélectionnant une activité dans votre projet) ou en ajoutant manuellement le code XML:
<activity
Android:id="@+id/secondActivity"
Android:name="com.example.SecondActivity" />
Ensuite, vous pouvez naviguer vers cette activité (c'est-à-dire, commencer l'activité) en l'utilisant comme n'importe quelle autre destination:
Navigation.findNavController(view).navigate(R.id.secondActivity);