لتنفيذ نظام تنقّل قوي، يحتاج تطبيقك إلى طريقة مركزية للتعامل مع إيماءات الرجوع وإشارات التنقّل الأخرى. توضّح هذه الصفحة كيفية استخدام NavigationEventDispatcher لتنسيق أحداث التنقّل هذه وتوزيعها على مستوى تطبيقك.
تعريف NavigationEventDispatcher
NavigationEventDispatcher هو المكوّن المركزي في مكتبة NavigationEvent. يعمل هذا المكوّن كمركز أحداث يرسل الأحداث ذات الصلة بالتنقّل، مثل الإيماءات الرجوع والانتقالات بين الصفحات، إلى المستمعين المسجّلين داخل تطبيقك. ويمكن للمكوّنات الاشتراك في هذه الأحداث للرد على تغييرات التنقّل أو إجراءات التنقّل الأخرى التي يقودها النظام.
يجب توفير مثيلات NavigationEventDispatcher من خلال
NavigationEventDispatcherOwner. ويضمن ذلك إمكانية وصول أجزاء مختلفة من تطبيقك إلى أداة الإرسال نفسها ومراقبة أحداث التنقّل بطريقة متسقة ومنسَّقة.
class MyComponent: NavigationEventDispatcherOwner { override val navigationEventDispatcher: NavigationEventDispatcher = NavigationEventDispatcher() }
إذا كنت داخل ComponentActivity، يمكنك استرداد أداة الإرسال المتوفّرة بدلاً من تنفيذ أداة إرسال خاصة بك.
class MyCustomActivity : ComponentActivity() { fun addMyHandler() { // navigationEventDispatcher provided by the ComponentActivity navigationEventDispatcher.addHandler(myNavigationEventHandler) } }
إضافة NavigationEventInput
بعد تسجيل المعالج، تكون قد أعددت التطبيق لتلقّي الأحداث.
ومع ذلك، عليك تقديم مصدر يتم منه إنشاء الأحداث باستخدام
NavigationEventInput.
NavigationEventInput هو المكوّن الخاص بالنظام الأساسي الذي يتلقّى
مدخلات النظام الأولية ويحوّلها إلى NavigationEvent عادية ليتم إرسالها
إلى NavigationEventDispatcher.
المثال التالي هو عملية تنفيذ مخصّصة لـ NavigationEventInput:
public class MyInput : NavigationEventInput() { @MainThread public fun backStarted(event: NavigationEvent) { dispatchOnBackStarted(event) } @MainThread public fun backProgressed(event: NavigationEvent) { dispatchOnBackProgressed(event) } @MainThread public fun backCancelled() { dispatchOnBackCancelled() } @MainThread public fun backCompleted() { dispatchOnBackCompleted() } }
بعد ذلك، قدِّم هذا الإدخال إلى برنامج الإرسال:
navigationEventDispatcher.addInput(MyInput())
تنظيف الموارد باستخدام dispose()
لمنع حدوث تسرّب للذاكرة في واجهة مستخدم ديناميكية، يجب إزالة كل مثيل تم إنشاؤه
NavigationEventDispatcher بشكل صريح من التسلسل الهرمي باستخدام الطريقة dispose() عند إتلاف المكوّن المرتبط به:
navigationEventDispatcher.dispose()
تضمن طريقة dispose() إجراء عملية تنظيف متسلسلة من خلال إزالة أداة المعالجة وجميع العناصر التابعة لها (العناصر الثانوية والعناصر الثانوية الثانوية) بشكل متكرر، ما يضمن إلغاء تسجيل جميع أدوات المعالجة المرتبطة من النظام المشترك.
التسلسل الهرمي للمرسل والتحكّم
يتيح NavigationEventDispatcher التسلسل الهرمي للعناصر الرئيسية والفرعية، ما يتيح للمكوّنات المضمّنة في واجهة المستخدم (مثل NavHost أو مربّعات الحوار المضمّنة) المشاركة في معالجة أحداث التنقّل.
إنشاء أداة إرسال تابعة
يتم إنشاء أداة إرسال فرعية من خلال تمرير مرجع إلى أداة الإرسال الرئيسية
أثناء الإنشاء. تتشارك جميع أدوات الإرسال في التدرّج الهرمي نفسه NavigationEventProcessor للحفاظ على ترتيب الأحداث الأخير أولاً، والأول آخراً (LIFO) على مستوى العالم استنادًا إلى الأولوية.
التفعيل الهرمي
يتضمّن أداة الإرسال السريع السمة isEnabled التي تتيح للمطوّرين تفعيل أو إيقاف شجرة فرعية كاملة من معالجات الأحداث في آن واحد.
عند إيقاف أداة معالجة رئيسية (isEnabled = false)، سيتم تجاهل جميع أدوات المعالجة المرتبطة بهذه الأداة الرئيسية وأي من أدوات المعالجة الفرعية، بغض النظر عن حالة التفعيل الفردية.