يعمل مكوِّن التنقل مع نظام التشغيل 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);
لمزيد من المعلومات حول تمرير خيارات التنقّل، يمكنك الاطّلاع على تطبيق خيارات التنقّل. آليًا
مصادر إضافية
لمعرفة المزيد حول إتاحة استخدام عدة حزم خلفية مع مكوِّن التنقل، يمكنك الاطّلاع على المراجع الإضافية التالية:
مشاركات المدونة
- مهارات MAD: التنقّل في حِزم خلفية متعددة على Medium
- التنقّل: نظرة تفصيلية على الحِزم الخلفية المتعددة على Medium
نماذج
- الآن في Android التطبيق على GitHub
- Jetnews على GitHub
- Jetsnack على GitHub