विकल्पों की मदद से नेविगेट करें

जब 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 इंस्टेंस.