जब Kotlin DSL का इस्तेमाल करके नेविगेशन ग्राफ़ में कोई कार्रवाई तय की जाती है,
नेविगेशन एक संबंधित NavAction
क्लास जनरेट करता है, जिसमें
उस कार्रवाई के लिए तय किए गए कॉन्फ़िगरेशन जिनमें ये शामिल हैं:
- डेस्टिनेशन: टारगेट किए गए डेस्टिनेशन का संसाधन आईडी.
- डिफ़ॉल्ट आर्ग्युमेंट: डिफ़ॉल्ट वैल्यू वाला
android.os.Bundle
टारगेट डेस्टिनेशन के लिए, अगर सप्लाई की गई हो. - नेविगेशन विकल्प: नेविगेशन के विकल्प, इस तरह दिखते हैं
NavOptions
. इस श्रेणी में ऐनिमेशन सहित टारगेट डेस्टिनेशन पर आने और उससे वापस आने पर संसाधन कॉन्फ़िगरेशन, पॉप व्यवहार, और डेस्टिनेशन को सिंगल टॉप मोड में लॉन्च किया गया.
'लिखें' सुविधा के साथ विकल्प
डिफ़ॉल्ट रूप से, navigate()
आपके नए डेस्टिनेशन को पिछली गतिविधियों में जोड़ता है. आप
नेविगेशन के और भी विकल्प पास करके, navigate()
के व्यवहार में बदलाव करें
आपका navigate()
कॉल.
सिंपल लैम्डा का इस्तेमाल करके, NavOptions
का इंस्टेंस बनाया जा सकता है. पास करें
navigate()
वे आर्ग्युमेंट जिन्हें आप आम तौर पर
NavOptions.Builder
. ये उदाहरण देखें:
विकल्पों को पास करने के तरीकों के उदाहरण देखने के लिए, बैक स्टैक गाइड पढ़ें
navigate()
तक.
एक्सएमएल वाले विकल्प
नीचे एक कार्रवाई के साथ दो स्क्रीन वाला एक उदाहरण ग्राफ़ दिया गया है एक से दूसरे पर जाने के लिए:
<?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
का मतलब है कि यहां से नेविगेट किया जा रहा है
गंतव्य a
को b
गंतव्य. इसमें ऐनिमेशन के साथ-साथ, ऐनिमेशन भी शामिल होते हैं
popTo
व्यवहार, जो बैकस्टैक से सभी डेस्टिनेशन हटा देता है. ये सभी
सेटिंग, NavOptions
के तौर पर कैप्चर की जाती हैं और NavAction
से अटैच की जाती हैं.
इस NavAction
को फ़ॉलो करने के लिए, NavController.navigate()
का इस्तेमाल करें. इसके लिए, यह आईडी दें
कार्रवाई, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
navController.navigate(R.id.action_b_to_a)
प्रोग्राम के हिसाब से विकल्प को लागू करना
पिछले उदाहरणों में, नेविगेशन में NavOptions
के बारे में बताने का तरीका बताया गया है
ग्राफ़ एक्सएमएल. हालांकि, विशिष्ट विकल्प
बिल्ड के समय अज्ञात है. ऐसे मामलों में, 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
इंस्टेंस.