يمكنك تقديم معلومات إضافية أو تطبيق المنطق نفسه على وجهات باستخدام الفئة NavEntryDecorator. يغلّف هذا الصف كل
NavEntry في حزمة سابقة مع دالة قابلة للإنشاء. بعبارة أخرى، تزيّن هذه السمة محتوى الإدخال.
إنشاء أداة تزيين مخصّصة
لإنشاء أداة تزيين، عليك توسيع فئة NavEntryDecorator وتجاوز الطرق التالية:
-
decorate: دالة lambda قابلة للإنشاء يتم استدعاؤها لكلNavEntryفي حزمة الخلف. تتلقّىNavEntryكمعلّمة. يتيح لك ذلك إنشاء عناصر حالة يتم ربطها بمفتاحcontentKeyالخاص بالإدخال. يمكنك استخدامCompositionLocalProviderلتوفير التبعيات لمحتوى الإدخال. يمكنك أيضًا تضمين المحتوى في دالة قابلة للإنشاء أو تشغيل تأثيرات جانبية. يجب دائمًا استدعاءentry.Content()داخل هذه الطريقة. -
onPop: دالة ردّ يتم استدعاؤها عند إزالةNavEntryمن سجلّ الرجوع ومغادرته التركيب. يتلقّى هذا الحقلcontentKeyالخاص بالإدخال الذي تمت إزالته. استخدِمcontentKeyلتحديد أي حالة مرتبطة بهذا الإدخال وتنظيفها.
يوضّح المثال التالي كيفية توسيع الفئة NavEntryDecorator لإنشاء أداة تزيين مخصّصة.
// import androidx.navigation3.runtime.NavEntryDecorator class CustomNavEntryDecorator<T : Any> : NavEntryDecorator<T>( decorate = { entry -> Log.d("CustomNavEntryDecorator", "entry with ${entry.contentKey} entered composition and was decorated") entry.Content() }, onPop = { contentKey -> Log.d("CustomNavEntryDecorator", "entry with $contentKey was popped") } )
إذا كان العنصر الزخرفي يحتاج إلى الوصول إلى الحالة، أنشئ دالة قابلة للإنشاء تنشئ هذه الحالة ثم استخدِمها لإنشاء العنصر الزخرفي. للاطّلاع على مثال
للتنفيذ، راجِع رمز المصدر الخاص بـ
rememberSaveableStateHolderNavEntryDecorator. يؤدي ذلك إلى إنشاء الحالة، وهي SaveableStateHolder، ويتم استخدامها لإنشاء أداة التزيين.
تزيين الأنشطة السابقة
بعد إنشاء NavEntryDecorator، يمكنك تزيين الإدخالات في سجلّ الرجوع بإحدى الطريقتَين التاليتَين:
- استخدِم
rememberDecoratedNavEntries. تكون هذه الدالة مفيدة عندما يكون لديك عدة حِزم سابقة، كل منها يتضمّن مجموعة خاصة من أدوات التزيين (راجِع وصفة التعليمات البرمجية هذه لمزيد من التفاصيل). تُرجع الدالة قائمة مزيّنة منNavEntryيمكنك استخدامها معNavDisplay. - قدِّم أداة التزيين مباشرةً إلى
NavDisplayباستخدام المَعلمةentryDecorators. تُجريNavDisplayعمليات استدعاءrememberDecoratedNavEntriesفي الخلفية وتعرض الإدخالات المعدَّلة.
تضمين أداة التزيين التلقائية
تتضمّن Navigation 3 أداة تزيين تلقائية باسم
SaveableStateHolderNavEntryDecorator تتيح الاحتفاظ بحالة NavEntry عند حدوث تغييرات في الإعدادات أو إيقاف العملية. وهي تغلف محتوى NavEntry بعنصر SaveableStateProvider، ما يتيح عمل طلبات rememberSaveable داخل محتوى NavEntry بشكل صحيح.
ما لم يوفّر الديكور SaveableStateProvider، عليك تضمين SaveableStateHolderNavEntryDecorator كأول ديكور في قائمة الديكورات التي تقدّمها. يتم إنشاؤه باستخدام
rememberSaveableStateHolderNavEntryDecorator.
مثلاً:
// import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator NavDisplay( entryDecorators = listOf( rememberSaveableStateHolderNavEntryDecorator(), remember { CustomNavEntryDecorator() } ), // ... )
حالات استخدام أداة التزيين
يمكنك استخدام أداة تزيين لإجراء ما يلي:
- أنشِئ عنصرًا تابعًا لكل
NavEntryفي حزمة الخلف. على سبيل المثال، ينشئViewModelStoreNavEntryDecoratorViewModelStoreلكلNavEntry. - تحديد نطاق عنصر لعدة
NavEntry. على سبيل المثال، لمشاركةViewModelبين عدة إدخالات. - نفِّذ الإجراء نفسه لعدة
NavEntry. على سبيل المثال، لتنفيذ عمليات التسجيل أو تصحيح الأخطاء أو التتبُّع لكل إدخال. - لفّ
NavEntrys باستخدام الدالة القابلة للإنشاء نفسها. - تنظيف الحالة المرتبطة بـ
NavEntryعلى سبيل المثال، عند إزالة إدخال من سجلّ الرجوع، يمحوViewModelStoreNavEntryDecoratorViewModelStoreالمرتبط به.
لا تستخدِم أداة تزيين في الحالات التالية:
- تمرير عنصر تابع إلى
NavEntryواحد - توفير عناصر تابعة يكون نطاقها أوسع من سجلّ الرجوع
في كلتا الحالتين، مرِّر العنصر التابع مباشرةً عند إنشاء NavEntry بدلاً من ذلك.
للاطّلاع على المزيد من أمثلة الرموز، راجِع NavEntryDecorator.