Diese Geschichte ist fĂŒr diejenigen gedacht, die die Navigationskomponente noch nicht kennen. Hier werden wir die Hauptelemente der Bibliothek durchgehen und sehen, wie alles aussieht.
Sie befinden sich jetzt im ersten Teil eines groĂen Artikels ĂŒber Navigationskomponenten in einem Projekt mit mehreren Modulen. Wenn Sie bereits mit den Grundlagen vertraut sind, empfehle ich, weiter zu den Teilen zu gehen:
Wie das Safe Args Plugin funktioniert und was es tut .
Arbeiten mit der Navigationskomponente in einem Projekt mit mehreren Modulen mit SafeArgs .
Lösung fĂŒr die iOS-Ă€hnliche Multistack-Navigation
TL; DR .:
Um die Navigation in der Anwendung mithilfe der Navigationskomponente zu organisieren, benötigen Sie:
Erstellen Sie ein Diagramm.
FĂŒgen Sie Bildschirme hinzu;
ĂbergĂ€nge zwischen ihnen hinzufĂŒgen;
FĂŒgen Sie bei Bedarf verschachtelte Diagramme hinzu.
Das ganze Chaos in NavHost stecken;
Geben Sie ĂbergĂ€nge im Code an.
Grundlegende Navigationskomponenten
1. Das Navigationsdiagramm ist die grundlegende Navigationseinheit. Es ist ein Diagramm, in dem Scheitelpunkte Bildschirme und Kanten ĂbergĂ€nge zwischen ihnen sind. Das Diagramm wird in einer separaten XML-Datei im Ordner res / navigation erstellt. Um den navController nicht irrezufĂŒhren, mĂŒssen Sie seinen Startpunkt im Diagramm angeben (startDestination).
2. Das Ziel reprÀsentiert die UI-Einheit im Diagramm (Fragment / AktivitÀt / 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- .
ĂbergĂ€nge zwischen Bildschirmen
ĂbergĂ€nge zwischen Bildschirmen können ĂŒber Action oder DeepLink erfolgen.
Ăbergang mit Aktion
Wie es aussieht:
<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â>
Aufruf des Ăbergangs:
navController.navigate( R.id.action_to_user_details, Bundle().apply {putString(USER_ID, userId)} )
Argumente am "anderen Ende" erhalten:
private val userID by lazy {
arguments!![USER_ID]
}
Navigieren mit Deep Link
Wie es aussieht:
<deepLink
app:uri=âapp://customUri?parameter={parameterName}â
/>
Aufruf des Ăbergangs:
navController.navigate(
Uri.parse(âapp://customUri?parameter=$reasonâ)
)
Argumente am "anderen Ende" erhalten:
private val refundId by lazy {
arguments?.getString(âparameterâ, null)
}
Das ist alles! Einfach und unkompliziert genug - das ĂŒberzeugt die Navigationskomponente. Lassen Sie uns nun untersuchen, wie das Safe Args-Plugin funktioniert und was es tut, und uns mit der Navigationskomponente in einem Multimodulprojekt mit SafeArgs und iOS-Ă€hnlicher Multistack-Navigation befassen .