يعمل مكوِّن التنقّل مع نظام التشغيل Android للحفاظ على حزمة البيانات الخلفية أثناء تنقّل المستخدم في تطبيقك. وفي بعض الحالات، قد يكون من المفيد الاحتفاظ بعدة حِزم خلفية في الوقت نفسه، مع تحريك المستخدم ذهابًا وإيابًا بينها. على سبيل المثال، إذا كان تطبيقك يتضمّن ميزة التنقل السفلي أو درج التنقل، يتيح دعم تكديس الظهر المتعدد للمستخدمين التبديل بحرية بين التدفقات في تطبيقك بدون فقدان مكانهم في أي منها.
يوفر مكوِّن التنقل واجهات برمجة تطبيقات تدعم مكدسات خلفية متعددة عن طريق حفظ حالة الوجهات واستعادتها في الرسم البياني للتنقل. تتضمن الفئة
NavigationUI
طرقًا للتعامل مع هذا الأمر تلقائيًا، ولكن يمكنك أيضًا استخدام واجهات برمجة التطبيقات الأساسية
يدويًا لتنفيذ أكثر تخصيصًا.
تنفيذ الدعم تلقائيًا باستخدام NavigationUI
تتضمن الفئة NavigationUI
واجهات برمجة تطبيقات تحفظ تلقائيًا حالة عناصر القائمة وتستعيدها أثناء
تنقل المستخدم بينها. وتُنفذ واجهات برمجة التطبيقات هذه دعمًا متعددًا للحزم الخلفية افتراضيًا في الحالات التالية:
- عند استخدام الحِمل الزائد المناسب في
setupWithNavController()
لربط مثيلNavigationView
أوBottomNavigationView
بمثيلNavController
، على النحو الموضّح في إضافة درج للتنقّل أو التنقّل السفلي. - عند استخدام
onNavDestinationSelected()
لإنشاء واجهة مستخدم لقائمة تنقّل مخصّصة مرتبطة بالوجهات التي يستضيفها مثيلNavController
.
ولا تتطلب واجهات برمجة التطبيقات هذه إجراء أي تغييرات إضافية على الرمز لتنفيذ الدعم المتعدد للحزمة الخلفية، وهي الطريقة الموصى بها لدعم العديد من حِزم البيانات الخلفية في تطبيقك.
تنفيذ الدعم يدويًا باستخدام واجهات برمجة التطبيقات الأساسية
إذا كانت العناصر التي يوفّرها NavigationUI
لا تلبّي متطلباتك، يمكنك استخدام واجهات برمجة التطبيقات الأساسية لحفظ واستعادة حِزم البيانات السابقة من خلال أحد مساحات عرض واجهة برمجة التطبيقات الأخرى التي يوفّرها مكوّن التنقل.
تنسيق XML للتنقّل
في ملف 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 بشكل آلي.
مراجع إضافية
لمعرفة المزيد حول دعم حزم الرجوع المتعدد مع مكون التنقل، راجع الموارد الإضافية التالية:
مشاركات المدونة
- مهارات MAD: التنقل بعدة مجموعات ذات صلة على Medium
- التنقل: مراجعة تفصيلية لعدة مجموعات في الخلفية على Medium
عيّنات
- الآن في تطبيق Androidعلى GitHub
- Jetnews على GitHub
- Jetsnack على GitHub