با گزینه ها پیمایش کنید

هنگامی که با استفاده از 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 می گیرد.