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

يعمل مكوِّن التنقّل مع نظام التشغيل 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);

لمعرفة المزيد من المعلومات حول تمرير خيارات التنقّل، يُرجى الاطّلاع على تطبيق NavOptions بشكل آلي.

مراجع إضافية

لمعرفة المزيد حول دعم حزم الرجوع المتعدد مع مكون التنقل، راجع الموارد الإضافية التالية:

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

عيّنات