Kotlin DSL ব্যবহার করে নেভিগেশন গ্রাফে কোনও অ্যাকশন নির্ধারণ করলে,
নেভিগেশন একটি সংশ্লিষ্ট NavAction ক্লাস তৈরি করে, যার মধ্যে
নিম্নলিখিত সহ সেই অ্যাকশনের জন্য নির্ধারিত কনফিগারেশন থাকে:
- গন্তব্য: টার্গেট গন্তব্যের রিসোর্স আইডি।
- ডিফল্ট আর্গুমেন্ট: টার্গেট গন্তব্যের জন্য ডিফল্ট মান সহ
একটি
android.os.Bundle, যদি প্রদান করা হয়। - নেভিগেশন বিকল্প: নেভিগেশন বিকল্প, যা
NavOptionsহিসেবে দেখানো হয়। এই ক্লাসে টার্গেট গন্তব্যে ট্রানজিশন করা এবং সেখান থেকে ফিরে আসার জন্য সমস্ত বিশেষ কনফিগারেশন রয়েছে, যার মধ্যে রয়েছে অ্যানিমেশন রিসোর্স কনফিগারেশন, পপ আচরণ এবং গন্তব্যটি সিঙ্গেল টপ মোডে চালু করা উচিত কিনা।
Compose-এর সাথে বিকল্প
ডিফল্ট হিসেবে, navigate() আপনার নতুন গন্তব্য ব্যাক স্ট্যাকে যোগ করে। আপনার navigate() কলে অতিরিক্ত নেভিগেশন বিকল্প পাস করে
আপনি navigate()-এর আচরণ
পরিবর্তন করতে পারবেন।
আপনি একটি সাধারণ ল্যাম্বডা ব্যবহার করে NavOptions-এর একটি ইনস্ট্যান্স তৈরি করতে পারেন। 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)
প্রোগ্রাম্যাটিক্যালি বিকল্প প্রয়োগ করুন
আগের উদাহরণে দেখানো হয়েছে যে কীভাবে নেভিগেশন গ্রাফ XML-এর মধ্যে 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
}
}
)
জাভা
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
}
}
)
জাভা
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 ইনস্ট্যান্স
নেয়।