web-dev-qa-db-fra.com

Comment démarrer une deuxième activité avec la navigation dans Jetpack

Vous savez que c'est officiel maintenant: Google recommande officiellement l'architecture d'applications à activité unique. Mais il y a une difficulté ici. Nous avons toutes les activités multiples. Donc, quand je veux mettre en œuvre la navigation avec plusieurs activités, mais j'ai échoué.

Ils ont déclaré: Dans les cas où plusieurs activités partagent la même présentation, les graphiques de navigation peuvent être combinés, ce qui remplace les appels de navigation vers la destination de l'activité pour permettre aux appels de naviguer directement entre les deux graphiques de navigation. ici

Alors je crée ceci:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
app:startDestination="@+id/nav_graph_firstActvity">

<activity
    Android:id="@+id/nav_graph_firstActvity"
    Android:name="io.androidedu.FirstActivity"
    Android:label="First Activity">

    <action
        Android:id="@+id/nav_graph_actFirstActvity"
        app:destination="@id/nav_graph_secondActvity" />
</activity>

<activity
    Android:id="@+id/nav_graph_secondActvity"
    Android:name="io.androidedu.SecondActivity"
    Android:label="Second Activity" />

Après cela, je ne trouve aucun échantillon pour plusieurs activités ici. Il y a des exemples comme ça:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

Mais findNavController () attend une vue, pas une activité. 

Comment puis-je résoudre ce problème? 

5
AndroidEduIO

La navigation est destinée à aider la navigation sur les fragments, comme ils le mentionnent dans la note en bleu ici

Remarque: le composant d'architecture de navigation est conçu pour les applications ayant une activité principale avec plusieurs destinations de fragments. L'activité principale “héberge” le graphe de navigation. Dans une application comportant plusieurs destinations d'activité, chaque activité supplémentaire héberge son propre graphe de navigation. La modification d'une activité dans la navigation hôte est décrite plus loin dans ce document.

Vous pouvez donc utiliser une activité comme destination dans votre nav_graph1.xml et cette activité (la destination) doit avoir son propre nav_graph2.xml . De cette façon, vous continuez à utiliser la navigation pour parcourir votre app.

Il est vrai que la documentation google que vous mentionnez lorsque vous utilisez plusieurs activités partageant la même présentation est un peu déroutante. Mais je pense que ce qu'ils veulent dire, c'est que vous pouvez fusionner les activités Activity1 avec Fragment1 (nav_graph1.xml) et Activity2 avec Fragment2 (nav_graph2.xml), dans Activity3 avec (Fragment1 et Fragment2) car elles partagent la même présentation. .xml pointant vers nav_graph2.xml 

J'espère que ça aide

Mettre à jour: 

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

La vue peut être n'importe quelle vue à l'intérieur de la présentation qui contient le NavHostFragment. Il recherchera le fichier nav_graph.xml correspondant à cette vue ou à tous ses parents.

2
egonzal

Ne mettez pas plusieurs activités dans un seul fichier XML de navigation. La navigation est destinée à résoudre la navigation en cours d'activité, ce qui signifie qu'elle ne prend en charge que les fragments de manière élégante. Pour commencer une autre activité, il suffit de le faire à l'ancienne, comme context.startActivity(intent). Vous pouvez trouver plus de détails dans cet exemple Google: 

https://github.com/googlesamples/Android-sunflower

0
rafid059