لتنفيذ نظام تنقّل فعّال، يحتاج تطبيقك إلى طريقة مركزية للتعامل مع إيماءات الرجوع وإشارات التنقّل الأخرى. توضّح هذه الصفحة كيفية استخدام 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 استخدام تسلسل هرمي للعناصر الرئيسية والفرعية، ما يتيح للمكوّنات المدمجة في عمق واجهة المستخدم (مثل NavHosts أو مربّعات الحوار المدمجة) المشاركة في معالجة أحداث التنقّل.
إنشاء مرسِل فرعي
يتم إنشاء مرسِل فرعي من خلال تمرير مرجع إلى المرسِل الرئيسي
أثناء الإنشاء. تتشارك جميع أدوات الإرسال في التسلسل الهرمي نفس
NavigationEventProcessor للحفاظ على ترتيب أحداث الأخير في الدخول، الأول في الخروج (LIFO)
العالمي بناءً على الأولوية.
التفعيل الهرمي
يتضمّن المُرسِل السمة isEnabled التي تتيح للمطوّرين تفعيل أو إيقاف شجرة فرعية كاملة من المعالِجات في آنٍ واحد.
عند إيقاف المُرسِل الرئيسي (isEnabled = false)، سيتم تجاهل جميع المعالِجات المرتبطة بهذا المُرسِل الرئيسي وأي من عناصره الثانوية، بغض النظر عن حالة تفعيلها الفردية.