Cette histoire s'adresse à ceux qui ne connaissent toujours pas le composant de navigation. Ici, nous allons passer en revue les principaux éléments de la bibliothÚque et voir à quoi tout cela ressemble.
Vous ĂȘtes maintenant dans la premiĂšre partie d'un grand article sur le composant de navigation dans un projet multi-module. Si vous connaissez dĂ©jĂ les bases, je vous recommande d'aller plus loin dans les parties:
Comment fonctionne le plugin Safe Args et ce qu'il fait .
Utilisation du composant de navigation dans un projet multi-module avec SafeArgs .
Solution pour la navigation multipiste de type iOS
TL; DR.:
Pour organiser la navigation dans l'application Ă l'aide du composant de navigation, vous avez besoin:
Créez un graphique;
Ajoutez-y des écrans;
Ajoutez des transitions entre eux;
Ajoutez des graphiques imbriqués si nécessaire;
Mettre tout ce désordre dans NavHost;
Indiquez les transitions dans le code.
Composants de navigation de base
1. Le graphique de navigation est l'unitĂ© fondamentale de navigation. C'est un graphe dans lequel les sommets sont des Ă©crans et les arĂȘtes sont des transitions entre eux. Le graphique est créé dans un fichier xml sĂ©parĂ© dans le dossier res / navigation. Afin de ne pas induire en erreur le navController, vous devez spĂ©cifier son point de dĂ©part dans le graphe (startDestination)
2. La destination représente l'unité d'interface utilisateur sur le graphique (Fragment / Activity / Dialog / NestedGraph).
3. Action destination- . ( ), ( , ).
4. Nested Graphâââ . , <include>.
5. NavHostâââ, . , NavHostFragment, . :
<androidx.fragment.app.FragmentContainerView
android:id="@+id/navHost"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_main" />
6. NavControllerâââ, . . NavControllerâââ , , , , , shared- .
Transitions entre les écrans
Les transitions entre les Ă©crans peuvent ĂȘtre effectuĂ©es via Action ou via DeepLink.
Transition avec action
Ă quoi il ressemble:
<action
android:id=â@+id/action_to_user_detailsâ
app:destination=â@id/userDetailsFragmentâ
app:enterAnim=â@anim/add_fragment_animationâ
app:exitAnim=â@anim/pop_fragment_animationâ
app:popEnterAnim=â@anim/pop_enter_animationâ
app:popExitAnim=â@anim/pop_exit_animationâ>
Appel de la transition:
navController.navigate( R.id.action_to_user_details, Bundle().apply {putString(USER_ID, userId)} )
Obtenir des arguments à «l'autre extrémité»:
private val userID by lazy {
arguments!![USER_ID]
}
Naviguer avec un lien profond
Ă quoi il ressemble:
<deepLink
app:uri=âapp://customUri?parameter={parameterName}â
/>
Appel de la transition:
navController.navigate(
Uri.parse(âapp://customUri?parameter=$reasonâ)
)
Obtenir des arguments à «l'autre extrémité»:
private val refundId by lazy {
arguments?.getString(âparameterâ, null)
}
C'est tout! C'est assez simple et direct - c'est ce que le composant de navigation gagne. Voyons maintenant comment fonctionne le plug-in Safe Args et ce qu'il fait et commençons à travailler avec le composant de navigation dans un projet multi-module avec SafeArgs et la navigation multipiste de type iOS .