التنقّل باستخدام الخيارات

عند تحديد إجراء في الرسم البياني للتنقل باستخدام لغة Kotlin DSL، يؤدي التنقّل إلى إنشاء فئة NavAction مقابلة تحتوي على الإعدادات المحددة لهذا الإجراء، بما في ذلك ما يلي:

  • الوجهة: رقم تعريف المورد للوجهة المستهدَفة.
  • الوسيطات التلقائية: android.os.Bundle تحتوي على القيم التلقائية للوجهة المستهدفة، في حال توفيرها.
  • خيارات التنقل: خيارات التنقل، يتم تمثيلها على شكل NavOptions تحتوي هذه الفئة على جميع الإعدادات الخاصة الانتقال من وإلى الوجهة المستهدفة، بما في ذلك الرسوم المتحركة تهيئة المورد وسلوك البوب وما إذا كان ينبغي في وضع علوي واحد.

الخيارات مع ميزة Compose

يضيف navigate() تلقائيًا وجهتك الجديدة إلى الحزمة الخلفية. يمكنك عدِّل سلوك navigate() من خلال تمرير خيارات تنقل إضافية إلى مكالمتك على navigate().

يمكنك إنشاء مثيل لـ NavOptions باستخدام دالة lambda بسيطة. تم اجتياز الاختبار 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)

تطبيق الخيارات آليًا

توضِّح الأمثلة السابقة كيفية تحديد NavOptions ضمن شريط التنقّل. الرسم البياني بتنسيق XML. ومع ذلك، يمكن أن تختلف خيارات محددة حسب القيود المفروضة غير معروفة في وقت الإصدار. وفي هذه الحالات، يجب إنشاء 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.