web-dev-qa-db-fra.com

Composante d'architecture de navigation - Activités

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.

  • Y a-t-il un avantage à utiliser ActivityNavigator au lieu de startActivity?
  • Quelle est la bonne façon de passer des activités lorsque vous utilisez la composante nav?
24
Víctor Albertos

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)
3
Víctor Albertos

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);
27
ianhanniballake