বিকল্পগুলির সাথে নেভিগেট করুন

যখন আপনি 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 গন্তব্য b থেকে গন্তব্য a তে নেভিগেট হিসাবে সংজ্ঞায়িত করা হয়। অ্যাকশনটিতে popTo আচরণের সাথে অ্যানিমেশন অন্তর্ভুক্ত রয়েছে যা ব্যাকস্ট্যাক থেকে সমস্ত গন্তব্য সরিয়ে দেয়। এই সমস্ত সেটিংস NavOptions হিসাবে ক্যাপচার করা হয়েছে এবং NavAction এর সাথে সংযুক্ত করা হয়েছে৷

এই NavAction অনুসরণ করতে, NavController.navigate() ব্যবহার করুন, কর্মের আইডি পাস করে, নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    navController.navigate(R.id.action_b_to_a)

প্রোগ্রামগতভাবে বিকল্পগুলি প্রয়োগ করুন

পূর্ববর্তী উদাহরণগুলি দেখায় কিভাবে নেভিগেশন গ্রাফ XML-এর মধ্যে NavOptions নির্দিষ্ট করতে হয়। যাইহোক, নির্দিষ্ট বিকল্পগুলি সীমাবদ্ধতার উপর নির্ভর করে পরিবর্তিত হতে পারে যা নির্মাণের সময় অজানা। এই ধরনের ক্ষেত্রে, NavOptions তৈরি করতে হবে এবং প্রোগ্রাম্যাটিকভাবে সেট করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

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
    }
  }
)

জাভা

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 প্রয়োগ করতে পারেন:

কোটলিন

findNavController().navigate(
    deepLinkUri,
    navOptions { // Use the Kotlin DSL for building NavOptions
        anim {
            enter = android.R.animator.fade_in
            exit = android.R.animator.fade_out
        }
    }
)

জাভা

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() এর এই রূপটি অন্তর্নিহিত গভীর লিঙ্কের পাশাপাশি NavOptions উদাহরণের জন্য একটি Uri নেয়।