59 votes

Composante Architecture de navigation - Activités

J'ai suivi la doc de la Navigation de l'Architecture de Composants de comprendre comment ce nouveau système de navigation fonctionne.

Aller/retour à partir d'un écran à l'autre, vous avez besoin d'un composant qui implémente NavHost interface.

Le NavHost est une vue vide, après quoi les destinations sont inversés et comme un utilisateur navigue à travers votre application.

Mais, il semble qu'actuellement seuls des Fragments de mettre en oeuvre NavHost

La Navigation de l'Architecture du Composant par défaut NavHost mise en œuvre est NavHostFragment.

Donc, mes questions sont les suivantes:

  • Même si j'ai un écran simple qui peut être mis en œuvre avec un Activity, afin de travailler avec ce nouveau système de navigation, un Fragment doit être accueilli contenant de l'opinion?

  • Va Activity œuvre NavHost interface dans un futur proche?

--Mise à JOUR--

Basé sur ianhanniballake réponse, je comprends que chaque activité contient sa propre navigation graphique. Mais si je veux aller d'une activité à une autre en utilisant la valeur liquidative de la composante (en remplacement de "vieux" startActivity appel), je peux utiliser activity destinations. Qu'est - activity destinations n'est pas clair pour moi, car les docs pour la migration de ne pas aller dans le détail:

Séparer les Activités peuvent être reliées par l'ajout de l'activité des destinations à la navigation graphique pour remplacer les usages de startActivity() dans le code de base.

  • Est-il un avantage sur l'utilisation de l' ActivityNavigator au lieu de startActivity?
  • Quelle est la bonne façon de passer d'activités lors de l'utilisation de la valeur liquidative composant?

67voto

ianhanniballake Points 18370

La navigation graphique n'existe que dans une seule activité. Comme par le Migrer vers le guide de Navigation, <activity> destinations peut être utilisé pour démarrer une Activité au sein de la navigation graphique, mais une fois que la deuxième activité est commencé, il est totalement distinct de la navigation d'origine graphique (il pourrait avoir son propre graphique ou tout simplement être une activité simple).

Vous pouvez ajouter une Activité de destination de votre navigation graphique via l'éditeur visuel (en appuyant sur le bouton+, puis sélectionnez une activité dans votre projet) ou en ajoutant manuellement le XML:

<activity
    android:id="@+id/secondActivity"
    android:name="com.example.SecondActivity" />

Ensuite, vous pouvez accéder à cette activité (p. ex., début de l'activité) en utilisant comme toute autre destination:

Navigation.findNavController(view).navigate(R.id.secondActivity);

13voto

Víctor Albertos Points 1719

J'ai réussi à naviguer d'une activité à une autre sans héberger un fragment en utilisant ActivityNavigator .

 ActivityNavigator(this)
                    .createDestination()
                    .setIntent(Intent(this, SecondActivity::class.java))
                    .navigate(null, null)
 

5voto

Karthik Pugal Points 171

J'ai également réussi à naviguer d'une activité à une autre sans héberger un fragment en utilisant ActivityNavigator.

Kotlin:

 val activityNavigator = ActivityNavigator( context!!)
                activityNavigator.navigate(
                    activityNavigator.createDestination().setIntent(
                        Intent(
                            context!!,
                            SecondActivity::class.java
                        )
                    ), null, null, null
                )
 

Java:

 ActivityNavigator activityNavigator = new ActivityNavigator(this);
activityNavigator.navigate(activityNavigator.createDestination().setIntent(new Intent(this, SecondActivity.class)), null, null, null);
 

nav_graph.xml

 <fragment android:id="@+id/fragment"
        android:name="com.codingwithmitch.navigationcomponentsexample.SampleFragment"
        android:label="fragment_sample"
        tools:layout="@layout/fragment_sample">

    <action
            android:id="@+id/action_confirmationFragment_to_secondActivity"
            app:destination="@id/secondActivity" />

</fragment>
<activity
        android:id="@+id/secondActivity"
        android:name="com.codingwithmitch.navigationcomponentsexample.SecondActivity"
        android:label="activity_second"
        tools:layout="@layout/activity_second" />
 

Kotlin:

 lateinit var navController: NavController
navController = Navigation.findNavController(view)
navController!!.navigate(R.id.action_confirmationFragment_to_secondActivity)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X