إتاحة عدّة دعامات خلفية

يعمل مكوِّن التنقل مع نظام التشغيل Android للحفاظ على حزمة الرجوع بصفتك المستخدم في تطبيقك. وفي بعض الحالات، قد يكون من المفيد الحفاظ على عمليات المكدسات الخلفية في نفس الوقت، مع تحرك المستخدم ذهابًا وإيابًا بينها. على سبيل المثال، إذا كان تطبيقك يتضمّن الجزء السفلي من التنقل أو التنقل درج، رجوع متعدد دعم المكدس، الذي يسمح للمستخدمين بالتبديل بين المسارات في التطبيق بحرية بدون أن يفقدوا مكانهم في أي منها.

يوفر مكوِّن التنقل واجهات برمجة تطبيقات تدعم عدة حزم خلفية عن طريق حفظ حالة الوجهات واستعادتها في صفحة التنقل الرسم البياني. تشير رسالة الأشكال البيانية تتضمن الصفة NavigationUI تعالج هذا الأمر تلقائيًا، بل يمكنك أيضًا استخدام واجهات برمجة التطبيقات الأساسية يدويًا لإجراء عملية تنفيذ أكثر تخصيصًا.

التنفيذ التلقائي باستخدام ميزة NavigationUI

الصف NavigationUI تضم واجهات برمجة تطبيقات تعمل تلقائيًا على حفظ حالة عناصر القائمة واستعادتها المستخدم بينهم. وتنفِّذ واجهات برمجة التطبيقات هذه دعمًا متعددًا لتسلسل استدعاء الدوال البرمجية من خلال تلقائيًا في الحالات التالية:

لا تتطلّب واجهات برمجة التطبيقات هذه أي تغييرات إضافية على الرمز لتنفيذ تسلسل استدعاء الدوال البرمجية المتعددة. وهي الطريقة الموصى بها لدعم حزم خلفية متعددة في التطبيق.

تنفيذ الدعم يدويًا باستخدام واجهات برمجة التطبيقات الأساسية

في حال عدم استيفاء العناصر المقدَّمة من "NavigationUI" لمتطلباتك، يمكنك استخدام واجهات برمجة التطبيقات الأساسية لحفظ حزم البيانات السابقة واستعادتها من خلال أحد أسطح واجهة برمجة التطبيقات الأخرى التي يوفرها مكوِّن التنقل.

في ملف XML الخاص بالتنقل، يمكن لعناصر <action> في الرسم البياني للتنقل استخدام app:popUpToSaveState لحفظ حالة أي وجهات تم فرقعة الإجراء باستخدام app:popUpTo. يمكنه أيضًا استخدام واجهة برمجة التطبيقات app:restoreState. لاستعادة أي حالة تم حفظها سابقًا للوجهة المحددة في السمة app:destination.

يمكنك استخدام هذه السمات لإنشاء عدة حزم خلفية. عند إجراء تنقل إجراء يحتاج إلى نقل المستخدم من حزمة خلفية إلى أخرى، وتعيين كليهما app:popUpToSaveState وapp:restoreState إلى true في <action>. بهذه الطريقة، يحفظ الإجراء حالة الرجوع الحالي مكدس البيانات مع استعادة الحالة التي تم حفظها سابقًا للوجهة مرة أخرى المكدس، إذا كان موجودًا.

يوضّح المثال التالي إجراءً يستخدم كلتا السمتَين:

<action
  android:id=”@+id/swap_stack”
  app:destination=”@id/second_stack”
  app:restoreState=”true”
  app:popUpTo=”@id/first_stack_start_destination”
  app:popUpToSaveState=”true” />

الصف NavOptions يتيح لك أيضًا تمرير خيارات تنقّل خاصة لحفظ حِزم الرجوع إلى أخرى واستعادتها. عند التنقّل باستخدام NavController. هذا صحيح سواء قمت بإنشاء مثال لـ NavOptions باستخدام لغة Kotlin DSL أو باستخدام NavOptions.Builder:

Kotlin

// Use the navigate() method that takes a navOptions DSL Builder
navController.navigate(selectedBottomNavRoute) {
  launchSingleTop = true
  restoreState = true
  popUpTo(navController.graph.findStartDestination().id) {
    saveState = true
  }
}

Java

NavOptions navOptions = new NavOptions.Builder()
  .setLaunchSingleTop(true)
  .setRestoreState(true)
  .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
    false, // inclusive
    true) // saveState
  .build();
navController.navigate(selectedBottomNavId, null, navOptions);

لمزيد من المعلومات حول تمرير خيارات التنقّل، يمكنك الاطّلاع على تطبيق خيارات التنقّل. آليًا

مصادر إضافية

لمعرفة المزيد حول إتاحة استخدام عدة حزم خلفية مع مكوِّن التنقل، يمكنك الاطّلاع على المراجع الإضافية التالية:

مشاركات المدونة

نماذج