هنگامی که با استفاده از Kotlin DSL اقدامی را در نمودار ناوبری تعریف میکنید، Navigation یک کلاس NavAction
مربوطه را تولید میکند که شامل پیکربندیهای تعریفشده برای آن عمل، از جمله موارد زیر است:
- مقصد : شناسه منبع مقصد مورد نظر.
- آرگومانهای پیشفرض : یک
android.os.Bundle
حاوی مقادیر پیشفرض برای مقصد هدف، در صورت ارائه. - گزینههای پیمایش : گزینههای پیمایش، که به عنوان
NavOptions
نشان داده میشوند. این کلاس شامل تمام پیکربندیهای ویژه برای انتقال به مقصد و بازگشت از مقصد است، از جمله پیکربندی منبع انیمیشن، رفتار pop، و اینکه آیا مقصد باید در حالت تک بالا راهاندازی شود یا خیر.
گزینه ها با نوشتن
به طور پیش فرض، navigate()
مقصد جدید شما را به پشته اضافه می کند. می توانید رفتار navigate()
را با ارسال گزینه های ناوبری اضافی به navigate()
خود تغییر دهید.
می توانید با استفاده از یک لامبدا ساده یک نمونه از NavOptions
ایجاد کنید. آرگومان هایی را که در غیر این صورت ممکن است به صراحت به NavOptions.Builder
ارسال کنید navigate()
ارسال کنید. به مثال های زیر توجه کنید:
برای مثال، راهنمای پشته پشته را برای مثالهایی در مورد نحوه ارسال گزینهها برای 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 نشان می دهد. با این حال، گزینههای خاص بسته به محدودیتهایی که در زمان ساخت ناشناخته هستند، میتوانند متفاوت باشند. در چنین مواردی، 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()
یک Uri
برای پیوند عمیق ضمنی و همچنین نمونه NavOptions
می گیرد.