כשמגדירים פעולה בתרשים הניווט באמצעות Kotlin DSL,
הניווט יוצר מחלקה תואמת NavAction
, שמכילה את
ההגדרות האישיות של הפעולה, כולל:
- יעד: מזהה המשאב של יעד היעד.
- ארגומנטים שמוגדרים כברירת מחדל:
android.os.Bundle
שמכיל ערכי ברירת מחדל ליעד היעד, אם צוין. - אפשרויות ניווט: אפשרויות ניווט, שמיוצגות בתור
NavOptions
. המחלקה הזו מכילה את כל ההגדרות המיוחדות עבור מעבר ליעד היעד וחזרה ממנו, כולל אנימציה להגדרת המשאב, ההתנהגות של הפופ, ואם היעד צריך להיות הופעלה במצב עליון יחיד.
אפשרויות לכתיבה
כברירת מחדל, navigate()
מוסיפה את היעד החדש למקבץ האחורי. אפשר
ישנה את ההתנהגות של navigate()
על ידי העברת אפשרויות ניווט נוספות אל
שיחת navigate()
שלך.
אפשר ליצור מופע של NavOptions
באמצעות lambda פשוט. פחות בשבילי
navigate()
הארגומנטים שאחרת אפשר להעביר באופן מפורש
NavOptions.Builder
. מומלץ להביא בחשבון את הדוגמאות הבאות:
במדריך לערימה לאחור מופיעות דוגמאות להעברת אפשרויות
אל navigate()
בהקשר.
אפשרויות עם XML
הדוגמה הבאה היא תרשים שמורכב משני מסכים יחד עם פעולה כדי לנווט ביניהם:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/a">
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
android:label="a"
tools:layout="@layout/a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment android:id="@+id/b"
android:name="com.example.myapplication.FragmentB"
android:label="b"
tools:layout="@layout/b">
<action android:id="@+id/action_b_to_a"
app:destination="@id/a"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/a"
app:popUpToInclusive="true"/>
</fragment>
</navigation>
כשתרשים הניווט מתרחב, הפעולות האלה מנותחות
האובייקטים התואמים של NavAction
נוצרים עם ההגדרות האישיות שהוגדרו
בתרשים. לדוגמה, action_b_to_a
מוגדר כניווט מ-
יעד b
אל היעד a
. הפעולה כוללת אנימציות לצד
התנהגות של popTo
שמסירה את כל היעדים מהמקבץ האחורי. כל אלה
ההגדרות מתועדות בתור NavOptions
ומצורפות אל NavAction
.
כדי לעקוב אחר NavAction
, צריך להשתמש ב-NavController.navigate()
ולהעביר את המזהה של
את הפעולה, כפי שמוצג בדוגמה הבאה:
navController.navigate(R.id.action_b_to_a)
החלת אפשרויות באופן פרוגרמטי
הדוגמאות הקודמות מראות איך לציין את NavOptions
בסרגל הניווט
את ה-XML של התרשים. עם זאת, אפשרויות ספציפיות עשויות להשתנות בהתאם למגבלות
לא ידוע בזמן ה-build. במקרים כאלה, צריך ליצור ולהגדיר את NavOptions
באופן פרוגרמטי, כמו בדוגמה הבאה:
Kotlin
findNavController().navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
הדוגמה הזו משתמשת בצורה מורחבת של navigate()
ומכילה עוד
Bundle
ו-NavOptions
ארגומנטים. כל הווריאציות של navigate()
הוארך
גרסאות שמקבלות ארגומנט NavOptions
.
אפשר גם להחיל את NavOptions
באופן פרוגרמטי כשעוברים למצב משתמע
קישורי עומק:
Kotlin
findNavController().navigate(
deepLinkUri,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
deepLinkUri,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
הווריאנט הזה של navigate()
מקבל Uri
את ערך העומק המשתמע
וגם במופע NavOptions
.