التنقّل
آخر تعديل | الإصدار المستقر | إصدار مرشح | الإصدار التجريبي | الإصدار الأولي |
---|---|---|---|---|
1 تشرين الثاني (نوفمبر) 2023 | 2.7.5 | - | - | - |
تعريف التبعيات
لإضافة تبعية إلى ميزة التنقل، يجب عليك إضافة مستودع Google Maven إلى مشروعك. يمكنك الاطّلاع على مستودع Maven الذي يضم أدوات Google للحصول على مزيد من المعلومات.
أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle
لتطبيقك أو وحدتك:
Groovy
dependencies { def nav_version = "2.5.3" // Java language implementation implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Kotlin implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" // Feature module Support implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" }
Kotlin
dependencies { val nav_version = "2.5.3" // Java language implementation implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Kotlin implementation("androidx.navigation:navigation-fragment-ktx:$nav_version") implementation("androidx.navigation:navigation-ui-ktx:$nav_version") // Feature module Support implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // Jetpack Compose Integration implementation("androidx.navigation:navigation-compose:$nav_version") }
Safe Args
لإضافة الوسيطات الآمنة
إلى مشروعك، عليك تضمين classpath
التالي في ملف build.gradle
ذي المستوى الأعلى:
رائع
buildscript { repositories { google() } dependencies { def nav_version = "2.7.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.7.5" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
يجب أيضًا تطبيق أحد المكونين الإضافيين المتاحين.
لإنشاء رمز لغة Java مناسب لوحدات Java أو وحدات Kotlin المختلطة، أضِف
هذا السطر إلى ملف build.gradle
للتطبيق أو الوحدة:
رائع
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
بدلاً من ذلك، لإنشاء رمز Kotlin المناسب للوحدات التي تستخدم لغة Kotlin فقط، أضِف ما يلي:
رائع
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
يجب أن يكون لديك android.useAndroidX=true
في ملف gradle.properties
وفقًا لنقل البيانات إلى AndroidX.
للحصول على معلومات عن استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات ktx.
للمزيد من المعلومات حول الاعتماديات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إخبارنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة تصويتك إلى مشكلة حالية من خلال النقر على زر النجمة.
راجع مستندات أداة تتبُّع المشاكل للحصول على مزيد من المعلومات.
الإصدار 2.7.5
الإصدار 2.7.5
1 تشرين الثاني (نوفمبر) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.5
". يتضمّن الإصدار 2.7.5 هذه الالتزامات.
تحسينات الأداء
- تحسنت بشكل كبير في الأداء (من حيث الوقت وعدد التخصيصات) عند مقارنة رسمين بيانيين. ويعني هذا أنّ المكالمات، مثل
setGraph
التي تقارن داخليًا بين الرسم البياني الجديد والرسم البياني الحالي، تكون أسرع بكثير وتؤدي إلى تخطّي عدد أقل من الإطارات. نشكرك على ميشيل زي على التحليل الشامل الذي أدّى إلى هذا التحسين. (I6ad62) - سيعرض
NavHost
الآن وجهة البدء في البطاقة الأولى للمقطوعة الموسيقية بدلاً من الحاجة إلى انتظار البطاقة الثانية لقراءة الحالة المعدّلة. (I439a7، b/304852206)
إصلاح الأخطاء
- تم إصلاح مشكلة ظهور المكدس الخلفي في حالة استدعاء
setGraph
أكثر من مرة باستخدام الرسم البياني نفسه، فقط في حالة وجود وجهة في الرسم البياني تتضمن إجراءً يربط بين وجهتين. (Ieaed7) - لن تتسرّب بعد الآن مربّعات الحوار التي تم الانتقال إليها وإغلاقها بتتابع سريع إلى قائمة
NavController.visibleEntries
. (I67586، b/287969970) - عند عرض إدخال متبوعًا بتغيير في الإعدادات، سيتم الآن محو
ViewModel
للإدخال بشكل صحيح إذا كانsaveState
غير صحيح. (Idf242، b/298164648) - تم إصلاح مشكلة تمكّن
NavController
من التعامل مع الرابط لصفحة معيّنة في التطبيق أكثر من مرة إذا كانت حزمة الرجوع فارغة تمامًا قبل تغيير الإعدادات أو استدعاءsetGraph
فقط عندما كان Intent الوارد يتضمن علامةFLAG_ACTIVITY_NEW_TASK
. (I73c7f)
تعديلات التبعية
- يعتمد التنقّل باستخدام "الأجزاء" الآن على Fragment 1.6.2، ما يؤدي إلى حل المشكلة المتمثلة في عدم محو مثيلات
ViewModel
من الأجزاء المتداخلة عند استدعاءclearBackStack
.
الإصدار 2.7.4
الإصدار 2.7.4
4 تشرين الأول (أكتوبر) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.4
". يتضمّن الإصدار 2.7.4 عمليات الالتزام هذه.
الميزات الجديدة
- تمت إضافة إمكانية استخدام
popUpTo
للمسارات مع الوسيطات للسماح بالعودة إلى إدخال محدد يستخدم تلك الوسيطات الدقيقة، ويطابق الدعم الموجود فيpopBackStack
. (I731f4، b/299255572)
إصلاح الأخطاء
- عليك حل المشكلة التي تؤدي فيها مقاطعة تنقل باستخدام
popUpTo
إلى تعطُّلFragmentNavigator
. (I3c848، b/301887045) - تم إصلاح المشكلة التي تسببت في تسبب الضغط مرة أخرى للنظام في عدم تحديث
currentDestination
بشكل صحيح لمطابقة الجزء المعروض. (Id0d6c، b/289877514) - سيتم نقل مراحل نشاط
DialogFragment
الآن بشكل صحيح إلى الحالةRESUMED
عند إغلاق مربّع الحوار الذي يعلوها. (I88f0d، b/301811387)
الإصدار 2.7.3
الإصدار 2.7.3
20 أيلول (سبتمبر) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.3
". يتضمّن الإصدار 2.7.3 هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة متعلقة بالتنقل بين الأجزاء التي تسببت في احتواء قائمة
visibleEntries
على إدخالات غير صحيحة. (I5caa9، b/288520638) - تم إصلاح مشكلة تسبّبت في عدم تلقّي وجهة "النافذة العائمة" (مثل
Dialogs
أوBottomsheets
أو غير ذلك) مطلقًا من عدم معاودة الاتصال خلال مراحل نشاطRESUMED
. (I3b866، b/287505132)
الإصدار 2.7.2
الإصدار 2.7.2
6 أيلول (سبتمبر) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.2
". يتضمّن الإصدار 2.7.2 عمليات الالتزام هذه.
إصلاح الأخطاء
- يعتمد التنقّل الآن على دورة الحياة
2.6.2
، مع إصلاح التفاعل بينrememberSaveable
وNavHost
لإنشاء عنصر التنقّل، والذي من شأنه أن يؤدي بشكل صحيح إلى استعادة حالة الوجهاتrememberSaveable
وأي حالات مملوكة لـSavedStateHandle
تعود ملكيتها إلى "SavedStateHandle
" بعد إيقاف العملية وإعادة إنشائها.ViewModel
(b/298059596، b/289436035) - تم إصلاح مشكلة عند عرض عدة مربعات حوار في "إنشاء التنقل" في الوقت نفسه، حيث تكون مربعات الحوار المحجوبة جزئيًا (على سبيل المثال، ليست أعلى مربع الحوار) في حالة مراحل نشاط
CREATED
بدلاً من حالةSTARTED
. (aosp/2728520، b/289257213) - تم إصلاح إحدى المشاكل التي كانت تحدث عند عرض مربّعات حوار متعددة في "إنشاء التنقل" في وقت واحد، حيث يؤدي إغلاق مربع الحوار العلوي إلى توقف مربّع الحوار الجديد في أعلى حالة في حالة مراحل نشاط
STARTED
بدلاً من الانتقال بشكل صحيح إلىRESUMED
. (aosp/2629401، b/286371387) - لم تعد التنقلات الآمنة في التنقل تُنشئ مثيلاً لمهمتها بلهفة إذا لم يتم تنفيذها فعليًا. (I0e385، b/260322841)
تعديل التبعية
- تعتمد ميزة "إنشاء" ضمن ميزة التنقل الآن على الإصدار 1.5.1 من "إنشاء".
الإصدار 2.7.1
الإصدار 2.7.1
23 آب (أغسطس) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.1
". يتضمّن الإصدار 2.7.1 هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشاكل في التنقل مع ميزة الإنشاء، حيث كان من الممكن عند استخدام
Scaffold
حدوث خطأ عند محاولة الوصول إلىLifecycle.State.DESTROYED
ViewModel
. (I1dc11, b/268422136)
الإصدار 2.7.0
الإصدار 2.7.0
9 آب (أغسطس) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.0
". يتضمّن الإصدار 2.7.0 هذه الالتزامات.
تغييرات مهمة منذ الإصدار 2.6.0
الصور المتحركة من Accompanist
بعد أن أصبحت AnimatedContent
ثابتة، تمكّنا من نقل الرمز من Accompanist Navigation Animation مرة أخرى إلى Navigation Compose نفسه.
هذا يعني أنّ كل الدعم المخصّص لضبط عمليات النقل المخصّصة التي كانت متوفّرة في AnimatedNavHost
يتوفّر في NavHost
مباشرةً.
لن يتم إجراء أي تغييرات إضافية على Accompanist Navigation Animation وسنوقفها رسميًا قريبًا، إلى جانب إرشادات حول كيفية الرجوع إلى ميزة Navigation Compose نفسها، ولكنّها ستكون عكس دليل نقل البيانات بدون الحاجة إلى إجراء تغييرات أخرى في واجهة برمجة التطبيقات إذا كنت تستخدم الإصدار الأولي من Accompanist alpha (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- يعترض NavHost في ميزة Navigation Compose الآن استدعاءات النظام مرة أخرى بشكل صحيح حتى بعد إيقاف النشاط واستئنافه. (Icb6de, b/279118447)
تعديلات التبعية
- يعتمد التنقّل الآن على ميزة "إنشاء
1.5.0
" بدءًا من1.1.0
.
الإصدار 2.7.0-rc01
26 تموز (يوليو) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.0-rc01
". يحتوي الإصدار 2.7.0-rc01 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في احتمال بقاء
EnterTransition
وExitTransition
لامدا التي تم إنشاؤها كجزء منNavHost
في الذاكرة حتى بعد إزالةNavHost
من المقطوعة الموسيقية. (I893d0)
المشاكل المعروفة
- هناك مشكلة في الإصدار 2.6.x من التنقل، والتي تؤدي إلى حدوث
IllegalArgumentException
عند التنقل باستخدام نافذة منبثقةTo. من الممكن تجنُّب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على غرار النصائح المُقترَحة هنا. (b/287133013)
الإصدار 2.7.0-beta02
28 حزيران (يونيو) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.0-beta02
". يتضمّن الإصدار 2.7.0-beta02 هذه الالتزامات.
إصلاح الأخطاء
- تتضمن ميزة "إنشاء التنقل" الآن الترتيب z الصحيح لعمليات الانتقال المخصصة التي تستخدم التنقل مع الخيار
popUpTo
.(/Ib1c3a، b/285153947)
الإصدار 2.7.0-beta01
7 حزيران (يونيو) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.0-beta01
". يتضمّن الإصدار 2.7.0-beta01 هذه الالتزامات.
إصلاح الأخطاء
- بإمكان
NavHost
في ميزة "إنشاء ميزة التنقل" الآن اعتراض استدعاءات النظام مرة أخرى بشكل صحيح حتى بعد تغيير قيمةActivity
إلىSTOPPED
وRESUMED
. (Icb6de, b/279118447)
الإصدار 2.7.0-alpha01
24 أيار (مايو) 2023
تم إصدار "androidx.navigation:navigation-*:2.7.0-alpha01
". يحتوي الإصدار 2.7.0-alpha01 على هذه الالتزامات.
الصور المتحركة من Accompanist
بعد أن أصبحت AnimatedContent
ثابتة، تمكّنا من نقل الرمز من Accompanist Navigation Animation مرة أخرى إلى Navigation Compose نفسه.
هذا يعني أنّ كل الدعم المخصّص لضبط عمليات النقل المخصّصة التي كانت متوفّرة في AnimatedNavHost
يتوفّر في NavHost
مباشرةً.
لن يتم إجراء أي تغييرات إضافية على Accompanist Navigation Animation وسنوقفها رسميًا قريبًا، إلى جانب إرشادات حول كيفية الرجوع إلى ميزة Navigation Compose نفسها، ولكنّها ستكون عكس دليل نقل البيانات بدون الحاجة إلى إجراء تغييرات أخرى في واجهة برمجة التطبيقات إذا كنت تستخدم الإصدار الأولي من Accompanist alpha (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- من التنقل
2.6.0-rc02
: تم حل مشكلة متعلقة بالتنقل في الأجزاء، حيث يؤدي التنقل باستخدامpopUpTo
وفصل جزء من الحزمة الخلفية بدون إعادة إنشاء العرض إلى توقُّف النظام عن العمل. (Ieb8d4، b/281726455)
تعديلات التبعية
- يعتمد التنقّل الآن على ميزة "إنشاء"
1.5.0-beta01
.
الإصدار 2.6.0
الإصدار 2.6.0
7 حزيران (يونيو) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0
". يتضمّن الإصدار 2.6.0 هذه الالتزامات.
تغييرات مهمة في ميزة "التنقّل" منذ الإصدار 2.5.0
- أصبحت الآن قيمة
arguments
الخاصة بـNavBackStackEntry
وarguments
التي تم تمريرها إلىOnDestinationChangedListener
مجرد نسخة من الوسيطات غير القابلة للتغيير التي تم إنشاؤها عند الانتقال إلى الوجهة. وهذا يعني أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلىarguments
أو حالاتOnDestinationChangedListener
الأخرى. - تتوافق
NavDeepLink
الآن مع القيم التلقائية للمصفوفات، ما يسمح باستخدام مَعلمات طلب البحث المتكرّرة التي سيتم ربطها بنوع مصفوفة الوسيطة. تشمل علامةNavType
الآن أيضًا طريقة تلقائية يمكن إلغاؤها لدمج قيمتين تم تحليلهما. - يمكن للفئات الفرعية المخصّصة لـ
NavType
الآن إلغاءserializeAsValue
لإنشاء تسلسل لقيمة في سلسلة، ما يسمح بإدراج كلّ من التسلسل وإلغاء التسلسل (عبرparseValue
) بالكامل في الفئةNavType
. يلغيStringType
الآن هذه الطريقة لطلبUri.encode
علىString
المحدد.
تغييرات مهمة على ميزة "إنشاء التنقل" منذ الإصدار 2.5.0
- عند معاينة عنصر مركّب باستخدام
NavHost
، سيتم الآن عرضstartDestination
في NavGraph بشكل تلقائي. NavController.popBackStack(route)
وNavController.getBackStackEntry(route)
وNavController.clearBackStack(route)
، تتوفر الآن كل المسارات المتاحة التي تم ملء وسيطاتها جزئيًا أو كليًا. تجدر الإشارة إلى أنّ الوسيطات يجب أن تتطابق تمامًا مع وسيطات الإدخال.- وستؤدي محاولة إنشاء
NavDeepLink
فارغ باستخدامnavDeepLink
Kotlin DSL إلى ظهور تحذير من الوبر يشير إلى أنّ رابط الصفحة في التطبيق يحتاج إلى معرّف موارد منتظم (URI) و/أو إجراء و/أو نوع mimetype ليكون صالحًا.
تغييرات مهمة في ميزة "التنقل باستخدام أجزاء" منذ الإصدار 2.5.0
- لم يعُد
NavHostFragment
يعترض زر الرجوع في النظام نفسه. ويسمح هذا الإجراء للسمةFragmentManager
الأساسية بمعالجة النظام مرة أخرى. يسمح هذا الإجراء للجزء1.7.0-alpha01
والإصدارات الأحدث بتوفير صورة متحركة للخلف توقّعية داخل التطبيق على أجهزة Android U. - عند استخدام ميزة "التنقل" مع الأجزاء، ستؤدي محاولة إجراء
FragmentTransaction
يدويًا لإضافة جزء إلى الحزمة الخلفية فيFragmentManager
إلى عرض علامةIllegalArgumentException
. عليك دائمًا إضافة الأجزاء من خلال واجهة برمجة التطبيقاتnavigate()
. - عند استخدام السلسلة
${applicationId}
بالضبط كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط لملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بالرمزpackageName
للسياق عند التضخم. - تستخدم
FragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وتمييزه. هذا يعني أنّLifecycle
NavBackStackEntry
سينتظر الآن اكتمال المؤثرات الخاصة للدخول والخروج قبل نقلLifecycle.State
الأخير. - تستخدم
DialogFragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وتمييزه. وهذا يعني أنّLifecycle
NavBackStackEntry
سينتظر الآن حتى يتم نقلDialogFragment
Lifecycle
إلىDESTROYED
قبل الانتقال إلىDESTROYED
نفسه. - يتيح لك
NavHostFragment
الآن استردادNavController
فور إرفاقNavHostFragment
بـFragmentManager
، وليس بعدonCreate()
فقط. - يعتمد دعم التنقّل لوحدات الميزات الديناميكية الآن على "مكتبة عرض الميزات في Play" الدقيقة.
- تعتمد ميزة "التنقل الآمن" الآن على الإصدار 7.3.0 من مكوّن Android Gradle الإضافي. وهذا يعني أنها متوافقة الآن فقط مع الإصدارات 7.3.0+.
تغييرات مهمة في NavigationUI منذ الإصدار 2.5.0
- عند تمرير رقم تعريف رسم بياني للتنقل إلى
AppBarConfiguration
(مثلاً من خلالMenu
)، يعتبرNavigationUI
الآن وجهة البداية للرسم البياني للتنقّل هذا كوجهة ذات مستوى أعلى، بدلاً من وضع علامة غير صحيحة على كل وجهة ضمن الرسم البياني كوجهة ذات مستوى أعلى. لا يتغيّر سلوك تمرير رقم تعريف وجهة فردية. تتوفّر هذه الوظيفة نفسها للرمز الخاص بك من خلال دالةisTopLevelDestination
الجديدة فيAppBarConfiguration
. - ستؤدي عمليات دمج
setupWithNavController
فيNavigationUI
للعمل مع شريط التطبيقات العلوي الآن إلى تحليل قيمR.string
للوسيطاتReferenceType
المتوفّرة فيandroid:label
إلى قيم "السلسلة" بدلاً من إخراج العدد الصحيح للمورد الذي يتم إنشاؤه تلقائيًا. - يوفّر
NavigationUI
الآن السجلّات عند تعذّر التنقّل عبرMenuItem
محدّد.
الإصدار 2.6.0-rc02
24 أيار (مايو) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-rc02
". يحتوي الإصدار 2.6.0-rc02 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة في التنقل في الأجزاء، حيث يؤدي الانتقال باستخدام
popUpTo
وفصل جزء من الحزمة الخلفية بدون إعادة إنشاء العرض إلى توقُّف النظام عن العمل. (Ieb8d4، b/281726455)
الإصدار 2.6.0-rc01
10 أيار (مايو) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-rc01
". يحتوي الإصدار 2.6.0-rc01 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة في ميزة "التنقّل" التي تتضمّن أجزاءً، حيث ستؤدي إزالة جزء من خلال التنقّل باستخدام
popUpTo
في استدعاء دورة حياةonResume()
إلى ظهورIllegalStateException
. (I21884، b/279644470)
الإصدار 2.6.0-beta01
19 نيسان (أبريل) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-beta01
". يتضمّن الإصدار 2.6.0-beta01 هذه الالتزامات.
الميزات الجديدة
- توفّر "
NavBackStackEntry
" الآن عملية تنفيذtoString
مخصّصة. (Iff00b)
إصلاح الأخطاء
- عند استخدام ميزة "التنقل" مع الأجزاء، ستؤدي محاولة إجراء
FragmentTransaction
يدويًا لإضافة جزء إلى الحزمة الخلفية فيFragmentManager
إلى عرض علامةIllegalArgumentException
. عليك دائمًا إضافة الأجزاء من خلال واجهة برمجة التطبيقاتnavigate()
. (I6d38e) - في حال توفُّر إدخال
navigate
يضيف إدخالاً وpopBackStack
يزيله في الإطار نفسه، سيؤدي الإدخال العلوي الناتج في الحزمة الخلفية الآن إلى إرجاعه باستمرار إلىLifecycle.State
RESUMED
. (Id8067، b/276495952)
الإصدار 2.6.0-alpha09
5 نيسان (أبريل) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha09
". يحتوي الإصدار 2.6.0-alpha09 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح عمليات التحقّق من المسار غير الصالح، بحيث إذا كان
NavDestination
يحتوي علىNavArgument
غير قابل للقيم، يجب أن يحتوي مسار هذه الوجهة على عناصر نائبة للوسيطات التي تحمل الاسم نفسه للوسيطاتNavArgument
غير القابلة للقيم الفارغة. (Ic62bf، b/274697949) - ستتعذّر الآن عمليات التنقّل في روابط صفحات معيَّنة استنادًا إلى
Action/MimeType
إذا كانت عملية التنقّل لا تتضمّن عنصرNavArgument
غير قابل للقيمتَين، وهو ما يتطلّب منNavDestination
الذي تتطابق معهAction/MimeType
. (Ibfa17، b/271777424) - عندما تضبط دالة
NavController
رسمًا بيانيًا يتضمن المسار والوجهات نفسها كالرسم البياني السابق، تستبدل الآن عُقد الرسم البياني الحالية ووجهات الحزمة الخلفية بمثيلات جديدة. يؤدي ذلك إلى إصلاح عطل عند استخدامonLaunchSingleTop
بدون حفظ الحالة في "إنشاء التنقل". ويصلح ذلك أيضًا الخطأ الذي يحدث عند الانتقال إلى الوجهات المرتبطة بإصدارات الرسم البياني الجذري، وظهور حزم البيانات الخلفية غير الصحيحة. (I5bc58 وb/275258161 وb/275407804)
الإصدار 2.6.0-alpha08
22 آذار (مارس) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha08
". يحتوي الإصدار 2.6.0-alpha08 على هذه الالتزامات.
الميزات الجديدة
- يتيح لك
NavHostFragment
الآن استردادNavController
فور إرفاقNavHostFragment
بـFragmentManager
، وليس بعدonCreate()
فقط. (Ic6382، b/220186282)
إصلاح الأخطاء
- تم إصلاح
NullPointerException
عند تمييز رسم بياني مدمج يحتوي على وسيطة غير قابلة للقيم. (6b3581، b/249988437) - عند إعادة استخدام النظام بعد إجراء التنقّل باستخدام
popUpTo
، ستنبثق حالةNavController
إلى الإدخال الصحيح. (I3a8ec، b/270447657) - سيفتح
FragmentNavigator
الآن الإدخالات بشكل صحيح عند إبراز الحزمة الخلفية من خلال النظام الخلفي أوpopBackStack()
وما إذا كانت العملية تستخدم تأثيرات للجزء أم لا. (I81bdf) - إنّ إضافة الأجزاء إلى
FragmentManager
فيFragmentNavigator
بدون استخدام التنقّل لن تؤدي بعد الآن إلى حدوث أعطال. (b17204، b/274167493)
تعديلات التبعية
- يعتمد التنقّل الآن على دورة الحياة
2.6.1
. (586fe7) - يعتمد التنقّل الآن على SavedState
1.2.1
. (078e4e) - يعتمد التنقل الآن على ProfileInstaller
1.3.0
. (512f0c)
الإصدار 2.6.0-alpha07
8 آذار (مارس) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha07
". يحتوي الإصدار 2.6.0-alpha07 على هذه الالتزامات.
إصلاح الأخطاء
- متغيرات واجهة برمجة التطبيقات
getBackStackEntry
وpopBackStack
وclearBackStack
التي تسلك مسارات مسارات تتضمن وسيطات قابلة للقيم ومَعلمات طلب بحث قابلة للقيم (I22294 وb/269302500) - تم إصلاح مشكلة كانت تؤدي إلى عدم محو حالة استدعاء
clearBackStack()
منNavController
في مدير الأجزاء المرتبط بالحزمة الخلفية التي تم محوها. (Ic1cce، b/271190202) - تم إصلاح الانحدار في الإصدار 2.6.0-alpha06 الذي تسبب في تمييز
MenuItem
الخطأ فيBottomNavigationView
عند إعادة استخدام النظام بين علامات التبويب. (I634f6، b/270447657) - تم إصلاح الانحدار في الإصدار 2.6.0-alpha06 الذي تسبب في عدم نقل
NavBackStackEntry
s إلى الحالة الاستئناف عند استخدامAnimation
. (Ib3589، b/269646882)
الإصدار 2.6.0-alpha06
22 شباط (فبراير) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha06
". يحتوي الإصدار 2.6.0-alpha06 على هذه الالتزامات.
الميزات الجديدة
- عند معاينة عنصر مركّب باستخدام
NavHost
، سيتم الآن عرضstartDestination
في NavGraph بشكل تلقائي. (I2b89f)
تغييرات واجهة برمجة التطبيقات
- تمت الآن إضافة تعليقات توضيحية إلى كل عمليات التحميل الزائدة من
NavController
navigate
باستخدام@MainThread
لضمان استدعائها في سلسلة المحادثات الرئيسية. (I2c0b0، b/263427111)
إصلاح الأخطاء
- تم إصلاح عطل عند محاولة التنقل أثناء استخدام التنقل في جزء ديناميكي. (I3ee29، b/268360479)
- تم إصلاح خطأ لا يؤدي الانتقال إلى جزء آخر عبر زر الرجوع في النظام إلى تعديل الشريط السفلي إلى العنصر المحدد الصحيح (If559f، b/269044426)
المشاكل المعروفة
- عند استخدام ميزة التنقّل مع أجزاء من الشاشة، يتعذّر على مراحل نشاط
NavBackStackEntry
الوصول إلىRESUMED
عند استخدام واجهات برمجة تطبيقاتAnimation
. (b/269646882) - عند استخدام التنقل مع أجزاء، والتنقل باستخدام
BottomNavigation
، إذا حاولت استعادة حزمة رجوع تحتوي على إدخالات متعددة، لن يتم تحديثBottomMenuItem
بشكل صحيح. (b/270447657) - عند استخدام ميزة "التنقل" مع أجزاء، بعد استعادة الحالة، لن يحصل
Lifecycle
علىNavBackStackEntry
عندما يكون الجزءDESTROYED
هوDESTROYED
. (b/270610768)
الإصدار 2.6.0-alpha05
8 شباط (فبراير) 2023
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha05
". يحتوي الإصدار 2.6.0-alpha05 على هذه الالتزامات.
الميزات الجديدة
NavController.popBackStack(route)
وNavController.getBackStackEntry(route)
وNavController.clearBackStack(route)
، تتوفر الآن كل المسارات المتاحة التي تم ملء وسيطاتها جزئيًا أو كليًا. تجدر الإشارة إلى أنّ الوسيطات يجب أن تتطابق تمامًا مع وسيطات الإدخال. (Iebd28 وIc678c وI3b37b وb/257514373)- تستخدم
FragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وتمييزه. هذا يعني أنّLifecycle
NavBackStackEntry
سينتظر الآن اكتمال المؤثرات الخاصة للدخول والخروج قبل نقلLifecycle.State
الأخير. (I3cb19, b/238686802) - تستخدم
DialogFragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وتمييزه. وهذا يعني أنّLifecycle
NavBackStackEntry
سينتظر الآن حتى يتم نقلDialogFragment
Lifecycle
إلىDESTROYED
قبل الانتقال إلىDESTROYED
نفسه. (I53ee5، b/261213893)
تغييرات واجهة برمجة التطبيقات
- توفّر
NavigatorState
الآن واجهة برمجة التطبيقاتprepareForTransition
للسماح لـNavigator
بنقلNavBackStackEntries
إلىLifecycle.State
متوسطة. (I42c21، b/238686802) - يمكنك الآن الوصول إلى الحزمة الخلفية المرتبطة بسمة
NavGraphNavigator
أوComposeNavigator
من خلال سمةbackstack
. بالإضافة إلى ذلك، يعرضComposeNavigator
الآن استدعاءonTransitionComplete()
لوضع علامةNavBackStackEntry
التي نفّذت عملية نقل أوpopBackStack
كمكتملة. (I02062 وI718db وb/257519195)
إصلاح الأخطاء
- لن يتم تنفيذ حالة المستكشف الآن عند استخدام واجهات برمجة تطبيقات
push/popWithTransition
، علمًا بأنّ الإدخال قيد المعالجة حاليًا. (Iadbfa، b/261213893) - عند استخدام
launchSingleTop
معNavGraph
مُدمَجة، ستتم إضافة جميع الوجهات بدءًا من الوجهة الأصلية إلىstartDestination
بشكل صحيح فقط في أعلى حزمة الخلفية. (Id4bea، b/253256629) - ستستبدل ميزة التنقّل الآن النسخة الافتراضية
DialogFragment
بشكل صحيح عند الانتقال إلى الوجهة نفسها مع ضبط العلامةlaunchSingleTop
على "صحيح". (I45b5a، b/149572817) - لن تتسبب SafeArgs في التنقل بعد الآن في حدوث خطأ في التجميع عند استخدام وسيطات يبلغ طولها 19 حرفًا بالضبط. (Id60bc، b/257110095)
الإصدار 2.6.0-alpha04
تشرين الثاني (نوفمبر) 2022
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha04
". يحتوي الإصدار 2.6.0-alpha04 على هذه الالتزامات.
الميزات الجديدة
- يمكن للفئات الفرعية المخصّصة لـ
NavType
الآن إلغاءserializeAsValue
لإنشاء تسلسل لقيمة في سلسلة، ما يسمح بإدراج كلّ من التسلسل وإلغاء التسلسل (عبرparseValue
) بالكامل في الفئةNavType
. يلغيStringType
الآن هذه الطريقة لطلبUri.encode
علىString
المحدد. (Ie5213، b/247637434) - يوفّر
NavigationUI
الآن السجلّات عند تعذّر التنقّل عبرMenuItem
محدّد. (I2af5a، b/247730357)
إصلاح الأخطاء
- يتم الآن تحليل الروابط لصفحات في التطبيق أثناء التنقّل ببطء بدلاً من إعداد الرسم البياني، ما يمكن أن يؤدي إلى تحسين أداء التطبيق عند بدء التشغيل. (Iab0ab)
- تم إصلاح العطل الذي نتج عن الانتقال لأعلى بعد الربط بصفحة معيّنة في وجهة ما تحتوي على وسيطات تلقائية فارغة. (I51c24، b/243183636)
تعديل التبعية
- يعتمد دعم التنقّل لوحدات الميزات الديناميكية الآن على "مكتبة عرض الميزات في Play" الدقيقة. (Ib4ddc)
- تعتمد ميزة "التنقل الآمن" الآن على الإصدار 7.3.0 من مكوّن Android Gradle الإضافي. وهذا يعني أنها متوافقة الآن فقط مع الإصدارات 7.3.0 والإصدارات الأحدث. (I47e49)
الإصدار 2.6.0-alpha03
24 تشرين الأول (أكتوبر) 2022
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha03
". يحتوي الإصدار 2.6.0-alpha03 على هذه الالتزامات.
إصلاح الأخطاء
- من شريط التنقل
2.5.3
: لن يتسببNavHost
بعد الآن في ظهورNoSuchElementException
عند عدم توفر وجهة لإنشاءCrossfade
. سيتم الآن تخطي المقطوعة الموسيقية فقط. (Ieb46e، b/253299416) - من التنقل
2.5.3
: تم حل مشكلة عدم نسيان حالة الإنشاء المحفوظة (على سبيل المثال، استخداماتrememberSaveable
) وإزالتها عندما ظهرت وجهة خارج الحزمة الخلفية. (I64949)
تعديلات التبعية
- يعتمد التنقل الآن على الجزء
1.5.4
. (Icd424)
الإصدار 2.6.0-alpha02
5 تشرين الأول (أكتوبر) 2022
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha02
". يحتوي الإصدار 2.6.0-alpha02 على هذه الالتزامات.
التغييرات في السلوك
- عند تمرير رقم تعريف رسم بياني للتنقل إلى
AppBarConfiguration
(مثلاً من خلالMenu
)، يعتبرNavigationUI
الآن وجهة البداية للرسم البياني للتنقّل هذا كوجهة ذات مستوى أعلى، بدلاً من وضع علامة غير صحيحة على كل وجهة ضمن الرسم البياني كوجهة ذات مستوى أعلى. لا يتغيّر سلوك تمرير رقم تعريف وجهة فردية. تتوفّر هذه الوظيفة نفسها للرمز الخاص بك من خلال دالةisTopLevelDestination
الجديدة فيAppBarConfiguration
. (Ie936e، b/238496771)
إصلاح الأخطاء
- يعتمد المكوِّن
navigation:navigation-fragment
الآن على إصدار التجزئة1.5.2
. (I00ba4) - لن يتم تعديل عنصر القائمة المحدَّد بعد الآن عند الانتقال إلى وجهة
FloatingWindow
، مثل مربّع الحوار. (I4cde8، b/240308330)
الإصدار 2.6.0-alpha01
7 أيلول (سبتمبر) 2022
تم إصدار "androidx.navigation:navigation-*:2.6.0-alpha01
". يحتوي الإصدار 2.6.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
- ستؤدي عمليات دمج
setupWithNavController
فيNavigationUI
للعمل مع شريط التطبيقات العلوي الآن إلى تحليل قيمR.string
للوسيطاتReferenceType
المتوفّرة فيandroid:label
إلى قيم "السلسلة" بدلاً من إخراج العدد الصحيح للمورد الذي يتم إنشاؤه تلقائيًا. (I5f803، b/167959935) - تتوافق
NavDeepLink
الآن مع القيم التلقائية للمصفوفات، ما يسمح باستخدام مَعلمات طلب البحث المتكرّرة التي سيتم ربطها بنوع مصفوفة الوسيطة. تشمل علامةNavType
الآن أيضًا طريقة تلقائية يمكن إلغاؤها لدمج قيمتين تم تحليلهما. (Id68c3، b/209977108) - عند استخدام السلسلة
${applicationId}
بالضبط كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط لملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بالرمزpackageName
للسياق عند التضخم. (Iaabde، b/234223561) - وستؤدي محاولة إنشاء
NavDeepLink
فارغ باستخدامnavDeepLink
Kotlin DSL إلى ظهور تحذير من الوبر يشير إلى أنّ رابط الصفحة في التطبيق يحتاج إلى معرّف موارد منتظم (URI) و/أو إجراء و/أو نوع mimetype ليكون صالحًا. (I08d2f، b/154038883)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة دالة الإضافة
NavDestination
الجديدة لتحليل التصنيفات الديناميكية التي تتضمّن وسيطات على شكلandroid:label="{arg}"
إلى سلسلة. يتيح استخدام وسيطاتReferenceType
من خلال تحليل قيمR.string
في قيم السلسلة الخاصة بها. (I07d89، b/236269380)
التغييرات في السلوك
- أصبحت الآن قيمة
arguments
الخاصة بـ NavBackStackEntry وarguments
التي تم تمريرها إلىOnDestinationChangedListener
نسخة فقط من الوسيطات الثابتة التي تم إنشاؤها عند الانتقال إلى الوجهة. وهذا يعني أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلىarguments
أو حالاتOnDestinationChangedListener
الأخرى. (I676f5)
إصلاح الأخطاء
- من التنقل
2.5.2
: تحاول ميزة "الانتقال التفاعلي" الآن تثبيت وجهات الأنشطة على نحو سليم من الوحدات الأخرى قبل الانتقال إليها. (Ia2c16، b/240292838) - من التنقل
2.5.2
: سيستبدل التنقل الآن مثيل Fragment بشكل صحيح عند الانتقال إلى نفس الوجهة وضبط علامةlaunchSingleTop
على true. (I5a2f1، b/237374580) - من التنقل
2.5.2
: تم إصلاحIllegalStateException
بسبب الانتقال إلى رسم بياني مزدوج متداخل يشارك عنصرًا رئيسيًا مع وجهة بداية جديدة بارزة. (I9f7cb، b/243778589)
الإصدار 2.5
الإصدار 2.5.3
24 تشرين الأول (أكتوبر) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.3
". يتضمّن الإصدار 2.5.3 هذه الالتزامات.
إصلاح الأخطاء
- لن تتسبب
NavHost
بعد الآن في حدوثNoSuchElementException
عند عدم توفّر وجهة لإنشاءCrossfade
. سيتم الآن تخطي المقطوعة الموسيقية فقط. (Ieb46e، b/253299416) - تم إصلاح المشكلة المتمثلة في عدم حذف حالة الإنشاء المحفوظة (على سبيل المثال، استخدامات
rememberSaveable
) وإزالتها عندما ظهرت وجهة من الحزمة الخلفية. (I64949)
الإصدار 2.5.2
7 أيلول (سبتمبر) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.2
". يتضمّن الإصدار 2.5.2 هذه الالتزامات.
إصلاح الأخطاء
- يحاول الانتقال الديناميكي الآن تثبيت وجهات الأنشطة بشكل صحيح من الوحدات الأخرى قبل الانتقال إليها. (Ia2c16، b/240292838)
- سيحل التنقّل الآن محل مثيل Fragment بشكل صحيح عند الانتقال إلى الوجهة نفسها وضبط علامة
launchSingleTop
على true. (I5a2f1، b/237374580) - تم إصلاح
IllegalStateException
بسبب الانتقال إلى رسم بياني مزدوج متداخل يشارك عنصرًا رئيسيًا مع وجهة بداية جديدة بارزة. (I9f7cb، b/243778589)
تعديل التبعية
- يعتمد التنقل
2.5.2
الآن على الجزء1.5.2
. (aosp/2178734)
الإصدار 2.5.1
27 تموز (يوليو) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.1
". يتضمّن الإصدار 2.5.1 هذه الالتزامات.
إصلاح الأخطاء
- لن تتسبب
Navigation Safe Args
بعد الآن في تحذيرات الإيقاف النهائي في الفئات التي تم إنشاؤها عند استخدام أنواع الوسيطات المخصّصة المحفوظة فيBundle
. (Id86ed، b/237725966)
تعديلات التبعية
- تعتمد مكتبة التنقل الآن على دورة الحياة
2.5.1
. (Ib4451) - تعتمد مكتبة التنقل الآن على النشاط
1.5.1
. (I3efe8) - تعتمد مكتبة التنقل الآن على الجزء
1.5.1
. (I56177)
الإصدار 2.5.0
29 حزيران (يونيو) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0
". يحتوي الإصدار 2.5.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 2.4.0
- دمج CreationExtras: بإمكان "
Navigation
" الآن توفيرViewModelProvider.Factory
بدون حالة من خلال "CreationExtras
" في دورة الحياة2.5.0
.
عمليات التنقل الآمنة
- أجرى
Navigation Safe Args
ترقية لتبعيةAndroid Gradle Plugin
للاعتماد على7.0.4
، ما أدّى إلى خفض التوافق مع إصدارات AGP قبل7.0
. - تمت إتاحة استخدام سمة Build.grale في مساحة الاسم بدلاً من applicationId.
تغييرات أخرى
- لم تعُد واجهة برمجة التطبيقات
visibleEntries
تجريبية وتوفّر وظيفة لاسترداد جميع الإدخالات التي تظهر وجهتها حاليًا وفقًا لـNavController
.
الإصدار 2.5.0-rc02
15 حزيران (يونيو) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-rc02
". يحتوي الإصدار 2.5.0-rc02 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح عطل حدث بسبب التبديل السريع بين الوجهات السفلية عند استخدام ميزة "إنشاء التنقل"
NavHost
. (I3979a، b/234054916) - لن تتعطل
Navigation SafeArgs
بعد الآن عند استخدامapplicationIdSuffix
ومساحة اسم لا تتضمّنapplicationId
، أو عند اختلافapplicationId
ومساحة الاسم. (I754b1، b/233119646) - تتضمن
NavArgument
الآن دالةtoString()
مخصّصة لعرض القيم الداخلية للوسيطة. (I900a8)
الإصدار 2.5.0-rc01
11 أيار (مايو) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-rc01
". يحتوي الإصدار 2.5.0-rc01 على هذه الالتزامات.
الميزات الجديدة
- تمت إضافة قاعدة Lint جديدة للتحذير من وضع عناصر
<deeplink>
داخل<activity>
في الملفnavigation.xml
(Ic15a5، b/178403185).
إصلاح الأخطاء
- يتم الآن التخلص من النطاقات القابلة للتعديل في
NavHost
وDialogHost
بالترتيب المتوقَّع، أي يتم التخلص منها قبل الكائنات الخارجية. (I157e6) - تستخدم ميزة التنقل الآمن في التنقل الآن
PathSensitivity.RELATIVE
فيArgumentsGenerationTask
للسماح بإعادة تحديد موقع ذاكرة التخزين المؤقت. وهذا يعني أنّه يمكن الآن إعادة استخدام إدخال ذاكرة التخزين المؤقت من إصدار CI إلى إصدار محلي. (I5f67c، b/173420454) - تم تعديل قاعدة
UnrememberedGetBackStackEntryDetector
Lint لضمان أنّ الاستدعاءremember
الذي تحيط بالاستدعاءgetBackStackEntry()
يتم أيضًا تمريره في عنصرNavBackStackEntry
كمفتاح.(Ib7081، b/227382831)
الإصدار 2.5.0-beta01
20 نيسان (أبريل) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-beta01
". يتضمّن الإصدار 2.5.0-beta01 هذه الالتزامات.
إصلاح الأخطاء
- يستخدم تطبيق
DialogNavigator
الآنpopWithTransition
عند تنفيذ مكالمةdismiss()
. يؤدي ذلك إلى إصلاح حالة سباق عند استخدام وجهةViewModel
ضمنdialog
والتي قد تؤدي إلىIllegalStateException
عند إغلاق مربّع الحوار من خلال الرجوع إلى النظام أو النقر خارج مربّع الحوار للخروج. (Id7376، b/226552301)
تعديلات التبعية
- يعتمد التنقل الآن على دورة الحياة
2.5.0-beta01
، مع إصلاحIllegalStateException
عند دمجNavHost
داخلNavHost
آخر في علامة تبويب تنقّل سفلية غير أساسية عند استخدام حِزم خلفية متعددة.
الإصدار 2.5.0-alpha04
6 نيسان (أبريل) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-alpha04
". يحتوي الإصدار 2.5.0-alpha04 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- لم يعد تطبيق "
visibleEntries
" في مرحلة تجريبية. (I4829f، b/225394514)
إصلاح الأخطاء
- يعتمد NavHost الآن على
visibleEntries
منNavController
لتحديد الإدخالات المطلوب إنشاؤها. وهذا يعني أنّه عند استخدام NavHost المتداخل، يجب أن يتم الآن تحريكNavHost
الداخلي بشكل صحيح. (I4ba2b، b/225394514) - يعتمد عمود "
visibleEntries
" من "StateFlow
" المقدَّم من "NavController
" الآن على حالة "الحد الأقصى لمراحل النشاط" على مستوى الإدخال بدلاً من حالة "مراحل النشاط" الحالية. وهذا يعني أنّه حتى إذا انخفضت دورة حياة المضيف فيnavController
عن "بدء"، لن تتغيّر قائمة العناصر المرئية. (I9e2a8، b/225394514) - يتيح
SavedStateViewFactory
الآن استخدامCreationExtras
حتى في حال إعداده باستخدامSavedStateRegistryOwner
. وفي حال توفير إضافات، يتم تجاهل الوسيطات التي تم إعدادها. (I6c43b، b/224844583) - بإمكان
NavDeepLink
الآن تحليل Uris باستخدام مَعلمة طلب بحث واحدة بدون قيمة. (I0efe8، b/148905489) - تُعتبر السلسلة الفارغة الآن وسيطات صالحة في الروابط لصفحات في التطبيق. (I70a0d، b/217399862)
- لن تتعطل
Navigation Safe Args
بعد الآن عند استخدام مساحات الاسم ولا تتوفرAndroidManifest.xml
. (I17ccf، b/227229815)
الإصدار 2.5.0-alpha03
23 شباط (فبراير) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-alpha03
". يحتوي الإصدار 2.5.0-alpha03 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- يمكنك الآن تمرير
CreationExtras
إلىby navGraphViewModels
لإنشاءViewModel
. (I29217، b/217618359)
إصلاح الأخطاء
- يتيح
NavDeepLinks
الآن استخدام أحرف أسطر جديدة مشفّرة بشكل صحيح ومضمّنة في معرّفات الموارد المنتظمة (URI) للمسارات/الروابط لصفحات في التطبيق. (I513d1، b/217815060) - سيعمل
CreationExtras
الآن بشكل صحيح عند استخدامه معNavBackStackEntries
لإنشاء نماذج عرض. (I69161، b/217617710) - تتيح ميزة "التنقل الآمن" الآن استخدام مساحة الاسم المحدّدة في
build.gradle
بدلاً من الحزمة في AndroidManifest. (I659ef، b/217414933)
الإصدار 2.5.0-alpha02
9 شباط (فبراير) 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-alpha02
". يحتوي الإصدار 2.5.0-alpha02 على هذه الالتزامات.
إصلاح الأخطاء
- من التنقل
2.4.1
: سيضبطNavHostFragment
الآنOnBackPressedDispatcher
بشكلٍ صحيح عند استخدام ربط العرض مع الرسوم البيانية المدمجة. (Ifbb51، b/214577959) - من التنقّل
2.4.1
: عند الربط بصفحة معيّنة من خلال عدةNavGraph
مدمجة، ستتضمّن الحزمة الخلفية الآن وجهات بدء وسيطة بشكلٍ صحيح. (I504c0، b/214383060)
الإصدار 2.5.0-alpha01
26 يناير 2022
تم إصدار "androidx.navigation:navigation-*:2.5.0-alpha01
". يحتوي الإصدار 2.5.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
- يتكامل
NavBackStackEntry
الآن مع ViewModel CreationExtras، التي تم تقديمها كجزء من دورة الحياة2.5.0-alpha01
. (Ib9fe2، b/207012490)
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في فشل الوصول إلى
ViewModel
الذي تم إنشاؤه عبرby navGraphViewModels()
منonCreate()
للجزء معIllegalStateException
. (I8a14d) NavDeepLink
s لن تفكّ ترميز الوسيطات مرتين بعد الآن بدون داعٍ، أي أنّ الوسيطات المناسبة يتم تمريرها الآن إلى وجهتك النهائية. (I31b0a، b/210711399)
الوسيطات الآمنة
- تعتمد Safe Args الآن على الإصدار 7.0.4 من مكوّن Android Gradle الإضافي. يعني هذا أنّ نهج التنقل الآمن لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنّها أصبحت متوافقة الآن مع الإصدار 7.1.0 والإصدارات الأحدث من نظام التشغيل Android Gradle Plugin. (I41c88 وb/213086135 وb/207670704)
الإصدار 2.4.2
الإصدار 2.4.2
6 نيسان (أبريل) 2022
تم إصدار "androidx.navigation:navigation-*:2.4.2
". يتضمّن الإصدار 2.4.2 عمليات الالتزام هذه.
إصلاح الأخطاء
- تم الانتقال إلى الصفحة السابقة من شريط التنقل
2.5.0-alpha03
: يتيحNavDeepLinks
الآن بشكلٍ سليم استخدام أحرف السطر الجديدة المشفرة والمضمّنة في معرّفات الموارد المنتظمة (URI) للمسارات/الروابط لصفحات في التطبيق. (I513d1، b/217815060) - تمت الإضافة من التنقل
2.5.0-alpha03
: تتيح ميزة Navigation SafeArgs الآن استخدام مساحة الاسم المحدّدة فيbuild.gradle
بدلاً من الحزمة في AndroidManifest. (I659ef، b/217414933) - تمت الإزالة من عنصر التنقل
2.5.0-alpha04
: لن يتعطلNavigation Safe Args
بعد الآن عند استخدام مساحات الأسماء ولا يتوفّرAndroidManifest.xml
. (I17ccf، b/227229815) - تم الرجوع إلى الصفحة السابقة من التنقل
2.5.0-alpha04
: تُعتبَر السلسلة الفارغة الآن وسيطات صالحة في الروابط لصفحات في التطبيق. (I70a0d، b/217399862)
الإصدار 2.4.1
الإصدار 2.4.1
9 شباط (فبراير) 2022
تم إصدار "androidx.navigation:navigation-*:2.4.1
". يتضمّن الإصدار 2.4.1 هذه الالتزامات.
إصلاح الأخطاء
- ستضبط
NavHostFragment
الآنOnBackPressedDispatcher
بشكل صحيح عند استخدام ربط العرض مع الرسوم البيانية المتداخلة. (Ifbb51، b/214577959) - عند الربط بصفحة معيّنة من خلال عدة
NavGraph
مدمجة، فإنّ الحزمة الخلفية تتضمّن الآن وجهات بدء وسيطة بشكلٍ صحيح. (I504c0، b/214383060) - تمت الرجوع إلى الصفحة السابقة من قسم التنقل
2.5.0-alpha01
: تم حل مشكلة عدم إمكانية الوصول إلى نموذج العرض الذي تم إنشاؤه عبرby navGraphViewModels()
منonCreate()
للجزء معIllegalStateException
. (I8a14d) - تم نقل البيانات من شريط التنقل
2.5.0-alpha01
: لم تعُدNavDeepLink
لفك ترميز الوسيطات مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير الوسيطات التي تم فك ترميزها بشكل صحيح إلى وجهتك النهائية. (I31b0a، b/210711399) - مصدر خلفي من التنقل
2.5.0-alpha01
: تعتمد Safe Args الآن على الإصدار 7.0.4 من مكوّن Android Gradle الإضافي. يعني هذا أنّ "التنقل الآمن" لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنّها أصبحت متوافقة الآن مع المكوّن الإضافي لنظام التشغيل Android Gradle Plugin 7.1.0 والإصدارات الأحدث. (I41c88 وb/213086135 وb/207670704)
الإصدار 2.4.0
الإصدار 2.4.0
26 يناير 2022
تم إصدار "androidx.navigation:navigation-*:2.4.0
". يحتوي الإصدار 2.4.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 2.3.0
- تمت إعادة كتابة جميع عناصر التنقّل باستخدام لغة البرمجة Kotlin. أدّى ذلك إلى تحسين إمكانية إلغاء قيم الفئات التي تستخدِم فئات عامة (مثل فئات
NavType
الفرعية). تم نقل جميع دوال إضافات Kotlin التي كانت جزءًا من عناصر-ktx
إلى العناصر الرئيسية الخاصة بها. سيستمر نشر عناصر-ktx
، ولكنها فارغة تمامًا. - يحتوي العنصر
navigation-fragment
الآن على تنفيذ مُعدّ مسبقًا لتنسيق من لوحتين عبر الإصدار الجديد منAbstractListDetailFragment
. يستخدم هذا الجزءSlidingPaneLayout
لإدارة لوحة القائمة (التي توفّرها فئتك الفرعية) وجزء التفاصيل الذي يستخدمNavHostFragment
كتنفيذ، كما هو موضّح في مثال التنفيذ. - توفّر طريقة
currentBackStackEntryAsFlow()
فيNavController
سمةFlow
تنبعث منها كلما تغيّرتNavBackStackEntry
الحالية. ويمكن استخدام هذا المسار كبديل لإدارةOnDestinationChangedListener
يدويًا. - توفّر NavController الآن إمكانية استرداد قائمة بجميع مثيلات
NavBackStackEntry
المرئية على أنهاStateFlow
عبر السمةvisibleEntries
التجريبية. - يمكن الآن توسيع فئة
NavType
لإنشاء NavTypes مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقُّل بطريقة آلية، مثل استخدام الرسم البياني للغة Kotlin DSL. يوفر التنقل الآن واجهات برمجة تطبيقات
findStartDestination()
وgetHierarchy()
التي يمكن استخدامها للمساعدة في تنفيذ واجهة مستخدم التنقل المخصصة.findStartDestination()
هي دالة إضافة علىNavGraph
ستحدّد وجهة البدء الفعلية التي سيتم عرضها عند الانتقال إلى الرسم البياني، حتى إذا كانتstartDestination
نفسها عبارة عنNavGraph
مدمجة.getHierarchy()
هي دالة علىNavDestination
يمكن استخدامها للتحقق مما إذا كانت وجهة معيّنة ضمن التدرج الهرمي لوجهة أخرى.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل
NavigationUI
طريقة أخذتBottomNavigationView
لتأخذ فئتها الفائقة التي تم تقديمها في المادة1.4.0
فيNavigationBarView
. يسمح ذلك باستخدام هذه الطرق معNavigationRailView
.عند تضخيم عنصر
<action>
عبر XML، يمكن لسمات الصور المتحركة استخدام سمات تم سحبها من المظهر باستخدام بنيةapp:enterAnim="?attr/transitionEnter"
.تنشئ Safe Args الآن طريقة
fromSavedStateHandle()
لكل فئةNavArgs
. (#122، b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
مسارات التنقل وKotlin DSL
اعتمدت الإصدارات السابقة من التنقل على كل وجهة لها رقم تعريف عدد صحيح ثابت من شأنه أن يعرّفها بشكل فريد من الوجهات التابعة له ويسمح لك بالانتقال إلى navigate()
إلى تلك الوجهة إما مباشرةً أو من خلال إجراء. على الرغم من أنّ ذلك يبقى صالحًا ومفيدًا، لا سيما في الحالات التي تحدّد فيها الرسم البياني للتنقل في ملف XML ويمكنك استخدام ثوابت R.id
التي يتم إنشاؤها تلقائيًا أو الوسيطات الآمنة (التي تستخدم تلك الثوابت لإنشاء الرمز في وقت الإصدار)، إلا أنّ هذا النظام المكوّن من الأعداد الصحيحة الفريدة لم يعبّر عن المعنى الدلالي والتعبير المطلوب لإتاحة الرسومات البيانية الديناميكية بالكامل التي يتم إنشاؤها آليًا في وقت التشغيل من خلال Navigation Kotlin DSL.
يقدم هذا الإصدار خيارًا جديدًا لتحديد وجهة بشكلٍ فريد في رسم بياني للتنقل من خلال مساره. المسار هو String
يحدد المسار الفريد إلى وجهة. إنّ جميع طرق Kotlin DSL التي استخدمت رقم تعريف وجهة تم إيقافها نهائيًا واستبدالها بواجهة برمجة تطبيقات مكافئة تتخذ مسارًا.
يجب التعامل مع كل مسار على أنّه جزء "المسار" في Uri
الذي يحدّد هذه الوجهة، مثلاً home
وprofile/{userId}
وprofile/{userId}/friends
وما إلى ذلك. عندما ترتبط هوية وجهة بجزء معيّن من المحتوى، يجب أن تكون هذه الوسيطات الديناميكية جزءًا من المسار، متّبعة القواعد نفسها التي تتّبعها الروابط الضمنية لصفحات في التطبيق.
إنّ جميع واجهات برمجة تطبيقات NavController
التي كانت تأخذ رقم تعريف فقط أصبحت لديها الآن حِمل زائد يستغرق مسار String
. يشمل ذلك navigate()
وpopBackStack()
وpopUpTo()
وgetBackStackEntry()
.
وقد ترتب على ذلك بعض الآثار على واجهة برمجة التطبيقات:
- تم إيقاف سمة
popUpTo
Kotlin على Kotlin DSL لصالحpopUpToId
. - تم إيقاف واجهة برمجة التطبيقات
getStartDestination()
لصالحgetStartDestinationId()
.
على عكس التنقل حسب رقم التعريف، يتّبع التنقّل على المسار القواعد نفسها التي تتّبعها الروابط الضمنية لصفحات معيّنة في التطبيق حيث يمكنك الانتقال مباشرةً إلى أي وجهة في أيّ رسم بياني مدمج، ما يضمن إمكانية استخدام هذه المسارات في المشاريع المتعدّدة الوحدات بدون إضافة رابط لموضع معيّن مرئي خارجيًا لكلّ وجهة.
إنشاء التنقل
يوفر عنصر navigation-compose
التكامل بين مكوِّن التنقل وJetpack Compose. تستخدم وظائف @Composable
كوجهات في تطبيقك.
يوفّر هذا الإصدار ما يلي:
NavHost
مركبة تسمح لك بإنشاء رسم بياني للتنقّل عبر Kotlin DSL باستخدام الوجهتَينcomposable
وdialog
، بالإضافة إلى أجهزة التنقّل الاختيارية، مثل مواد التنقل من Accompanist.- الدعم الإلزامي لمزج البيانات بين الوجهات. يمكن استخدام Accompanist Navigation Animation للتحكم في عمليات انتقال الدخول والخروج باستخدام واجهات برمجة تطبيقات Compose التجريبية.
- تحديد نطاق
Lifecycle
لكل وجهة قابلة للتعديل لا تصل كل وجهة إلى الحالةRESUMED
إلا عند انتهاء أي عمليات انتقال عند الدخول وخفضها على الفور إلىSTARTED
عند بدء أي عمليات نقل خروج، ما يسمح لك بتجنُّب جميع مشاكلIllegalStateException
واللمس المتعدد من خلال تشغيل طلبnavigate
فقط عند ضبطLifecycle
علىRESUMED
. - تحديد نطاق
ViewModel
(عبر واجهة برمجة تطبيقاتviewModel()
لإنشاء نموذج عرض نموذج دورة الحياة2.4.0
أوhiltViewModel()
من إنشاء شريط التنقّل السريع1.0.0
على مستوى الوجهة، ما يوفّر نطاقًا يتخطى تغييرات الإعدادات ويكون في الحزمة الخلفية (عندما يتم التخلص من المحتوى المركّب) وإشارة في ViewModelsonCleared()
تشير إلى التخلص الدائم وتنظيف الحالة المرتبطة بـNavBackStackEntry
. - تحديد نطاق حالة
rememberSaveable
على مستوى الوجهة، ما يضمن حفظ جميع حالات الإنشاء واستعادتها تلقائيًا عند الرجوع إلى وجهة معيّنة. - توفير الدعم الكامل لحفظ واستعادة حالة "
NavController
" وولاية وجهتها بعد انتهاء العملية أو إعادة الترفيه - الدمج التلقائي مع زر الرجوع في النظام
إتاحة تمرير الوسيطات وإرفاق روابط لصفحات معيّنة بالوجهات وعرض نتيجة إلى الوجهات السابقة
إنشاء أدوات مساعدة محددة في
rememberNavController()
وcurrentBackStackEntryAsState()
للسماح بحالة الرفع وربطNavController
بالعناصر القابلة للتعديل خارجNavHost
(مثل شريط التنقّل السفلي).
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
راجع دليل التنقل في إنشاء الرسائل للحصول على مزيد من المعلومات.
عدة حِزم خلفية
تكون NavController مسؤولة عن إدارة الحزمة الخلفية من الوجهات، وإضافة الوجهات إلى الحزمة الخلفية عند navigate()
إليها وإزالتها عند طلب popBackStack()
أو تشغيل زر الرجوع في النظام. تم توسيع فئة NavOptions
الحالية والدمج في عناصر <action>
في ملف XML الخاص بالرسم البياني للتنقّل لإتاحة حفظ الحزمة الخلفية واستعادتها.
في إطار هذا التغيير، تحفظ الآن طرق NavigationUI
الخاصة بـ onNavDestinationSelected()
وBottomNavigationView.setupWithNavController()
وNavigationView.setupWithNavController()
حالة الوجهات المنبثقة وتستعيدها تلقائيًا، ما يتيح إتاحة استخدام حزم رجوع متعددة بدون أي تغيير في الرمز. عند استخدام التنقل مع الأجزاء، هذه هي الطريقة الموصى بها للتكامل مع مكدسات خلفية متعددة.
يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:
في ملف XML الخاص بالتنقل، يمكن الآن للعنصر
<action>
استخدام السمات المنطقيةapp:popUpToSaveState
وapp:restoreState
لحفظ حالة أي وجهات انبثقت عبرapp:popUpTo
واستعادة الحالة المرتبطة بالوجهة التي تم تمريرها باعتبارهاapp:destination
:<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
Kotlin DSL، يمكنك إضافة السمة المنطقيةrestoreState
والموقع المنطقيsaveState
في أداة إنشاءpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
عند إنشاء كائن
NavOptions
يدويًا عبرNavOptions.Builder
، يمكنك استخدامsetRestoreState()
والحمل الزائد الجديد إلىsetPopUpTo()
الذي يأخذ مَعلمةsaveState
إضافية.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);
يمكن أن تتضمن الطلبات الآلية إلى
popBackStack()
الآن مَعلمةsaveState
إضافية.ويمكنك استخدام الطريقة
clearBackStack()
لمحو أي حالة تم حفظها باستخدامpopBackStack()
أوpopUpToSaveState
.
في جميع الحالات، سيحفظ NavController
حالة كل NavBackStackEntry
ويستعيدها، بما في ذلك أي نُسخ ViewModel
على نطاق وجهة التنقّل. تم تحديث واجهات برمجة التطبيقات في Navigator
لتفعيل كل Navigator
من أجل إتاحة حفظ حالتها الخاصة واستعادتها.
التغييرات في السلوك
- يضيف
NavDeepLinkBuilder
الآنPendingIntent.FLAG_IMMUTABLE
إلىPendingIntent
الذي تم عرضه فيcreatePendingIntent()
، ما يضمن عمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف الإصدار 12 من نظام التشغيل Android. - يعتمد التنقّل الآن على
دورة الحياة
2.3.1
ويشير الآن إلى الطرقsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، الطرق التي تعمل على تعديلNavBackStackEntry
Lifecycle
، على أنّها@MainThread
، ما يؤدي إلى مواءمة التنقّل مع عملية تنفيذ سلسلة التعليمات الرئيسية التي تم تقديمها في دورة الحياة2.3.0
. - تتحقّق الروابط لصفحات في التطبيق الآن من أنّ جميع الوسيطات المطلوبة (تلك التي لا تتضمّن قيمًا تلقائية) متوفّرة في
Uri
. - تعتبر الوسيطات التي تم تحليلها
NavDeepLink
الآن علامات الجنيه نفسها كعلامات استفهام كفاصل بين قطاعات المسار، ما يمنع امتداد الوسيطة على علامة الجنيه. - عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن وسيطات بدون قيم تلقائية قبل تلك التي تتضمّن قيمًا تلقائية كمَعلمات.
- عند إنشاء الوسيطات، تضع الوسيطات الآمنة الآن المعلمات بدون قيم افتراضية قبل تلك ذات القيم الافتراضية.
- تعتمد "العمليات الآمنة" الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّه من المفترض ألا تتلقّى بعد الآن تحذير استخدام
applicationIdTextResource
.
المشاكل المعروفة
- تم إصلاحه في التنقل
2.5.0-alpha01
: سيتعذر الوصول إلىViewModel
التي تم إنشاؤها عبرby navGraphViewModels()
منonCreate()
للجزء معIllegalStateException
. (b/213504272) - تم إصلاحه في التنقل
2.5.0-alpha01
: Safe Args 2.4.0 غير متوافق مع المكوِّن الإضافي Android Gradle الإضافي 7.1.0 والإصدارات الأحدث. (b/213086135) - لا يؤدي الربط بصفحة معيّنة مع العديد من الرسوم البيانية للتنقُّل المدمَجة إلى إنشاء الحزمة الخلفية الكاملة بشكلٍ صحيح. (b/214383060)
الإصدار 2.4.0-rc01
15 كانون الأول (ديسمبر) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-rc01
". يحتوي الإصدار 2.4.0-rc01 على هذه الالتزامات.
التغييرات في السلوك
- تعتبر الوسيطات التي تم تحليلها في
NavDeepLink
الآن علامات الجنيه نفسها مثل علامات الاستفهام كفاصل بين الوسيطات. (I21309، b/180042703)
إصلاح الأخطاء
- لن تتجاهل الروابط لصفحات في التطبيق الوسيطات التي تحتوي على قيم مماثلة لاسم العنصر النائب. (If8017، b/207389470)
- لن تتعطل
NavController
بعد الآن عند تمييز وجهة مدمجة باستخدام الانتقالات بعد استعادةNavController
. (I0f7c9، b/205021623) - عند استخدام
startDestination
غير صالح، سيتم الآن عرض رسالة الخطأ تلقائيًا على مسار وجهة البدء في حال توفّره. (I86b9d، b/208041894)
إصلاح أخطاء إنشاء التنقل
- تم إصلاح العُطل المحتمل الذي نتج عن التبديل السريع بين وجهة البدء ووجهة أخرى باستخدام عناصر قائمة التنقُّل السفلي. (Ic8976، b/208887901)
- تمت الآن استعادة وجهة مربّع الحوار بشكل صحيح في أعلى الشاشة بعد تغيير الإعدادات أو إيقاف المعالجة. (I4c0dc، b/207386169)
- تم إصلاح إحدى المشاكل المتمثلة في إخفاق محاولة استرداد
ViewModel
منNavBackStackEntry
لمربع الحوار عند إغلاق مربع الحوار. (I6b96d، b/206465487) - تم إصلاح مشكلة عند استخدام وجهات
activity
معNavHost
لميزة "إنشاء التنقل"، والتي قد تؤدي إلى عمليات إعادة إنشاء لانهائية. (I8f64c) - تم إصلاح تسرّب في ميزة "إنشاء التنقل" حيث كان يحتفظ بمرجع النشاط القديم بعد تغيير الإعداد أو انتهاء العملية. (I4efcb، b/204905432)
إصلاح أخطاء الوسيطات الآمنة
- لم يعد
SafeArgs
يتعطل عند محاولة استعادة الصفائف المخصصة القابلة للدمج بعد توقّف العملية. (I618e8، b/207315994) - تم إصلاح خطأ في الوسيطات الآمنة لا تسمح للصفائف المنطقية بأن يكون لها قيمة
null
. (I8c396، b/174787525)
الإصدار 2.4.0-beta02
3 تشرين الثاني (نوفمبر) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-beta02
". يتضمّن الإصدار 2.4.0-beta02 هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- إنّ معالجة الروابط الفاضحة والضمنية لصفحات معيّنة في التطبيق أصبحت تعمل الآن تلقائيًا على إضافة العلامة
saveState
عند الانتقال إلى رسم بياني آخر، ما يضمن أن يعمل الرمز البرمجي مثلNavigationUI.setupWithNavController
والرمز الذي يستخدم حِزم خلفية متعدّدة على النحو المتوقّع. (Ic8807)
التغييرات في السلوك
- يتم الآن تجميع أنماط الروابط لصفحات في التطبيق بشكل كسول في NavDeepLink بدلاً من تجميعها أثناء التضخم. ومن المفترض أن يؤدي ذلك إلى تحسين وقت تضخم الرسومات البيانية للتنقل التي تتضمّن روابط لصفحات في التطبيق. (b8d257، b/184149935)
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في دفع NavBackStackEntries إلى أسفل إلى
Lifecycle.State.CREATED
بعد الانتقال إلىLifecycle.State.STARTED
عند إضافةNavHost
مباشرةً إلىsetContent()
للنشاط. (Ia5ac1، b/203536683) - تم إصلاح حالة سباق تؤدي إلى عدم إغلاق وجهة
DialogFragment
من الحزمة الخلفية قبل عرض مربّع الحوار، ما أدّى إلى حدوث عطل عندما أغلق المستخدم مربّع الحوار يدويًا. (I687e5) - تم إصلاح المشكلة المتمثلة في عرض واجهة برمجة تطبيقات
onNavDestinationSelected
علىNavigationUI
التي تعرضtrue
حتى إذا لم تكن تضيفnavigate()
إلى الرسم البياني للتنقل. وهي تستخدم الآن المنطق نفسه المستخدَم داخليًا فيsetupWithNavController
لاختيارMenuItem
المرتبطة بالوجهة الحالية فقط باستخدامhierarchy
للوجهة. (I2b053)
الإصدار 2.4.0-beta01
27 تشرين الأول (أكتوبر) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-beta01
". يتضمّن الإصدار 2.4.0-beta01 هذه الالتزامات.
الميزات الجديدة
- يمكنك الآن استخدام
by navGraphViewModel
مع مسار كبديل لاستخدام معرّف، وذلك بهدف دعم استخدام Kotlin DSL بشكلٍ أفضل مع الأجزاء. (I901e3، b/201446416)
تغييرات واجهة برمجة التطبيقات
- لا تزال واجهة برمجة التطبيقات
visibleEntries
API في مرحلة تجريبية. (I93f6f)
إصلاح الأخطاء
- لن يتم تدمير ViewModels بعد الآن عند مقاطعة عمليات الانتقال من خلال التنقل ذهابًا وإيابًا بين الشاشات نفسها (Id52d8 ، b/200817333)
- لم تعُد وسيطات
NavDeepLink
الفارغة تتطلب قيمة تلقائية عند إضافة روابط لصفحات في التطبيق إلىNavDestination
. (I5aad4، b/201320030) - لا تُعد NavBackStackEntries الآن ذات دورات حياة مختلفة متساوية بعد الآن. وهذا يعني أن NavHost ستعيد إنشاء جميع الوجهات بشكلٍ صحيح عند الانتقال باستخدام oneTop وعند إعادة اختيار عناصر القائمة السفلية. (I1b351، b/196997433)
- تم إصلاح مشكلة
AbstractListDetailFragment
التي تسبّبت في تجاهل أو تجاهل السمتَينlayout_width
وlayout_weight
في جزء القائمة الذي يعرضهonCreateListPaneView()
. (f5fbf3) - تبقى الحالة المرئية لوجهات مربّع الحوار
الآن متزامنة بشكل صحيح مع
حالة
DialogFragmentNavigator
. وهذا يعني أنّ استدعاء واجهة برمجة التطبيقاتdismiss()
غير المتزامنة لـDialogFragment
الآن يؤدي إلى محو جميع وجهات الحوار أعلى مربّع الحوار الذي تم إغلاقه الآن بشكل صحيح. لا يؤثّر ذلك في الحالات التي تستخدم فيهاpopUpTo
أوpopBackStack()
لإغلاق مربّع الحوار. (I77ba2) AbstractAppBarOnDestinationChangedListener
به الآن رسائل خطأ أكثر وضوحًا فيonDestinationChanged()
. (Ie742d)
الإصدار 2.4.0-alpha10
29 أيلول (سبتمبر) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha10
". يحتوي الإصدار 2.4.0-alpha10 على هذه الالتزامات.
الميزات الجديدة
- توفّر NavController الآن إمكانية استرداد قائمة بجميع مثيلات
NavBackStackEntry
المرئية عبرvisibleEntries
StateFlow (Ia964e) - يأخذ
rememberNavController()
الآن مجموعة اختيارية من مثيلاتNavigator
التي ستتم إضافتها إلىNavController
التي تم إرجاعها لتوفير دعم أفضل لأجهزة التنقل الاختيارية، مثل تلك من Accompanist Navigation Material. (I4619e)
إصلاح الأخطاء
- لن تتعطل ميزة الانتقال الديناميكي عند إعادة إنشاء النشاط. (Ifa6a3، b/197942869)
- تم إصلاح مشكلة في زر الرجوع في النظام والتي تحدث فقط بعد العودة إلى وجهة قابلة للتعديل تحتوي على
NavHost
. (3ed148، b/195668143) - تنشئ SafeArgs الآن الوسيطات للحقلَين
fromBundle()
وfromSavedStateHandle()
بترتيب المَعلمات المناسب. (I824a8، b/200059831)
الإصدار 2.4.0-alpha09
15 أيلول (سبتمبر) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha09
". يحتوي الإصدار 2.4.0-alpha09 على هذه الالتزامات.
الميزات الجديدة
- يمكنك الآن استخدام طريقة
clearBackStack()
لمحو أي حالة تم حفظها باستخدامpopBackStack()
أوpopUpToSaveState
. (I80a0f) - يمكنك الآن تمرير قائمة بالوسيطات و/أو الروابط لمواضع معيّنة إلى أداة إنشاء الرسم البياني للتنقل المضمّن وستتم إضافتها تلقائيًا إلى الرسم البياني الناتج. (I8a470، b/182545357)
تغييرات واجهة برمجة التطبيقات
- أصبحت دالة
navArgument
Kotlin DSL الآن جزءًا منnavigation-common
بدلاً منnavigation-compose
. سيتطلب ذلك تحديث عمليات الاستيراد لمواصلة استخدام هذه الدالة. (I1d095)
التغييرات في السلوك
- عند إنشاء الوسيطات، تضع الوسيطات الآمنة الآن المعلمات بدون قيم افتراضية قبل تلك ذات القيم الافتراضية. (I89709، b/198493585)
إصلاح الأخطاء
- عند استخدام ميزة "إنشاء التنقل"، ستكون قيمة الرسومات البيانية للتنقل
DESTROYED
فقط عندما تكون جميع عناصرها الثانويةDESTROYED
. (I86552، b/198741720) - لم تعُد وسيطات
NavDeepLink
الفارغة تتطلب قيمة تلقائية. (Ia14ef، b/198689811) - سيؤدي استدعاء
setGraph()
باستخدام رسم بياني جديد الآن إلى محو أي تكدسات خلفية محفوظة بالإضافة إلى سلوكها السابق المتمثل في تمييز الحزمة الخلفية. (I97f96) - تم إصلاح المشكلة المتمثلة في عدم إرسال إشعارات
OnDestinationChangedListener
وcurrentBackStackEntryFlow
عند استخدامlaunchSingleTop
. (Iaaebc)
تعديلات التبعية
- تعتمد ميزة "إنشاء النشاط" الآن على الإصدار 1.3.1 من إنشاء النشاط. (I05829)
- تعتمد ميزة إنشاء عناصر التنقّل الآن على
إنشاء نموذج عرض نموذج لدورة الحياة
2.4.0-beta01
. (Ib86a3)
الإصدار 2.4.0-alpha08
1 أيلول (سبتمبر) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha08
". يحتوي الإصدار 2.4.0-alpha08 على هذه الالتزامات.
الميزات الجديدة
- يمكن الآن توسيع فئة
NavType
لإنشاء NavTypes مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقُّل بطريقة آلية، مثل استخدام الرسم البياني للغة Kotlin DSL. (I78440، b/196871885)
التغييرات في السلوك
- عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن وسيطات بدون قيم تلقائية قبل تلك التي تتضمّن قيمًا تلقائية كمَعلمات. (Idb697، b/188855904)
- تتحقّق الروابط لصفحات في التطبيق الآن من أنّ جميع الوسيطات المطلوبة (تلك التي لا تتضمّن قيمًا تلقائية) متوفّرة في
Uri
. (#204، b/185527157)
إصلاح الأخطاء
- وعند استخدام الترميزَين
getBackStackEntry
وpreviousBackStackEntry
داخل composable() ، بالتزامن معremember()
، لن يؤدي ذلك إلى استثناء عدم توفّر أي وجهة في الحزمة الخلفية بعد ذلك. (I75138، b/194313238) - تتم الآن إعادة إنشاء ميزة "إنشاء التنقل" بشكل صحيح عند تغيير وسيطات تكديس التنقل
واستخدام
launchSingleTop=true
. (Iebd69، b/186392337) - لن تظهر علامة
ArrayIndexOutOfBoundsException
بعد الآن عند الاتصال بـsetGraph
باستخدام رسم بياني يضم 13 أو 29 وجهة. (I1a9f1، b/195171984) - من المفترض ألا يتسبب منشئ JavaScript SafeArgs في إصدار تحذيرات من الوبر عند إنشاء فئات Args. (I1a666، b/185843837)
المساهمة الخارجية
- نشكرك على ospixd للتأكّد من أنّ الروابط لصفحات في التطبيق تتحقّق من توفّر جميع الوسيطات المطلوبة (التي لا تحتوي على قيم تلقائية) في
Uri
. (#204، b/185527157)
الإصدار 2.4.0-alpha07
18 آب (أغسطس) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha07
". يحتوي الإصدار 2.4.0-alpha07 على هذه الالتزامات.
إصلاح الأخطاء
- تحفظ ميزة "إنشاء التنقل" الآن الحالة بشكل صحيح بعد تغييرات التهيئة وعند تغيير الرسوم البيانية أثناء استخدام ميزة "التكديس الخلفي" المتعدد. (If5a3d، b/195141957)
- لن تؤدي إعادة اختيار علامة التبويب نفسها عند استخدام ميزة التنقل في الإنشاء باستخدام مكدسات خلفية متعددة إلى ظهور شاشة فارغة بعد الآن. (I860dc، b/194925622)
- تلاحظ
NavHost
الآن التغييرات فيLifecycle.State
منNavBackStackEntry
، ما يعني أنّ استخدامNavHost
في أحد الأجزاء الآن ستتم إعادة تركيبه بشكل صحيح مع تغيُّر مراحل النشاط بدلاً من أن تصبح الشاشة فارغة. (I4eb85، b/195864489) - تم إصلاح المشكلة المتمثلة في إغلاق
DialogFragment
لن يؤدي إلى تعديل حالةNavController
بشكل صحيح بعد إعادة إنشاء نشاطك (أي بعد تغيير الإعدادات). (Icd72b) - تم إصلاح المشكلة المتمثلة في عدم تسبب تمييز وجهة مربع الحوار في تحديث معالجة زر الرجوع في نظام NavController، ما قد يتسبب في اعتراض NavController لزر الرجوع على الرغم من عدم وجود أي مكدس خلفي ينبثق. (If3b34)
- تنشئ الوسيطات الآمنة الآن تلقائيًا طريقة
toSavedStateHandle
للوسيطات التي يمكن استخدامها لاختبار رمزViewModel
. (If1e2d، b/193353880)
الإصدار 2.4.0-alpha06
4 آب (أغسطس) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha06
". يحتوي الإصدار 2.4.0-alpha06 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية الطريقتين
requireSlidingPaneLayout()
وrequireDetailPaneNavHostFragment()
فيAbstractListDetailFragment
إلىgetSlidingPaneLayout()
وgetDetailPaneNavHostFragment()
على التوالي. (I34a08)
التغييرات في السلوك
- عند التنقّل باستخدام صور متحركة (مثل
Crossfade
)، لن يصلLifecycle
للوجهة الجديدة الآن إلىRESUMED
إلا عند اكتمال الحركة. (If0543 وb/172112072 وb/194301889) - يضبط
NavHost
في ميزة التنقل في إنشاء الرسم البياني الآن كجزء من المقطوعة الأولى. (Ieb7be)
إصلاح الأخطاء
- لم يعد عرض الوجهة الأخيرة من الرسم البياني للتنقل يؤدي إلى ظهور علامة
ClassCastException
. (If0543 وb/172112072 وb/194301889) - تم إصلاح مشكلة
NullPointerException
التي تحدث عند إضافة رابط لصفحة في التطبيق بدونUri
وأثناء التنقّل عبر مسار أو رابط لصفحة في التطبيق. (938a0c، b/193805425) - تم إصلاح مشكلة في "إنشاء التنقل" والتي كانت يتعذّر فيها وصول
NavBackStackEntry
المرتبط بصفحة معيّنة في التطبيق إلى حالةRESUMED
. (I192c5) - تم إصلاح المشكلة المتمثلة في عدم تسبب فرق وجهة مربع الحوار في تحديث معالجة زر الرجوع في نظام NavController، ما قد يتسبب في اعتراض وحدة التحكم في التنقل لزر الرجوع على الرغم من عدم وجود أي مكدس خلفي للانبثاق. (aosp/1782668)
الإصدار 2.4.0-alpha05
21 تموز (يوليو) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha05
". يحتوي الإصدار 2.4.0-alpha05 على هذه الالتزامات.
التغييرات في السلوك
- تستخدم ميزة "
NavHost
" في ميزة "إنشاء التنقل" الآن دائمًا "التلاشي المتقاطع" عند التنقل عبر الوجهات. (I07049، b/172112072) - يمكنك الآن إجراء تغييرات على الرسم البياني لـ NavHost. سيتم اعتبار الرسوم البيانية التي تحتوي على نفس الوجهة والوجهة في الرسم البياني
مساويةً، ولن تؤدي إلى محو حزمة
NavController
العكسية. (I0b8db، b/175392262)
إصلاح الأخطاء
- تم إصلاح
NoSuchElementException
عند استدعاءpopBackStack()
من داخلLifecycleObserver
مرفقًا بـNavBackStackEntry
بسبب تعديلات المستخدم على حالة NavController. (I64621) - يتيح
AbstractListDetailFragment
الآن إزالةSlidingPaneLayout
تمامًا من حزمة APK عند عدم استخدامAbstractListDetailFragment
. (I611ad) - يلغي
NavGraph
وNavDestination
الآن طريقة يساوي، لذا سيعتبر كائنان لهما نفس القيم متساويتين. (I166eb، b/175392262)
الإصدار 2.4.0-alpha04
1 تموز (يوليو) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha04
". يحتوي الإصدار 2.4.0-alpha04 على هذه الالتزامات.
الميزات الجديدة
- يحتوي العنصر
navigation-fragment
الآن على تنفيذ مُعدّ مسبقًا لتنسيق من لوحتين عبر الإصدار الجديد منAbstractListDetailFragment
. يستخدم هذا الجزءSlidingPaneLayout
لإدارة لوحة القائمة (التي توفّرها فئتك الفرعية) وجزء التفاصيل الذي يستخدمNavHostFragment
كتنفيذ، كما هو موضّح في مثال التنفيذ. (Iac4be، b/191276636) - أصبح
NavHost
من العناصرnavigation-compose
يتيح الآن استخدام وجهاتdialog
بالإضافة إلى وجهاتcomposable
. سيتم عرض كل وجهات من مربّعات الحوار هذه ضمنDialog
موضع إعلان، عائمًا فوق وجهةcomposable
الحالية. (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية الدالة
add
فيNavigatorState
لتصبحpush
. يجب تغيير جميع المكالمات الحالية إلىadd()
إلى Push(). (Ie89fc، b/172112072) - يمكن لمثيلات
Navigator
المخصّصة الآن استخدام واجهات برمجة التطبيقاتpushWithTransaction
وpopWithTransition
علىNavigatorState
لإرسال وجهة أو إبرازها على نحو غير متزامن. تجدر الإشارة إلى أنّه لم يتم استخدام واجهات برمجة التطبيقات هذه إلى الآن من خلال أي من برامج التنقّل المضمّنة. (Ic4d7c، b/172112072)
التغييرات في السلوك
- يضيف
NavDeepLinkBuilder
الآنPendingIntent.FLAG_IMMUTABLE
إلىPendingIntent
الذي تم عرضه فيcreatePendingIntent()
، ما يضمن عمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف الإصدار 12 من نظام التشغيل Android. (If8c52)
إصلاح الأخطاء
- تم إصلاح مشكلة في
<include-dynamic>
حيث لا يتم تمرير الوسيطات التي يتم تمريرها إلى الرسم البياني بشكل صحيح إلى الرسم البياني المضمن ديناميكيًا. (I3e115) - تم إصلاح
NullPointerException
عند الانتقال إلى وجهة باستخدام وسيطةstring[]
بقيمة تلقائية تبلغ@null
. (I1fbe8) - يمكنك إضافة قواعد ProGuard لـ
@Navigator.Name
، وحلّ المشاكل عند استخدام الوضع الكامل R8 3.1. (I2add9، b/191654433) - لن يتعذّر تفعيل SafeArgs بعد الآن عند إنشاء تطبيقك باستخدام
إصدارات
Kotlin
قبل1.5.0
. (Icd1ff، b/190739257)
الإصدار 2.4.0-alpha03
16 حزيران (يونيو) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha03
". يحتوي الإصدار 2.4.0-alpha03 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في الحاجة إلى مكالمتين
navigate()
للانتقال إلى رسم بياني ديناميكي مضمّن. (I7785c، b/188859835) - تم إصلاح انحدار تم طرحه في
التنقل
2.4.0-alpha01
حيث لن يؤديsetupActionBarWithNavController()
إلى إزالة الرمز لأعلى بشكل صحيح عندما تكون في وجهة ذات مستوى أعلى. (I5d443، b/189868637) - تم إصلاح
IllegalStateException
عند استدعاءpopBackStack()
بعد إظهار الرسم البياني الجذري لـ NavController. (I2a330، b/190265699) - يتم الآن تطبيق قواعد ProGuard لـ
by navArgs()
بشكل صحيح عند استخدامnavigation-common
أو أي عناصر تستند إليه. (I68800، b/190082521) - إنّ
OnDestinationChangedListener
الذي يتصلnavigate()
في المرة الأولى التي يتلقّى فيها الآن معاودة الاتصال يتلقّى الآن معاودة الاتصال الثانية بالشكل المناسب مع الوجهة التي يتم الانتقال إليها. (Ie5f9e، b/190228815) - لم تعد Safe Args تتعطل عند استخدامها مع وحدات الميزات الديناميكية والإصدار 7.0 من AGP أو الإصدارات الأحدث. (I69518، b/189966576)
مشكلة معروفة
- لن تنجح الوسيطات الآمنة مع ظهور الخطأ
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
عند استخدام Gradle6.7.0
بسبب الاعتماد على إصدار قديم من Kotlin. ويمكن حل هذه المشكلة من خلال التحديث لاستخدام Gradle 7.0. (b/190739257)
الإصدار 2.4.0-alpha02
2 حزيران (يونيو) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha02
". يحتوي الإصدار 2.4.0-alpha02 على هذه الالتزامات.
الميزات الجديدة
- أصبحت المسارات متوفرة الآن لوجهات "النشاط" و"الأجزاء" و"مربع الحوار"، وكذلك خلال واجهة برمجة التطبيقات Dynamic Navigation Kotlin DSL. (Ib5544 وIa617b وI22f96 وb/188914648 وb/188901565)
- تمت إضافة واجهات برمجة التطبيقات التجريبية في
NavigationUI
مؤقتًا للسماح بإيقاف حفظ حالتك. صحيح أنّ حفظ الحالة دائمًا هو السلوك الصحيح، إلا أنّ هناك استخدامات للمكتبات المتوقّفة نهائيًا (أي الأجزاء التي تم الاحتفاظ بها) لا يمكن استخدامها عند حفظ الحالة، ما يتيح للتطبيقات فرصة التحوّل ببطء من أي واجهات برمجة تطبيقات غير متوافقة. (Idf93c) يوفر التنقل الآن واجهات برمجة تطبيقات
findDestination()
وgetHierarchy()
التي يمكن استخدامها للمساعدة في تنفيذ واجهة مستخدم التنقل المخصصة.findDestination()
هي دالة إضافة علىNavGraph
ستحدد وجهة ضمن الرسم البياني.getHierarchy()
هي دالة علىNavDestination
يمكن استخدامها للتحقق مما إذا كانت وجهة معيّنة ضمن التسلسل الهرمي لأخرى.(I2932f، b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل طُرق NavigationUI التي استخدمت
BottomNavigationView
لتأخذ بدلاً من ذلك فئتها الفائقة التي تم تقديمها في Material1.4.0
في الإصدارNavigationBarView
. يسمح ذلك باستخدام هذه الطرق معNavigationRailView
. (Ib0b36، b/182938895)عند تضخيم عنصر
<action>
عبر XML، يمكن لسمات الصور المتحركة استخدام سمات تم سحبها من المظهر باستخدام بنيةapp:enterAnim="?attr/transitionEnter"
. (I07bc1، b/178291654)
تغييرات واجهة برمجة التطبيقات
- إن أدوات إنشاء Kotlin DSL التي تستخدم معرِّفًا تم إيقافها نهائيًا، ويجب استبدالها بأدوات الإنشاء التي تستخدم المسارات (I85b42، b/188816479) (I9f58f، b/188816479)
إصلاح الأخطاء
- يستخدم
DialogFragmentNavigator
الآنNavigatorState.pop()
API لإبلاغNavController
عند إغلاق مربّع حوار عن طريق الضغط على زر الرجوع في النظام أو النقر خارجه، ما يضمن أن تكون حالةNavController
متزامنة دائمًا مع حالة المستكشف. (I2ead9) لم يعُد التنقّل يعرض رمز الاستجابة
ConcurrentModificationException
عند معالجة قائمةOnDestinationChangedListeners
من خلال معاودة الاتصالonDestinationChanged
. (Ib1707، b/188860458)لم تعد الوسيطات الآمنة تتعطل عند محاولة إنشاء خصائص الاتجاه في Kotlin. (Id2416، b/188564435)
تمت إضافة تعليق توضيحي إلى طريقة setId في NavDestination الآن بشكل صحيح باستخدام
@IdRes
، وبالتالي لا تقبل سوى أرقام تعريف الموارد. (I69b80)أصبحت معلَمة int للسمة
findNode
الآنresId
بدلاً منresid
. (I7711d)
تعديل التبعية
- تعتمد "العمليات الآمنة" الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّه من المفترض ألا تتلقّى بعد الآن تحذير استخدام
applicationIdTextResource
. (I6d67b، b/172824579)
الإصدار 2.4.0-alpha01
18 أيار (مايو) 2021
تم إصدار "androidx.navigation:navigation-*:2.4.0-alpha01
". يحتوي الإصدار 2.4.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
- توفّر طريقة
currentBackStackEntryAsFlow()
فيNavController
سمةFlow
تنبعث منها كلما تغيّرتNavBackStackEntry
الحالية. ويمكن استخدام هذا المسار كبديل لإدارةOnDestinationChangedListener
يدويًا. (I19c4a و#89 وb/163947280)
عدة حِزم خلفية
تكون NavController مسؤولة عن إدارة الحزمة الخلفية من الوجهات، وإضافة الوجهات إلى الحزمة الخلفية عند navigate()
إليها وإزالتها عند طلب popBackStack()
أو تشغيل زر الرجوع في النظام. تم توسيع فئة NavOptions
الحالية والدمج في إدخالات <action>
في ملف XML الخاص بالرسم البياني للتنقل لإتاحة حفظ الحزمة الخلفية واستعادتها. (b/80029773)
في إطار هذا التغيير، تحفظ الآن طرق NavigationUI
الخاصة بـ onNavDestinationSelected()
وBottomNavigationView.setupWithNavController()
وNavigationView.setupWithNavController()
حالة الوجهات المنبثقة وتستعيدها تلقائيًا، ما يتيح إتاحة استخدام حزم رجوع متعددة بدون أي تغيير في الرمز. عند استخدام التنقل مع الأجزاء، هذه هي الطريقة الموصى بها للتكامل مع مكدسات خلفية متعددة. (Ie07ca)
يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:
في ملف XML الخاص بالتنقل، يمكن الآن للعنصر
<action>
استخدام السمات المنطقيةapp:popUpToSaveState
وapp:restoreState
لحفظ حالة أي وجهات انبثقت عبرapp:popUpTo
واستعادة الحالة المرتبطة بالوجهة التي تم تمريرها باعتبارهاapp:destination
:<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
Kotlin DSL، يمكنك إضافة السمة المنطقيةrestoreState
والموقع المنطقيsaveState
في أداة إنشاءpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
عند إنشاء كائن
NavOptions
يدويًا عبرNavOptions.Builder
، يمكنك استخدامsetRestoreState()
والحمل الزائد الجديد إلىsetPopUpTo()
الذي يأخذ مَعلمةsaveState
إضافية.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
يمكن أن تتضمن الطلبات الآلية إلى
popBackStack()
الآن مَعلمةsaveState
إضافية.
في جميع الحالات، سيحفظ NavController
حالة كل NavBackStackEntry
ويستعيدها، بما في ذلك أي نُسخ ViewModel
على نطاق وجهة التنقّل. تم تحديث واجهات برمجة التطبيقات في Navigator
لتفعيل كل Navigator
من أجل إتاحة حفظ حالتها الخاصة واستعادتها.
تم تحديث كل من ComposeNavigator
المستخدمة للوجهات composable
في ميزة "إنشاء التنقل" وFragmentNavigator
وDynamicFragmentNavigator
المستخدمة للوجهات <fragment>
في "التنقل مع أجزاء" لاستخدام واجهات برمجة تطبيقات المستكشف الجديدة ودعم حالة الحفظ والاستعادة.
مسارات التنقل
المسار هو عبارة عن String
يُحدِّد وجهة بشكلٍ فريد. على الرغم من أن هذا المفهوم كان يُستخدم سابقًا في ميزة إنشاء التنقل فقط، وقد ترقى الآن ليصبح جزءًا من واجهات برمجة التطبيقات الأساسية للتنقل. يوفر هذا بديلاً لاستخدام أرقام تعريف الأعداد الصحيحة عند إنشاء الرسم البياني من خلال التنقل Kotlin DSL. (b/172823546)
جميع واجهات برمجة التطبيقات التي كانت تأخذ رقم تعريف فقط أصبحت لديها الآن حِمل زائد يستغرق مسار String
. يشمل ذلك navigate()
وpopBackStack()
وpopUpTo()
وgetBackStackEntry()
.
وقد ترتب على ذلك بعض الآثار على واجهة برمجة التطبيقات:
- تم إيقاف سمة
popUpTo
kotlin على Kotlin DSL لصالحpopUpToId
. (I59c73، b/172823546) - تم إيقاف واجهة برمجة التطبيقات
getStartDestination()
لصالحgetStartDestinationId()
. (I0887f، b/172823546)
بالنسبة إلى المطوّرين الذين يختارون الترقية من الإصدارات السابقة من ميزة "إنشاء التنقل" إلى "إنشاء التنقل" 2.4.0-alpha01
، يعني هذا أن عمليات الاستيراد التالية بطرق الإضافات لم تعد ضرورية ويجب إزالتها:
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
تم استبدال الوسيطة KEY_ROUTE
بالسمة route
على NavDestination
، ما يتيح لك طلب بيانات navBackStackEntry.destination.route
مباشرةً.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة كتابة جميع عناصر التنقّل باستخدام لغة البرمجة Kotlin. أدّى ذلك إلى تحسين إمكانية إلغاء قيم الفئات التي تستخدِم فئات عامة (مثل فئات
NavType
الفرعية). تم نقل جميع دوال إضافات Kotlin التي كانت جزءًا من عناصر-ktx
إلى العناصر الرئيسية الخاصة بها. سيستمر نشر عناصر-ktx
، ولكنها فارغة تمامًا. (b/184292145) - تتيح "
NavDeepLinkBuilder
" الآن إضافة وجهات متعدّدة مختلفة إلى الحزمة التي تم إنشاؤها. (I3ee0d، b/147913689) - إضافة وظائف المصنع لـ
DynamicNavHostFragment
(Icd515، b/175222619) - يتم الآن عرض المعرّف الفريد لـ
NavBackStackEntry
كجزء من واجهة برمجة التطبيقات العامة الخاصة به. (Ie033a) - أصبح الحقلان
name
وargument
ودوال تدميرNamedNavArgument
متاحة للجميع الآن. (#174، b/181320559) - تم إطلاق إضافة
NavBackStackEntry#provideToCompositionLocals
جديدة توفّر السمةNavBackStackEntry
للمقطوعة الموسيقية المحلية ذات الصلة. (#175، b/187229439)
الوسيطات الآمنة
تنشئ Safe Args الآن طريقة
fromSavedStateHandle()
لكل فئةNavArgs
. (#122، b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
تم تعديل الوسيطات الآمنة للاعتماد على
1.8.0
في KotlinPoet. (#172، b/183990444)
التغييرات في السلوك
- يعتمد التنقّل الآن على
دورة الحياة
2.3.1
ويشير الآن إلى الطرقsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، الطرق التي تعمل على تعديلNavBackStackEntry
Lifecycle
، على أنّها@MainThread
، ما يؤدي إلى مواءمة التنقّل مع عملية تنفيذ سلسلة التعليمات الرئيسية التي تم تقديمها في دورة الحياة2.3.0
. (b/171125856) - أصبح تحليل وسيطات التعداد من الروابط لصفحات في التطبيق غير حساس لحالة الأحرف، ما يسمح لرابط صفحة معيّنة مثل
http://www.example.com/red
بمطابقة رابط لصفحة في التطبيقwww.example.com/{color}
حتى عندما يحتوي التعداد على القيمةRED
. (#152، b/135857840)
إنشاء بيانات توافق
- لا يتوافق الإصدار
androidx.navigation:navigation-compose:2.4.0-alpha01
إلا مع إصدار الإنشاء1.0.0-beta07
والإصدارات الأحدث.
إصلاح الأخطاء
- تم إصلاح مشكلة تكون فيها العناصر النائبة للوسيطة اللاحقة لها الأولوية على الروابط لمواضع معيّنة التي تحتوي على لاحقة مطابقة تامة. (#153، b/184072811)
- يتوافق
NavHostFragment
الآن مع التنقّلات المخصّصة التي تستخدم@Navigator.Name("dialog")
الخاص بـDialogFragmentNavigator
التلقائي. (Ib1c2c، b/175979140) - تم تحسين سلوك
NavigatorProvider#addNavigator
لضمان أنّ طلبه بشكل متكرّر من خلال المثيل نفسه لا يؤدي إلى حدوث أي مشاكل. (#176، b/187443146)
المساهمات الخارجية
- نشكرك من قِبل simonschiller على توفير الدعم لميزة Safe Args من خلال إنشاء طريقة
fromSavedStateHandle()
لكل صف من صفوفNavArgs
. (#122، b/136967621) - شكرًا Bradleycur لجعل تحليل وسيطات التعداد من الروابط لصفحات في التطبيق غير حساس لحالة الأحرف. (#152، b/135857840)
- نشكرك على استخدام osipxd لإصلاح المشكلة التي تكون فيها العناصر النائبة للوسيطة اللاحقة لها الأولوية على الروابط لصفحات في التطبيق التي تحتوي على لاحقة مطابقة تامة. (#153، b/184072811)
- نشكرك على tatocaster لتعديل خوارزمية Safe Args للاعتماد على
1.8.0
في KotlinPoet. (#172، b/183990444) - نشكرك على jossiwolf لإتاحة حقلَي
name
وargument
وتدمير وظائفNamedNavArgument
للجميع. (#174، b/181320559) - نشكرك jossiwolf على تقديم إضافة
NavBackStackEntry#provideToCompositionLocals
جديدة توفّرNavBackStackEntry
للمقطوعة الموسيقية المحلية المعنيّة. (#175، b/187229439) - نشكرك على jossiwolf لتحسين سلوك
NavigatorProvider#addNavigator
لضمان أنّ طلبها بشكلٍ متكرّر مع المثيل نفسه لا يتسبب في حدوث مشاكل. (#176، b/187443146)
الإصدار 1.0.0 من ميزة "إنشاء التنقل"
الإصدار 1.0.0-alpha10
7 نيسان (أبريل) 2021
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha10
". يحتوي الإصدار 1.0.0-alpha10 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تقبل
NavHost
الآنModifier
، والتي يتم تمريرها إلى الحاوية القابلة للتركيب التي تلفّ العناصر الوجهة. (I85aca، b/175125483)
إصلاح الأخطاء
- تعمل علامة
NavHost
الآن حتى في حال عدم العثور علىOnBackPressedDispatcherOwner
، هذه هي الحالة عند معاينةNavHost
. (I7d8b4) - تعتمد ميزة إنشاء التنقل الآن على التنقل
2.3.5
، مما يؤدي إلى إصلاح مشكلة عند استخدامBackHandler
داخل وجهةNavHost
. (I7e63b، b/182284739)
الإصدار 1.0.0-alpha09
10 آذار (مارس) 2021
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha09
". يحتوي الإصدار 1.0.0-alpha09 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تعرض
LocalViewModelStoreOwner.current
الآن قيمةViewModelStoreOwner
قابلة للقيم الفارغة لتحديد ما إذا كانViewModelStoreOwner
متاحًا في التركيبة الحالية بشكل أفضل. لا تزال واجهات برمجة التطبيقات التي تتطلّب علامةViewModelStoreOwner
، مثلviewModel()
وNavHost
، توفّر استثناءً إذا لم يتم ضبطViewModelStoreOwner
. (Idf39a)
إصلاح الأخطاء
- تعتمد ميزة "إنشاء أثناء التنقل" الآن على نظام التنقل 2.3.4 الذي يتضمن إصلاح محاولة ضبط كائن ViewModelStore نفسه بعد ضبط الرسم البياني. (I65c24، b/177825470)
الإصدار 1.0.0-alpha08
24 شباط (فبراير) 2021
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha08
". يحتوي الإصدار 1.0.0-alpha08 على هذه الالتزامات.
الميزات الجديدة
- تستخدم ميزة "
NavHost
" الآن السمة AnalyzeLocal فيLocalSavedStateRegistryOwner
على استخدامNavBackStackEntry
الخاصة بتلك الوجهة، ما يضمن لك حفظ واستعادة أي حالة تم حفظها مباشرةً فيSavedStateRegistry
بجانب الوجهة. (I435d7، b/179469431)
الإصدار 1.0.0-alpha07
10 شباط (فبراير) 2021
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha07
". يحتوي الإصدار 1.0.0-alpha07 على هذه الالتزامات.
تعديلات التبعية
- تعتمد ميزة "إنشاء" قسم التنقل الآن على الإصدار 1.0.0-alpha01-alpha 1.0.0-alpha01 من دورة الحياة لتوفير دعم
viewModel()
لوجهاتcomposable
. (I7a374) - يستخدم "
NavHost
" الآن الإصدارLocalOnBackPressedDispatcherOwner
الجديد من Activity-Compose 1.3.0-alpha01 للحصول علىOnBackPressedDispatcher
الذي تم ضبطه علىNavController
. (I65b12)
الإصدار 1.0.0-alpha06
28 كانون الثاني (يناير) 2021
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha06
". يحتوي الإصدار 1.0.0-alpha06 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- تم إدراج طريقة إضافة
getBackStackEntry(route: String)
فيNavController
، وتعرضNavBackStackEntry
المرتبطة. (If8931)
الإصدار 1.0.0-alpha05
13 كانون الثاني (يناير) 2021
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha05
". يحتوي الإصدار 1.0.0-alpha05 على هذه الالتزامات.
تم التحديث للاعتماد على Compose 1.0.0-alpha10.
الإصدار 1.0.0-alpha04
16 كانون الأول (ديسمبر) 2020
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha04
". يحتوي الإصدار 1.0.0-alpha04 على هذه الالتزامات.
- تم التعديل للتوافق مع Compose
1.0.0-alpha09
.
الإصدار 1.0.0-alpha03
2 كانون الأول (ديسمبر) 2020
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha03
". يحتوي الإصدار 1.0.0-alpha03 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم عمل الترميزَين
popBackStack()
وnavigateUp()
بعد تغيير الإعدادات أو معالجة إيقاف الاستخدام والترفيه. (Icea47، b/173281473) - يعمل الانتقال إلى رسم بياني متداخل داخل NavHost الآن بشكل صحيح. (I0948d، b/173647694)
الإصدار 1.0.0-alpha02
11 تشرين الثاني (نوفمبر) 2020
تم إصدار "androidx.navigation:navigation-compose:1.0.0-alpha02
". يحتوي الإصدار 1.0.0-alpha02 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- إنّ إنشاء عناصر التنقّل يتيح الآن استخدام NavOptions لاستخدام عمليات popUpTo وLaunchSingleTop (If96c3 وb/171468994)
- تمت إضافة دالة تنقل تتخذ مسارًا بدلاً من معرّف يسمح لك بإنشاء رسوم بيانية متداخلة في ترميز التنقل بـالتنقل Compose DSL. (I1661d)
- تأتي startDestination الآن قبل المسار في قائمة معلمات NavHost (Ie620e)
- يمكنك الآن إنشاء رسم بياني باستخدام المسار كوجهة بدء خارج إطار NavHost القابل للتكوين. (Iceb75)
الإصدار 1.0.0-alpha01
28 تشرين الأول (أكتوبر) 2020
تم إصدار "android.navigation:navigation-compose:1.0.0-alpha01
". يحتوي الإصدار 1.0.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
يوفر عنصر navigation-compose
التكامل بين مكوِّن التنقل وJetpack Compose. تستخدم وظائف @Composable
كوجهات في تطبيقك.
يوفر هذا الإصدار الأولي:
NavHost
قابل للتحويل يسمح لك بإنشاء رسم بياني للتنقل من خلال Kotlin DSL.- نطاق دورة الحياة،
ViewModel
، والحالة التي يتم تذكرها على مستوى الوجهة. - الدمج التلقائي مع زر الرجوع في النظام
- إتاحة تمرير الوسيطات وإرفاق روابط لصفحات معيّنة بالوجهات وعرض نتيجة إلى الوجهات السابقة
- إنشاء أدوات مساعدة محددة في
rememberNavController()
وcurrentBackStackEntryAsState()
للسماح بحالة الرفع وربطNavController
بالعناصر القابلة للتعديل خارجNavHost
(مثل شريط التنقّل السفلي).
راجع دليل التنقل في إنشاء الرسائل للحصول على مزيد من المعلومات.
الإصدار 2.3.5
الإصدار 2.3.5
7 نيسان (أبريل) 2021
تم إصدار "androidx.navigation:navigation-*:2.3.5
". يتضمّن الإصدار 2.3.5 هذه الالتزامات.
الميزات الجديدة
- عند التنقّل باستخدام
NavDeepLinkRequest
أوUri
، يمكنك الآن الوصول إلىUri
والإجراء ونوع MIME في الوجهة الناتجة من خلال الحصول على الغرض من الوسيطات عبرKEY_DEEP_LINK_INTENT
، ما يؤدي إلى مطابقة الوظائف المتاحة حاليًا للربط الخارجي بصفحة معيّنة. (I975c3، b/181521877)
إصلاح الأخطاء
- تمت إضافة
OnBackPressedCallbacks
إلى المرسل مع تضمينNavBackStackEntry
لأن مالك LifecycleOwner الآن يعترض بشكل صحيح بعد دورة حياة النشاطSTOPPED
، ثمSTARTED
(Iff94f، b/182284739) - أصبح تحليل نطاق الروابط المؤدية إلى صفحة في التطبيق الآن غير حساس لحالة الأحرف، ما يضمن مطابقة
www.example.com
لكل منwww.example.com
وwww.Example.com
. تجدر الإشارة إلى أنّ أسماء مَعلمات طلب البحث لا تزال حسّاسة لحالة الأحرف. (#144، b/153829033) - تم إصلاح
NullPointerException
التي يمكن أن تحدث عندما تحتوي الوجهة على عدة وسيطات تلقائية غير قابلة للقيمتين وتنتقل إلى هذه الوجهة مع إلغاء مجموعة فرعية من هذه الوسيطات فقط. (aosp/1644827)
تعديلات التبعية
- يعتمد المكوّن الإضافي Navigation Safe Args Gradle الإضافي الآن على المكوّن الإضافي Kotlin Gradle Plugin 1.4.31. (aosp/1661058، b/181156413)
المساهمة الخارجية
- نشكرك
bentrengrove
على طلب السحب الذي يجعل تحليل نطاق رابط لصفحة في التطبيق غير حساس لحالة الأحرف. (#144، b/153829033)
الإصدار 2.3.4
الإصدار 2.3.4
10 آذار (مارس) 2021
تم إصدار "androidx.navigation:navigation-*:2.3.4
". يتضمّن الإصدار 2.3.4 هذه الالتزامات.
الميزات الجديدة
- يمكن الآن تحليل وسيطات
ReferenceType
بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم (URI) لرابط صفحة معيّنة في التطبيق. يتيح هذا الإجراء استخدام قيمة العدد الصحيح الأولي وكذلك القيم السداسية التي تبدأ بـ0x
. (#127، b/179166693) - تتوافق الآن السمة
android:defaultValue
للوسيطة معapp:argType="float"
مع القيم التلقائية لعدد صحيح، ما يسمح لك باستخدامandroid:defaultValue="0"
بدلاً من أن تطلب استخدام0.0
. (#117، b/173766247)
إصلاح الأخطاء
- إصلاح تقدم التثبيت العاجل عند استخدام دعم ميزة "التنقل" للميزات الديناميكية. (Ib27a7، b/169636207)
- استدعاء
setViewModelStore
أوsetLifecycleOwner
باستخدام نفس الكائن الذي تم تعيينه بالفعل سيصبح الآن بيئة مستقلة (Idf491، b/177825470) - تضيف Safe-Args الآن تعليقات توضيحية لمنع التعليقات التوضيحية بالطرق المناسبة عند استخدام جافا. (I8fbc5، b/179463137)
المساهمات الخارجية
- نشكرك على
JvmName
على طلب السحب لضمان إمكانية تحليل وسيطاتReferenceType
الآن بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم (URI) لرابط صفحة معيّنة في التطبيق. (#127، b/179166693) - نشكرك على
tatocaster
على طلب السحب للسماح لوسيطةdefaultValue
باستخدامapp:argType=”float”
بالقيم التلقائية للأعداد الصحيحة الآن. (#117، b/173766247)
الإصدار 2.3.3
الإصدار 2.3.3
27 كانون الثاني (يناير) 2021
تم إصدار "androidx.navigation:navigation-*:2.3.3
". يتضمّن الإصدار 2.3.3 هذه الالتزامات.
إصلاح الأخطاء
- لم تعُد هناك أعطال عند فرق
NavBackStackEntry
قبل نقلLifecycle
إلىCREATED
. (Ie3ba3) - تم إصلاح الانحدار بسبب b/171364502 حيث تسبب الانتقال إلى
نشاط يتضمّن قيمة مورد رسوم متحركة
0
في حدوثResourceNotFoundException
. (I7aedb، b/176819931)
الإصدار 2.3.2
الإصدار 2.3.2
2 كانون الأول (ديسمبر) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.2
". يتضمّن الإصدار 2.3.2 هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح الانحدار في
NavigationUI
حيث إنّ استخدام وجهة<activity>
معonNavDestinationSelected
سيؤدي إلى تعذّر الانتقال إلى النشاط. (I22e34، b/171364502) - تم إصلاح المشكلة المتمثلة في أن
navigation-dynamic-features-fragment
سيؤدي إلى الانتقال عدة مرات إلى الوجهة التي تم تثبيتها مؤخرًا. (aosp/1486056، b/169636207) - تم إصلاح المشكلة المتمثلة في عدم إرسال الوسيطات التلقائية إلى أمثلة
OnDestinationChangedListener
عند استخدامlaunchSingleTop
. (I2c5cb) - تم إصلاح مشكلة لا يؤدي الانتقال إلى رسم بياني مدمج للتنقّل إلى إنشاء مثيل رسم بياني جديد على المكدس الخلفي. (Ifc831)
- تم إصلاح المشكلة المتمثلة في استخدام
navigate()
معpopUpTo
والتي أدت إلى إزالة الوجهة الأخيرة في الرسم البياني للتنقل لا يؤدي على الفور إلى إتلاف الرسم البياني للتنقل وإزالته من الحزمة الخلفية. (I910a3) - تستخدم ميزة Navigation SafeArgs الآن الإصدار 1.7.2 من لغة KotlinPoet التي توفّر وضع واجهة برمجة التطبيقات الواضحة في لغة Kotlin. (I918b5)
- يفحص
NavHostFragment.findNavController(Fragment)
الآن أيضًا عرض الديكور الجذر لـ DialogFragment بالإضافة إلى عمليات التحقق الحالية للتسلسل الهرمي للجزء والتسلسل الهرمي لطريقة عرض Fragment. ويتيح لك ذلك اختبار أجزاء مربّعات الحوار التي تستخدم ميزة التنقّل معFragmentScenario
وNavigation.setViewNavController()
. (I69e0d)
الإصدار 2.3.1
الإصدار 2.3.1
14 تشرين الأول (أكتوبر) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.1
". يتضمّن الإصدار 2.3.1 هذه الالتزامات.
الميزات الجديدة
- تمت إضافة موارد أداة الصور المتحركة التلقائية إلى واجهة مستخدم التنقّل ويُنصح باستخدامها على موارد الرسوم المتحركة التلقائية. (b/167430145)
- NavOptions الآن تلغي رمز التجزئة ويساوي (b/161586466)
- يتضمن التنقّل الآن الوجهة الحالية في حقل "No destination with ID" (لا وجهة تتضمّن رقم التعريف) BlockedArgumentException، ومن المفترض أن يحسّن هذا الخيار تجربة تصحيح أخطاء المطوّرين. (b/168311416)
إصلاح الأخطاء
- لن تلفّ الوسيطات الآمنة سطر الرجوع بعد الآن، حتى إذا كان اسم فئة الوسيطة الذي تم إنشاؤه أطول من 100 حرف. (b/168584987)
التغييرات المتعلقة بالاعتمادية
- يعتمد
navigation-ui
الآن على DrawerLayout 1.1.1، لضمان إمكانية فتحNavigationUI
الدُرج حتى عند استخدامLOCK_MODE_LOCKED_CLOSED
أوLOCK_MODE_LOCKED_OPEN
. (b/162253907) - تعتمد ميزة Safe Args الآن على KotlinPoet 1.6.0 (aosp/1435911).
- تعتمد الإضافة الآمنة الآن على الإصدار 4.0.1 من AGP (aosp/1442337)
الإصدار 2.3.0
الإصدار 2.3.0
24 حزيران (يونيو) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0
". يحتوي الإصدار 2.3.0 على هذه الالتزامات.
التغييرات الرئيسية منذ الإصدار 2.2.0
- دمج وحدة الميزات: تسمح لك عناصر
navigation-dynamic-features-runtime
وnavigation-dynamic-features-fragment
بالانتقال إلى الوجهات المحددة في وحدات الميزات، ما يتيح لك معالجة تثبيت وحدات الميزات تلقائيًا حسب الحاجة. راجع التنقل باستخدام وحدات الميزات للحصول على مزيد من المعلومات. - اختبار التنقّل: يوفّر العنصر
navigation-testing
عنصرTestNavHostController
يسمح لك بضبط الوجهة الحالية والتحقّق من الحزمة الخلفية بعد إجراء عمليات التنقّل. راجع اختبار التنقل للحصول على مزيد من المعلومات. - عرض نتيجة: يتيح لك الآن
NavBackStackEntry
المرتبط بكل وجهة في حزمة "الرجوع" الخاصة بالتنقل الوصول إلىSavedStateHandle
مناسبة لتخزين كميات صغيرة من الحالة المحفوظة التي يجب ربطها بإدخال مكدس خلفي معيّن. راجع إرجاع نتيجة إلى الوجهة السابقة للحصول على مزيد من المعلومات. - دعم
NavigationUI
لـOpenable
: تم استبدال جميع استخداماتDrawerLayout
فيNavigationUI
بواجهةOpenable
أكثر عمومية تمت إضافتها في CustomView1.1.0
وتم تنفيذها بواسطةDrawerLayout
في DrawerLayout1.1.0
. - إتاحة الإجراءات ونوع MIME في الروابط لصفحات في التطبيق: تم توسيع نطاق الربط بصفحة معيّنة لدعم
app:action
وapp:mimeType
بالإضافة إلىapp:uri
المتاحة سابقًا. تتيح "NavController
" الآن التنقّل باستخدام أي مجموعة من هذه الحقول عبر فئةNavDeepLinkRequest
الجديدة. راجِع التنقّل باستخدام NavDeepLinkRequest للحصول على مزيد من المعلومات.
المشاكل المعروفة
- لا يتوفر بعد إجراء روابط الصفحات في التطبيق وأنواع MIME في عملية دمج البيان. وإلى حين اكتمال هذه العملية، لن تتضمّن أي عناصر
<intent-filter>
يتم إنشاؤها من العنصر<nav-graph>
في ملف البيان نوع mime في العنصر<data>
أو في<action>
المخصَّص. عليك إضافة سمة<intent-filter>
مناسبة إلى البيان يدويًا.
الإصدار 2.3.0-rc01
10 حزيران (يونيو) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-rc01
". يحتوي الإصدار 2.3.0-rc01 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح
NullPointerException
عند استبدال مثيل وجهة بدون وسيطات بمثيل آخر ب وسيطات باستخدامsingleTop
. (b/158006669) - تحتوي جميع استثناءات
destination is unknown
التي يتم طرحها من خلالNavController
الآن على معلومات إضافية لتصحيح الأخطاء للمساعدة في تحديد حالةNavController
. (b/157764916)
الإصدار 2.3.0-beta01
20 أيار (مايو) 2020
تم إصدار androidx.navigation:navigation-*:2.3.0-beta01
. يتضمّن الإصدار 2.3.0-beta01 هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في عدم تحديث
Lifecycle
لـNavBackStackEntry
بشكل صحيح بعد انتهاء العملية. (b/155218371) - تم الآن إرسال
OnDestinationChangedListener
أمثلة تم تسجيلها قبل الاتصال بـsetGraph()
بشكل صحيح إلى الوجهة التي تمت استعادتها بعد انتهاء العملية. (b/155218371) - عند استخدام
singleTop
، يتم الآن تعديل وسيطاتNavBackStackEntry
بشكل صحيح ويتم إرسال الوسيطات المعدّلة إلى جميع الحالات الـOnDestinationChangeListener
. (b/156545508)
تعديلات التبعية
- يعتمد العنصر
NavigationUI
الآن على CustomView1.1.0-rc01
وDrawerLayout1.1.0-rc01
. (aosp/1309696)
الإصدار 2.3.0-alpha06
29 نيسان (أبريل) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-alpha06
". (يحتوي الإصدار 2.3.0-alpha06 على هذه الالتزامات.)
الميزات الجديدة
- تم توسيع نطاق الربط بصفحة معيّنة لدعم
app:action
وapp:mimeType
، بالإضافة إلىapp:uri
المتاحة سابقًا. تتيح أداة NavController الآن التنقّل من خلال أي مجموعة من هذه الحقول عبر فئةNavDeepLinkRequest
الجديدة. (b/136573074، b/135334841)
تغييرات واجهة برمجة التطبيقات
- توسيع دعم Kotlin DSL بشكل كبير لوجهات الانتقال الديناميكي. (b/148969800)
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل أهداف رابط لصفحة في التطبيق عند استخدام وجهة بداية مدمجة. (b/154532067)
الإصدار 2.3.0-alpha05
نيسان (أبريل) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-alpha05
". يحتوي الإصدار 2.3.0-alpha05 على هذه الالتزامات.
الميزات الجديدة
- بالنسبة إلى تضمينات الرسم البياني الديناميكي التي تستخدم
<include-dynamic>
، لن تحتاج بعد الآن إلى تحديدapp:graphPackage
، وسيتمّ استخدام سمة تلقائية من خلال إضافة لاحقةmoduleName
إلىapplicationId
بعد النقطة. إذا كنت بحاجة إلى تخصيصgraphPackage
، يمكنك الآن استخدام العنصر النائب${applicationId}
. (b/152696768) - يعرض الآن الرسم البياني للتنقل في Kotlin DSL
defaultArguments
Map
للإجراءات، ما يوفّر إمكانية ضبط القيم التلقائية على عناصر<action>
في ملفات XML الخاصة بالتنقل. (b/150345605)
إصلاح الأخطاء
- من التنقل 2.2.2: تم إصلاح
IllegalStateException
عند الربط بصفحة بداية الرسم البياني عندما يكون لديك العديد من مثيلاتNavHostFragment
في نشاطك. (b/147378752)
التعديلات المتعلقة بالتبعية
- يعتمد التنقل الآن على الجزء
1.2.4
. (aosp/1277325) - يعتمد الانتقال الديناميكي الآن على Play Core
1.7.2
. (aosp/1282257)
الإصدار 2.3.0-alpha04
18 آذار (مارس) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-alpha04
". يحتوي الإصدار 2.3.0-alpha04 على هذه الالتزامات.
الميزات الجديدة
- تمت إضافة دعم لنشاط وحدات الميزات ووجهات التقسيم في بروتوكول Navigation Kotlin DSL. (b/148969800)
تغييرات واجهة برمجة التطبيقات
- لم تعُد الفئة
DynamicExtras
تستخدم نمط أداة إنشاء، ويمكن إنشاؤها الآن مباشرةً. (aosp/1253671) - تأخذ
DynamicActivityNavigator
الآنContext
في الدالة الإنشائية بدلاً منActivity
. (aosp/1250252)
إصلاح الأخطاء
- لم تعُد علامة
NavigationUI
تتجاهل التصنيفات الفارغة (أي الوجهة التي تحتوي علىandroid:label=””
)، وهي الآن تضبط العنوان بشكل صحيح على سلسلة فارغة. (b/148679860)
تعديلات التبعية
- تعتمد عناصر الميزات الديناميكية للتنقل الآن على الإصدار
1.6.5
الأساسي من Play. (b/149556401)
الإصدار 2.3.0-alpha03
4 آذار (مارس) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-alpha03
". يحتوي الإصدار 2.3.0-alpha03 على هذه الالتزامات.
تغييرات واجهة برمجة التطبيقات
- بدلاً من الاعتماد على فئة
DrawerLayout
الملموسة، يستخدمAppBarConfiguration
الآن واجهةOpenable
المقدَّمة في CustomView1.1.0-alpha02
(والتي يتم تنفيذها من قِبلDrawerLayout
بدءًا من DrawerLayout1.1.0-alpha04
)، ما يتيح لك استخدام عمليات تنفيذ مخصّصة لـOpenable
معNavigationUI
. (b/129030452)
إصلاح الأخطاء
- تحتفظ قواعد ProGuard
navigation-common-ktx
الآن بشكل صحيح بفئاتNavArgs
المستخدَمة فقط بدلاً من جميع مثيلاتNavArgs
. (b/150213558)
التغييرات التي تطرأ على التبعية
- أعاد التنقل اعتماده على Core
1.2.0
ويعتمد الآن على Core1.1.0
لتجنُّب إجبار المطوّرين على الانتقال إلى تبعية أحدث عندما لا يعتمد التنقّل على أي واجهات برمجة تطبيقات جديدة في Core1.2.0
.
الإصدار 2.3.0-alpha02
19 شباط (فبراير) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-alpha02
". يحتوي الإصدار 2.3.0-alpha02 على هذه الالتزامات.
الميزات الجديدة
- يتيح لك
NavBackStackEntry
الآن الوصول إلىSavedStateHandle
مناسب لتخزين كميات صغيرة من الحالة المحفوظة التي يجب ربطها بإدخال مكدس خلفي معيّن. راجع عرض نتيجة للاطلاع على مثال لحالة استخدام. (b/79672220)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة الطريقتين الملائمتين
getCurrentBackStackEntry()
وgetPreviousBackStackEntry()
لتسهيل استردادNavBackStackEntry
للوجهات الحالية والسابقة. (b/79672220)
إصلاح الأخطاء
- ينقل
navigateUp()
الآن وسيطات الوجهة الحالية وKEY_DEEP_LINK_INTENT
إلى الوجهة السابقة عند إطلاق تطبيقك في حزمة المهام الخاصة بك. (b/147456890)
التغييرات التي تطرأ على التبعية
- يعتمد التنقّل الآن على
1.2.0
الأساسية.
الإصدار 2.3.0-alpha01
5 شباط (فبراير) 2020
تم إصدار "androidx.navigation:navigation-*:2.3.0-alpha01
". يحتوي الإصدار 2.3.0-alpha01 على هذه الالتزامات.
الميزات الجديدة
- يوفّر عنصر
navigation-testing
الجديد فئةTestNavHostController
. توفر هذه الفئة بديلاً لاستخدام نموذجNavController
وهمي عند اختبار التنقل والذي يسمح لك بتعيين الوجهة الحالية والتحقق من الحزمة الخلفية بعد عمليات التنقل. (b/140884273) - تتيح لك
navigation-dynamic-features-fragment
الجديدة (تبعية النقل العامnavigation-dynamic-features-runtime
) تضمين الوجهات أو الرسومات البيانية للتنقل بالكامل (عبر<include-dynamic>
) من وحدات الميزات، ما يوفّر تثبيتًا سلسًا لوحدات الميزات عند الطلب عند الانتقال إلى تلك الوجهات. راجع التنقل باستخدام وحدات الميزات للحصول على مزيد من المعلومات. (b/132170186)
إصلاح الأخطاء
- من التنقل
2.2.1
: تتجاهل الروابط لصفحات في التطبيق بدون معلَمات طلب البحث الآن بشكل صحيح أي معلَمات طلب بحث بدلاً من إلحاقها بعناصر{argument}
اللاحقة أو لا تتطابق مع الرابط لصفحة معيّنة في التطبيق. (b/147447512) - من التنقل
2.2.1
: تم تعديل قواعد ProGuardnavigation-ui
لـDrawerArrowDrawable
لضمان عدم الحاجة إلىandroid.enableJetifier=true
. (b/147610424) - من التنقل
2.2.1
: تحتوي وحدةnavigation-common-ktx
الآن على اسم فريد لحزمة البيان بدلاً من مشاركة اسم حزمة البيان نفسه كما هو الحال فيnavigation-runtime-ktx
. (aosp/1141947)
التعديلات المتعلقة بالتبعية
- من التنقل
2.2.1
: يعتمد التنقل2.2.1
الآن على نموذج حفظ نموذج عرض دورة الحياة2.2.0
والجزء1.2.1
.
الإصدار 2.2.2
الإصدار 2.2.2
نيسان (أبريل) 2020
تم إصدار androidx.navigation:navigation-*:2.2.2
. يتضمّن الإصدار 2.2.2 هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح
IllegalStateException
عند الربط بصفحة معيّنة بوجهة بداية الرسم البياني عندما يكون لديك العديد من مثيلاتNavHostFragment
في نشاطك. (b/147378752) - لم تعُد علامة
NavigationUI
تتجاهل التصنيفات الفارغة (أي الوجهة التي تحتوي علىandroid:label=””
)، وهي الآن تضبط العنوان بشكل صحيح على سلسلة فارغة. تم إصدار هذا سابقًا في التنقل 2.3.0-alpha04. (b/148679860) - تحتفظ قواعد ProGuard
navigation-common-ktx
الآن بشكل صحيح بفئاتNavArgs
المستخدَمة فقط بدلاً من جميع مثيلاتNavArgs
. تم إصدار هذا التطبيق سابقًا في التنقل 2.3.0-alpha03. (b/150213558
التعديلات المتعلقة بالتبعية
- يعتمد التنقل الآن على الجزء
1.2.4
. (aosp/1277325)
الإصدار 2.2.1
الإصدار 2.2.1
5 شباط (فبراير) 2020
تم إصدار "androidx.navigation:navigation-*:2.2.1
". يحتوي الإصدار 2.2.1 على هذه الالتزامات.
إصلاح الأخطاء
- إنّ الروابط لصفحات في التطبيق بدون مَعلمات طلب البحث تتجاهل الآن أي مَعلمات طلب بحث بشكلٍ صحيح بدلاً من إلحاقها بعناصر
{argument}
اللاحقة أو لا تتطابق مع الرابط لصفحة معيّنة في التطبيق. (b/147447512) - تم تعديل قواعد ProGuard
navigation-ui
لـ "DrawerArrowDrawable
" لضمان أنّ "android.enableJetifier=true
" غير مطلوب. (b/147610424) - تحتوي وحدة
navigation-common-ktx
الآن على اسم فريد لحزمة البيان بدلاً من مشاركة اسم حزمة البيان نفسه الذي تم استخدامه فيnavigation-runtime-ktx
. (aosp/1141947)
التعديلات المتعلقة بالتبعية
- يعتمد التنقل
2.2.1
الآن على Webcycle ViewModel savedState2.2.0
والجزء1.2.1
.
الإصدار 2.2.0
الإصدار 2.2.0
22 كانون الثاني (يناير) 2020
تم إصدار "androidx.navigation:navigation-*:2.2.0
". يحتوي الإصدار 2.2.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 2.1.0
- NavBackStackEntry: يمكنك الآن استدعاء
NavController.getBackStackEntry()
، مع تمرير معرّف الوجهة أو الرسم البياني للتنقل في الحزمة الخلفية. تعرضNavBackStackEntry
المعروضة رمز الاستجابةLifecycleOwner
المستندة إلى التنقل وViewModelStoreOwner
(القيمة نفسها التي يعرضهاNavController.getViewModelStoreOwner()
) وSavedStateRegistryOwner
، بالإضافة إلى توفير الوسيطات المستخدمة لبدء تلك الوجهة. - دمج الملف المحفوظ في نموذج دورة الحياة: أصبح "
SavedStateViewModelFactory
" هو الإعداد التلقائي المستخدَم الآن عند استخدام الدالةby navGraphViewModels()
أو الدالة الإنشائيةViewModelProvider
مع دالةViewModelStoreOwner
التي يتم عرضها من خلالNavController.getBackStackEntry()
أوNavController.getViewModelStoreOwner()
. - دعم مَعلمات طلب البحث للروابط التي تؤدي إلى صفحات في التطبيق: أصبحت الروابط لصفحات في التطبيق التي تتضمّن مَعلمات طلب البحث متوافقة الآن مع مَعلمات طلب البحث المُعاد ترتيبها. وأصبحت الوسيطات التي تحتوي على قيمة تلقائية أو قابلة للقيم فارغة الآن اختيارية عند مطابقة الروابط لصفحات في التطبيق.
- دعم محسَّن للصور المتحركة: يستخدم
NavHostFragment
الآنFragmentContainerView
من Fragment 1.2.0، لإصلاح مشاكل ترتيب z للصور المتحركة وإدخال التفاصيل داخل النوافذ الذي يتحوّل إلى Fragment.
الإصدار 2.2.0-rc04
18 كانون الأول (ديسمبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-rc04
". يحتوي الإصدار 2.2.0-rc04 على هذه الالتزامات.
إصلاح الأخطاء
- تم تعديل حركات التلاشي التلقائية التي يستخدمها
navigation-ui
لمطابقة حركات التلاشي المعدَّلة في الجزء1.2.0-rc04
. (b/145769814)
الإصدار 2.2.0-rc03
4 كانون الأول (ديسمبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-rc03
". يحتوي الإصدار 2.2.0-rc03 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة في تحليل الروابط لصفحات في التطبيق عند استخدام مَعلمات طلب البحث ووسيطة باعتبارها الجزء الأخير من المسار التي منعت تحليل أكثر من حرف واحد من وسيطة المسار النهائي. (b/144554689)
- تم إصلاح مشكلة في تحليل الروابط لصفحات في التطبيق، حيث تتلقى المعلَمات الاختيارية
"@null"
بدلاً منnull
. (b/141613546) - سيستعيد
NavHostFragment
الآن الرسم البياني بشكل صحيح بعد تغيير الإعدادات عند استخدامه معFragmentContainerView
. (b/143752103)
التغييرات التي تطرأ على التبعية
- يعتمد التنقل الآن على مراحل النشاط
2.2.0-rc03
ونموذج حفظ حالة مشاهدة دورة الحياة1.0.0-rc03
والنشاط1.1.0-rc03
والجزء1.2.0-rc03
عندما يكون ذلك مناسبًا.
الإصدار 2.2.0-rc02
7 تشرين الثاني (نوفمبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-rc02
". يحتوي الإصدار 2.2.0-rc02 على هذه الالتزامات.
التغييرات التي تطرأ على التبعية
- يعتمد التنقّل الآن على androidx.lifecycle
2.2.0-rc02
.
الإصدار 2.2.0-rc01
23 تشرين الأول (أكتوبر) 2019
تم إصدار androidx.navigation:navigation-*:2.2.0-rc01
بدون أي تغييرات منذ 2.2.0-beta01
. يحتوي الإصدار 2.2.0-rc01 على هذه الالتزامات.
الإصدار 2.2.0-beta01
9 تشرين الأول (أكتوبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-beta01
". يتضمّن الإصدار 2.2.0-beta01 هذه الالتزامات.
الميزات الجديدة
- تلغي السمة
NavDestination
وفئاتها الفرعية الآنtoString()
لتوفير معلومات أكثر فائدة عند تصحيح الأخطاء. (b/141264986)
التغييرات في السلوك
- يتم الآن تجاهل مَعلمات طلب البحث الإضافية عند مطابقة روابط لصفحات معيّنة بدلاً من التسبب في فشل المطابقة. (b/141482822)
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل الوسيطات في مسار رابط لصفحة في التطبيق في حال تحديد معلَمات طلب البحث أيضًا. (b/141505755)
- أصبحت إضافة
navArgs()
Kotlin علىActivity
تعرض رسالة خطأ أفضل في حال عدم توفّر ميزات إضافية. (b/141408999) - تم إنشاء
Directions
فئة Java من خلال الوسيطات الآمنة (Safe Args) تحتوي الآن على القيم التلقائية. (b/141099045) - تم إنشاء
Args
فئة Java من خلال الوسيطات الآمنة (Safe Args) تحتوي الآن على القيم التلقائية. (b/140123727) - عند استخدام
Toolbar
، لن تعملNavigationUI
بعد ذلك على تحريك تغيير النص عند الانتقال بين وجهتين من المستوى الأعلى. (b/140848160)
الإصدار 2.2.0-alpha03
18 أيلول (سبتمبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-alpha03
". يحتوي الإصدار 2.2.0-alpha03 على هذه الالتزامات.
التغييرات في السلوك
- يؤدي الاتصال بـ
setViewModelStore()
بعد الاتصال بـsetGraph
الآن إلى ظهورIllegalStateException
. يجب ضبط هذه الميزة دائمًا من خلال "NavHost
" كجزء من عملية الإعداد الأوليّة لضمان توفُّر مساحة تخزين متسقة في جميع مثيلاتNavBackStackEntry
فيViewModel
. (aosp/1111821)
إصلاح الأخطاء
- تم إصلاح
ConcurrentModificationException
عند استخدام مثيلاتViewModel
مُرفَقة بعدة مثيلات رسم بياني للتنقّل فيViewModelStore
على نطاقها. (aosp/1112257)
الإصدار 2.2.0-alpha02
5 أيلول (سبتمبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-alpha02
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
الميزات الجديدة
- إنّ الروابط لصفحات في التطبيق مع مَعلمات طلبات البحث تتيح الآن استخدام مَعلمات طلب البحث المُعاد ترتيبها. والوسيطات ذات القيمة التلقائية أو القابلة للقيم الفارغة هي الآن اختيارية عند مطابقة الروابط لصفحات معيّنة. (b/133273839)
- يمكنك الآن استدعاء
NavController.getBackStackEntry()
، مع تمرير رقم تعريف الوجهة أو الرسم البياني للتنقل في الحزمة الخلفية. تعرضNavBackStackEntry
المعروضة رمز الاستجابةLifecycleOwner
المستندة إلى التنقل وViewModelStoreOwner
(القيمة نفسها التي يعرضهاNavController.getViewModelStoreOwner()
) وSavedStateRegistryOwner
، بالإضافة إلى توفير الوسيطات المستخدمة لبدء تلك الوجهة. (aosp/1101691، aosp/1101710)
إصلاح الأخطاء
- تم إصلاح مشكلة تعذُّر إضافة
NavHostFragment
إلىViewPager2
باستخدامIllegalArgumentException
. (b/133640271) - يتجنّب
NavInflater
الآن الاتصال برقمgetResourceName()
بدون داعٍ، ما يؤدي إلى تسريع وقت التضخم بنسبة تصل إلى %40. (b/139213740)
الإصدار 2.2.0-alpha01
7 آب (أغسطس) 2019
تم إصدار "androidx.navigation:navigation-*:2.2.0-alpha01
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
الميزات الجديدة
- أصبحت
SavedStateViewModelFactory
الآن هي الإعدادات الأصلية التلقائية المستخدَمة عند استخدامby navGraphViewModels()
أو الدالة الإنشائيةViewModelProvider
معViewModelStoreOwner
التي تم عرضها بواسطةNavController.getViewModelStoreOwner()
. (b/135716331)
التغييرات في واجهة برمجة التطبيقات
- من صفحة التنقّل
2.1.0-rc01
: تمّت إزالة واجهة برمجة التطبيقاتgetViewModelStore()
المتوقّفة نهائيًا علىNavController
والتي تم تقديمها في2.1.0-alpha02
. (aosp/1091021)
إصلاح الأخطاء
- يستخدم
NavHostFragment
الآنFragmentContainerView
، لإصلاح مشاكل الترتيب z للصور المتحركة والعناصر الداخلية للنوافذ التي يتم إرسالها إلى الأجزاء. (b/137310379)
الإصدار 2.1.0
الإصدار 2.1.0
5 أيلول (سبتمبر) 2019
تم إصدار "androidx.navigation:navigation-*:2.1.0
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
تغييرات مهمة منذ الإصدار 2.0.0
- تحديد نطاق نماذج العرض إلى رسم بياني للتنقّل: يمكنك الآن إنشاء نماذج عرض تم تحديد نطاقها على مستوى الرسم البياني للتنقل باستخدام تفويض الموقع
by navGraphViewModels()
لمستخدمي لغة Kotlin باستخدام مكتبات-ktx
أو باستخدام واجهة برمجة تطبيقاتgetViewModelStoreOwner()
المُضافة إلىNavController
. راجع مشاركة البيانات المتعلقة بواجهة المستخدم بين الوجهات للحصول على مزيد من المعلومات. - وجهات مربّعات الحوار: يمكنك الآن إنشاء وجهات
<dialog>
التي ستعرضDialogFragment
عندnavigate
لها. يتوافقNavHostFragment
مع وجهات مربّعات الحوار تلقائيًا. راجع إنشاء وجهة من DialogFragment لمزيد من المعلومات. - التنقل عبر Uri: يمكنك الآن
navigate
باستخدامUri
الذي يستخدم<deepLink>
التي أضفتها إلى وجهة للانتقال إلى هناك. لمزيد من المعلومات، يمكنك مراجعة التنقل باستخدام معرّف الموارد المنتظم (URI). - NavHostController: تم نقل واجهات برمجة التطبيقات المستخدمة تحديدًا لإنشاء
NavHost
مخصص إلىNavHostController
، ما يسمح لعمليات التنفيذ بربطNavController
بالاستضافةLifecycleOwner
وOnBackPressedDispatcher
وViewModelStore
.
الإصدار 2.1.0-rc01
7 آب (أغسطس) 2019
تم إصدار "androidx.navigation:navigation-*:2.1.0-rc01
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
التغييرات في واجهة برمجة التطبيقات
- تمّت إزالة واجهة برمجة التطبيقات
getViewModelStore()
المتوقّفة نهائيًا على النطاقNavController
والتي تم تقديمها في العام2.1.0-alpha02
. (aosp/1091021)
الإصدار 2.1.0-beta02
19 تموز (يوليو) 2019
تم إصدار "androidx.navigation:*:2.1.0-beta02
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
إصلاح الأخطاء
- تمت إزالة التبعية غير المقصودة لجاكوكو التي تم تقديمها في العام
2.1.0-beta01
. (b/137782950)
الإصدار 2.1.0-beta01
17 تموز (يوليو) 2019
تم إصدار "androidx.navigation:*:2.1.0-beta01
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
الميزات الجديدة
- سيتحرك
NavigationUI
الآن لإزالة الزر للأعلى عند استخدامsetupWithNavController()
معToolbar
أوCollapsingToolbarLayout
. (b/131403621)
إصلاح الأخطاء
- تم إصلاح مشكلة التوقيت عند استخدام NavHostFragments متعددة مع الحاوية نفسها مع
findNavController()
. (b/136021571)
الإصدار 2.1.0-alpha06
2 تموز (يوليو) 2019
تم إصدار "androidx.navigation:*:2.1.0-alpha06
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
الميزات الجديدة
- تم نقل السمة
app:navGraph
التي يستخدمها NavHostFragment الآن إلى العنصرnavigation-runtime
. يجب أن تستخدم أدوات التنقل المخصصة التي يمكن إضافتها عبر XML هذه السمة للتكامل مع لوحة مضيف محرر التنقل. (b/133880955)
التغييرات في واجهة برمجة التطبيقات
- تم إيقاف واجهة برمجة التطبيقات
getViewModelStore()
API علىNavController
لاعتماد طريقةgetViewModelStoreOwner()
الجديدة التي تعرضViewModelStoreOwner
. (aosp/987010) - تم تعميم تنفيذ وجهات النوافذ العائمة، مثل وجهات
<dialog>
، في واجهة العلامةFloatingWindow
التي تستخدمها الآن جميع وجهات<dialog>
. تتجاهل الآن طرق TablesUI للتفاعل مع شريط التطبيق العلوي وجهاتFloatingWindow
. (b/133600763)
التغييرات في السلوك
- تحافظ ميزة التنقّل الآن على مزامنة حالتها بشكل صحيح مع ما يظهر على الشاشة عند استخدام وجهة
<dialog>
. نتيجةً لذلك، تعرض ميزة "التنقل" الآن وجهات<dialog>
تلقائيًا عند الانتقال إلى وجهة غير حوارية وغير نشطة، مثل وجهة<fragment>
. (b/134089818)
إصلاح الأخطاء
- توقف ميزة التنقّل الآن الرسوم المتحركة التي تحدث عند إعادة إنشاء النشاط عند التعامل مع رابط لصفحة في التطبيق، ما يؤدي إلى إصلاح فلاش مرئي. (b/130362979)
- تم إصلاح خطأ يكون فيه حزمة التنقل للخلف غير متزامنة عند تمييز جزء أثناء إضافة الجزء الأولي. (b/133832218)
الإصدار 2.1.0-alpha05
5 حزيران (يونيو) 2019
تم إصدار "androidx.navigation:*:2.1.0-alpha05
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
التغييرات في واجهة برمجة التطبيقات
- تمت إعادة تسمية واجهات برمجة التطبيقات ذات الصلة بالمضيف في
NavController
ونقلها إلى فئة فرعية جديدة منNavController
،NavHostController
. (aosp/966091) - تم استبدال طريقة
setHostOnBackPressedDispatcherOwner()
NavController
بطريقةsetOnBackPressedDispatcher()
الخاصة بـNavHostController
، وتتطلب الآن الاتصال بـsetLifecycleOwner()
قبل طلبها. (aosp/965409) - تحتوي
NavHostController
الآن على طريقةenableOnBackPressed(boolean)
التي تحل محل الفئةNavHostOnBackPressedManager
التي تم عرضها في السابق من خلالsetHostOnBackPressedDispatcherOwner()
. (aosp/966091)
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثلة في عدم صحة المكدس الخلفي بعد التنقل باستخدام معرّف الموارد المنتظم (URI). (b/132509387)
- يتم الآن تشغيل الروابط لصفحات في التطبيق التي تعالجها NavController مرة واحدة فقط. (b/132754763)
الإصدار 2.1.0-alpha04
16 أيار (مايو) 2019
تم إصدار "androidx.navigation:*:2.1.0-alpha04
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
إصلاح الأخطاء
- يحترم
NavHostFragment
بشكلٍ صحيحapp:defaultNavHost
عند اعتراض أحداث زر الرجوع للنظام، ما يؤدي إلى إصلاح التراجع في التنقل2.1.0-alpha03
. b/132077777 - تعالج
DialogFragmentNavigator
الآن عملياتpopBackStack()
وnavigateUp()
بشكل صحيح. b/132576764 - تم إصلاح مشكلة
IllegalStateException: unknown destination during restore
عند التنقل بشكل متكرر بين الرسوم البيانية المتداخلة. b/131733658
الإصدار 2.1.0-alpha03
7 أيار (مايو) 2019
تم إصدار "androidx.navigation:*:2.1.0-alpha03
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
المشاكل المعروفة
- يستمر NavHostFragment في اعتراض زر "الرجوع" في النظام على الرغم من استخدام
app:defaultNavHost="false"
b/132077777
الميزات الجديدة
- يمكنك الآن إنشاء وجهات
<dialog>
التي ستعرضDialogFragment
عندnavigate
لها. يدعمNavHostFragment
وجهات مربّعات الحوار بشكلٍ تلقائي. b/80267254 - بالإضافة إلى استدعاء
navigate
باستخدام رقم تعريف مورد أو مثيلNavDirections
، يمكنك الآن التنقّل عبرUri
التي تستخدم<deepLink>
التي أضفتها إلى الوجهة للانتقال إلى الوجهة الصحيحة. b/110412864
التغييرات في السلوك
- تم تسريع الرسوم المتحركة التلقائية التي تقدمها NavigationUI من 400 ملي ثانية إلى 220 ملي ثانية لمطابقة سرعة الصور المتحركة التلقائية للأنشطة والأجزاء. b/130055522
التغييرات في واجهة برمجة التطبيقات
- تم إيقاف طريقة
createFragmentNavigator()
فيNavHostFragment
وتم نقل وظائفها إلى طريقةonCreateNavController()
الجديدة لتوضيح أنّ هذه هي نقطة الدخول الصحيحة لإضافة برامج تنقّل مخصّصة عند التصنيف الفرعيNavHostFragment
. b/122802849 - تمت إضافة طريقة
hasDeepLink()
إلىNavDestination
للسماح لك بالتحقّق مما إذا كان يمكن معالجةUri
معيّن من خلال تلك الوجهة، أو في حالNavGraph
، أي وجهة في الرسم البياني للتنقل. b/117437718
إصلاح الأخطاء
- تم الآن تمرير الوسيطات التلقائية بشكل صحيح إلى
OnDestinationChangedListener
مثيل. b/130630686 - يعترض
NavHostFragment
الآن أحداث النظام رجوع باستخدامOnBackPressedDispatcher
، ما يؤدي إلى إصلاح مشكلة عند إجراء التنقل الشرطي في طرق مراحل نشاط "التجزئة" عند العودة إلى جزء. b/111598096 - بالنسبة إلى الوسيطات الآمنة، يتم الآن استنتاج
android:defaultValue=”@null”
معapp:argType
غير محدّد بشكل صحيح كوسيطةstring
. b/129629192
الإصدار 2.1.0-alpha02
3 نيسان (أبريل) 2019
تم إصدار "androidx.navigation:*:2.1.0-alpha02
". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.
الميزات الجديدة
- يمكنك الآن إنشاء نماذج عرض مُحدّدة على مستوى الرسم البياني للتنقّل من خلال مفوّض الموقع
by navGraphViewModels()
لمستخدمي لغة Kotlin أو باستخدام واجهة برمجة التطبيقاتgetViewModelStore()
المُضافة إلىNavController
. b/111614463
التغييرات في واجهة برمجة التطبيقات
- يمكنك الآن إضافة
app:targetPackage
إلى وجهة<activity>
للحدّ من اسم الحزمة المطابق. يتيح استخدامapp:targetPackage="${applicationId}"
لحصر الحزمة على معرّف التطبيق الخاص بك. b/110975456
إصلاح الأخطاء
- لم يعد يتم تحليل
android:name
لوجهات<activity>
في فئة في وقت التضخم، مما يمنع ClassNotFoundExceptions عند استخدام الميزات الديناميكية. b/124538597
الإصدار 2.1.0-alpha01
19 آذار (مارس) 2019
هذا هو الإصدار الأولي الأول من ميزة التنقل 2.1.0
.
التغييرات التي تطرأ على التبعية
- يعتمد التنقّل الآن على
androidx.core:core:1.0.1
وandroidx.fragment:fragment:1.1.0-alpha05
. يزيل هذا الإصدار أيضًا التبعية علىandroidx.legacy:legacy-support-core-utils:1.0.0
. b/128632612
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة
Navigation.createNavigateOnClickListener(NavDirections)
جديدة كبديل لإنشاء أداة معالجة النقرة باستخدام رقم تعريف المورد والحزمة. b/127631752 - تم إيقاف
FragmentNavigator.instantiateFragment
نهائيًا. يستخدم التنفيذ التلقائي الآنFragmentFactory
لإنشاء مثيل للأجزاء. b/119054429
إصلاح الأخطاء
- لم يعُد التنقّل يرسل قيمة
Bundle
فارغة عند وجود وسيطات مرتبطة بوجهة، ما يؤدي إلى إصلاح مشكلة عند استخدامandroid:defaultValue="@null"
. b/128531879 - تعتمد ميزة Safe Args الآن على KotlinPoet 1.1.0، وقد تم حلّ المشكلة المتعلّقة بأسماء الحِزم الطويلة للغاية. b/123654948
الإصدار 2.0.0
الإصدار 2.0.0
14 آذار (مارس) 2019
تم إصدار التنقل 2.0.0
بدون أي تغييرات من 2.0.0-rc02
.
الإصدار 2.0.0-rc02
6 آذار (مارس) 2019
يوفّر شريط التنقّل 2.0.0-rc02 عناصر جديدة بمعرّف مجموعة androidx.navigation
ويغيّر تبعياته إلى عناصر مكافئة من AndroidX.
يتطابق سلوك 2.0.0-rc02 مع سلوك الانتقال 1.0.0-rc02 ولا يلزم إجراء أي تغييرات على الرمز الخاص بك للتحديث من 1.0.0-rc02 إلى جانب تحديث التبعيات الخاصة بك لمطابقة التبعيات الجديدة.
يجب أن يكون مشروعك قد تم النقل إلى AndroidX لاستخدام إصدارات 2.X من التنقل. وسيكون الإصدار 1.0 الثابت هو آخر إصدار يستخدم تبعيات مكتبة الدعم، وستعتمد جميع عمليات التطوير المستقبلية التي تتجاوز الإصدار 1.0 على AndroidX ويعتمد على الإصدار الثابت 2.0.
التبعيات السابقة لنظام التشغيل AndroidX
بالنسبة لإصدارات ما قبل AndroidX من ميزة التنقل، قم بتضمين هذه التبعيات:
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
بالنسبة إلى الوسيطات الآمنة، أضِف classpath التالي في ملف build.gradle
للمستوى الأعلى.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
الإصدار 1.0.0
الإصدار 1.0.0
14 آذار (مارس) 2019
تم إصدار التنقل 1.0.0
بدون أي تغييرات من 1.0.0-rc02
.
الإصدار 1.0.0-rc02
26 شباط (فبراير) 2019
هذا هو الإصدار الثاني المرشح للإصدار المستقر 1.0.0 للتنقل. يتضمّن هذا الإصدار عددًا من إصلاحات الأخطاء.
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل
popBackStack()
إذا لم يكن الرسم البياني الجذري يحتوي على رقم التعريف b/126251695 - يعالج
navigateUp()
الآن بشكل صحيح الرجوع إلى مهمة تطبيقك عند استدعاءه بعد التعامل مع رابط لصفحة في التطبيق بدونFLAG_ACTIVITY_NEW_TASK
b/126082008 - تم إصلاح المشكلة المتعلقة
ActivityNavigator.applyPopAnimationsToPendingTransition
بعدم تطبيق الرسم المتحرك الصحيح للخروج من النافذة المنبثقة b/126237567 - يتم الآن إفلات رمز Kotlin الذي تم إنشاؤه بواسطة Safe Args في كلمات رئيسية بلغة Kotlin، مثل
in
وfun
، في اسم الحزمة المرتبط بالفئةR
. b/126020455
الإصدار 1.0.0-rc01
21 شباط (فبراير) 2019
هذا إصدار مرشح للإصدار المستقر 1.0.0 للتنقل. يحتوي هذا الإصدار على إصلاح خطأ واحد.
إصلاح الأخطاء
- تم إصلاح المشكلة التي حدثت عند استخدام Fragments وعمليات التنقل في
singleTop
b/124294805
الإصدار 1.0.0-beta02
12 شباط (فبراير) 2019
يتضمّن هذا الإصدار عددًا من التحسينات الطفيفة وإصلاحات الأخطاء المهمة.
الميزات الجديدة
- يمكنك الآن استخدام
0
كـandroid:defaultValue
لوسيطاتreference
. b/124248602
التغييرات في السلوك
- تُعطى الآن مطابقات الروابط التامة لصفحة معيّنة في التطبيق الأولوية على الروابط لصفحات في التطبيق التي تتضمّن
.*
أو مطابقة وسيطات. b/123969518
إصلاح الأخطاء
- تعرض
popBackStack()
وnavigateUp
الآن بشكل صحيحfalse
عند النقر على الوجهة الأخيرة في الحزمة الخلفية، ما يؤدي إلى إصلاح تراجع تم طرحه في1.0.0-beta01
. b/123933201 - يعمل التنقّل الآن على ضبط
ClassLoader
بشكلٍ صحيح أثناء استعادة حالة المثيل المحفوظة، مع تجنُّب المشاكل عند استخدام فئات مخصَّصة في الحالة المحفوظةNavigator
أو في الوسيطات المُرسَلة إلىNavDestination
. b/123893858 - لم تعُد فئات NavArgs التي أنشأتها Safe Args تعطّل عند استعادة
وسيطة
Parcelable[]
من حالة المثيل المحفوظة. b/123963545 - تعمل ميزة Safe Args الآن على إزالة فئات Kotlin غير الضرورية التي تم إنشاؤها. b/124120883
الإصدار 1.0.0-beta01
4 شباط (فبراير) 2019
هذا هو الإصدار التجريبي الأول من ميزة التنقل؛ ومن الآن فصاعدًا، من المتوقع أن تظل واجهة برمجة تطبيقات التنقل مستقرة حتى الإصدار التالي ما لم تكن هناك مشكلة حرجة. يتضمّن هذا الإصدار بعض إصلاحات الأخطاء والتغييرات في السلوك.
التغييرات في السلوك
- يضمن التنقل الآن أن يتم التعامل مع القيم الافتراضية للوسيطة بشكل متطابق في وقت التشغيل ومن خلال الوسيطات الآمنة. نتيجةً لذلك، لا يمكن أن تحتوي سوى الوسيطات التي تتضمّن
app:argType="reference"
على قيمة تلقائية تشير إلى مورد آخر (على سبيل المثال،@color/colorPrimary
). ستؤدي محاولة استخدام قيمة تلقائية لمرجع مع قيمةapp:argType
مختلفة إلى حدوث استثناء عند تحليل ملف XML للتنقل. b/123551990 - تعتمد Safe Args الآن على الإصدار 3.3.0 من المكوّن الإضافي Android Gradle aosp/888413
- تعتمد Safe Args الآن على Kotlin 1.3.20 aosp/888414
إصلاح الأخطاء
- يمكن الآن استخدام Safe Args في المكتبة ووحدات الميزات في جميع إصدارات مكوّن Android Gradle الإضافي. b/121304903
- تم إصلاح الانحدار الذي قد يتسبب في وضع عملية
popBackStack()
واحدة لجميع نُسخ الوجهة من أعلى الحزمة الخلفية، بدلاً من إزالة وجهة واحدة فقط في كل مرة. b/123552990 - تم إصلاح المشكلة المتمثلة في إلغاء مزامنة حالة
FragmentNavigator
مع حالةNavController
، مما يتسبب فيIllegalStateException
عند محاولة استعادة المكدس الخلفي. b/123803044 - تم إصلاح المشكلة المتمثلة في عدم ظهور سهم الرجوع "
NavigationUI
" الذي تتم معالجته عند استخدام ProGuard مع التشويش. b/123449431 - إنّ الرمز الذي تم إنشاؤه من خلال الوسيطات الآمنة (Safe Args) يعالج الآن بشكل صحيح استخدام
app:argType
للإشارة إلى فئة داخلية ثابتة بالتنسيق.OuterClass$InnerClass
. b/123736741 - إنّ رمز Java الذي تم إنشاؤه بواسطة Safe Args يعالج الآن بشكل صحيح الإجراءات العامة والوجهات المتداخلة بشدة. b/123347762
الإصدار 1.0.0-alpha11
23 كانون الثاني (يناير) 2019
هذا إصدار إصلاح عاجل من 1.0.0-alpha10
يعمل على إصلاح مشكلة متعلقة بـ Safe Args.
إصلاح الأخطاء
- إصلاح مشكلة تعذُّر استيراد الوسيطات الآمنة لفئة الاتجاهات المرتبطة بالإجراءات الشاملة b/123307342
الإصدار 1.0.0-alpha10
23 كانون الثاني (يناير) 2019
المشاكل المعروفة
- يتعذّر على Safe Args استيراد فئة الاتجاهات المرتبطة بالإجراءات العامة. b/123307342
يحتوي هذا الإصدار على تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.
الميزات الجديدة
- يمكن لمستخدمي لغة Kotlin الآن استخدام تفويض السمة
by navArgs()
للحصول على مرجع لفئةNavArgs
من الوسيطات الآمنة التي تم إنشاؤها فيActivity
أوFragment
. b/122603367 - تتيح لك أداة Safe Args الآن إنشاء رمز لغة البرمجة Kotlin من خلال تثبيت
المكوّن الإضافي
androidx.navigation.safeargs.kotlin
. تم تصميم رمز Kotlin خصيصًا لوحدات Kotlin فقط، وذلك باستخدام الوسيطات التلقائية والفئات غير القابلة للتغيير على نمط أداة الإنشاء الذي لا يزال متاحًا من خلال المكوِّن الإضافيandroidx.navigation.safeargs
السابق. b/110263087
التغييرات في السلوك
- تكون الروابط المطابقة لصفحات معيّنة في التطبيق منحازة الآن نحو الرابط لصفحة معيّنة في التطبيق الذي يحتوي على معظم الوسيطات الأكثر مطابقة. b/118393029
- سيؤدي الاتصال بـ
setGraph()
علىNavController
إلى إعادة ضبط الحزمة الخلفية الآن. b/111450672 - لم تعد الروابط غير المعروفة لصفحات معيّنة في التطبيق تعرض الخطأ
IllegalStateException
، ولكن يتم تجاهلها، ما يؤدي إلى إصلاح المشاكل المتعلقة بعناصرNavHostFragment
المتداخلة أو المتعددة. b/121340440
تغييرات قد تؤدي إلى أعطال
- تم نقل طريقة
NavOptions.applyPopAnimationsToPendingTransition()
لتطبيق الرسوم المتحركة المنبثقة على نشاط إلىActivityNavigator
. b/122413117 - تتجنب الوسيطات الآمنة الآن تكرار الفئات المتطابقة للإجراءات بدون
وسيطات. أصبح نوع الإرجاع الذي لا يتضمن أي أساليب وسيطة في فئات NavDirections التي تم إنشاؤها
الآن
NavDirections
. b/123233147 - لم تعد فئات الاتجاهات التي تم إنشاؤها باستخدام الوسيطات الآمنة تحتوي على أداة إنشاء عامة، ويجب أن تتفاعل فقط مع الطرق الثابتة التي يتم إنشاؤها. b/123031660
- لم تعد فئات
NavDirections
التي تم إنشاؤها من خلال Safe Args تحتوي على أداة إنشاء عامة، حيث يجب إنشاؤها فقط من خلال الطرق الثابتة في فئات الاتجاهات التي تم إنشاؤها. b/122963206 - تم الآن وضع علامة
@NonNull
بدلاً من@Nullable
على رسالةBundle
المعروضة منgetArguments()
لـNavDirections
. b/123243957
إصلاح الأخطاء
- تعالج
NavDeepLinkBuilder
الآن بشكل صحيح عدةPendingIntent
متزامنة للوجهة نفسها باستخدام الوسيطات التي ترسلها لتحديد مدى تفرّدها. b/120042732 - تعالج
NavController
الآن بشكل صحيح عملياتpopBackStack()
عند استخدامNavHostFragment
مدمجة أو أجزاء فرعية أخرى مع تكديس خلفي. b/122770335 - يضبط
NavigationUI
الآن وصف محتوى الزر لأعلى بشكل صحيح. b/120395362 - فئات الاتجاهات التي تم إنشاؤها من خلال Safe Args تعالج الآن الإجراءات العامة التي لها المعرّف نفسه كإجراء على وجهة معيّنة. b/122962504
- تنشئ الوسيطات الآمنة
NavDirections
فئات بشكل صحيح تحتوي على قيمhashCode()
متساوية عندما تكون قيمةequals()
صحيحة. b/123043662 - تعرض
FragmentNavigator
الآن رسالة خطأ أفضل إذا حاولت تنفيذFragmentTransactions
مخصّص علىFragmentManager
فيNavHostFragment
. يجب استخدامgetChildFragmentManager()
دائمًا. b/112927148
الإصدار 1.0.0-alpha09
18 كانون الأول (ديسمبر) 2018
يحتوي هذا الإصدار على تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.
لقد اخترنا عدم مواصلة تطوير
عنصر android.arch.navigation:navigation-testing
. أثبتت هذه العملية فعاليتها في الاختبار الداخلي لـ NavController
، إلا أنّنا ننصح بشدة باستخدام استراتيجيات الاختبار البديلة، مثل السخرية من مثيل NavController
، للتأكّد من أنّه يتم تنفيذ طلبات navigate()
الصحيحة. تتم مناقشة هذا النهج بالتفصيل في
حديث النشاط الواحد ضمن AndroidDevSummit 2018
وسنعمل على تقديم مستندات إضافية تحديدًا حول الاختبار باستخدام ميزة التنقّل.
الميزات الجديدة
- لن تؤدي
MenuItem
s التي تتضمنmenuCategory="secondary"
إلى عرض المكدس الخلفي عند استخدامها مع طرقNavigationUI
. b/120104424 - يتيح لك
AppBarConfiguration
الآن ضبط مثيلOnNavigateUpListener
الاحتياطي الذي يتم طلبه عند عودةnavController.navigateUp()
false
. b/79993862 b/120690961
تغييرات قد تؤدي إلى أعطال
- عند استخدام
<argument>
معargType="reference"
، لن تعمل ميزة التنقّل على تحليل المرجع، بل توفّر معرّف المورد الأوّلي نفسه. b/111736515 onNavDestinationSelected()
تعود الآن تلقائيًا إلى وجهة البداية للرسم البياني للتنقل، مما يجعلها متسقة مع طرقsetup
. يجب إضافةmenuCategory="secondary"
إلىMenuItem
لتجنُّب إيقاف الحزمة مرة أخرى. aosp/852869fromBundle()
طرق إنشاءArgs
الصفوف تأخذ الآن قيمة غير فارغةBundle
بدلاً منBundle
aosp/845616
إصلاح الأخطاء
- يتم الآن تحليل الوسيطات بشكلٍ صحيح من الروابط لصفحات في التطبيق على أنها
argType
الصحيحة بدلاً من أن تكون دائمًا كسلاسل b/110273284 - يصدّر التنقل الآن موارده العامة بشكل صحيح b/121059552
- Safe Args متوافقة الآن مع المكوّن الإضافي Android Gradle 3.4 Canary 4 والإصدارات الأحدث b/119662045
الإصدار 1.0.0-alpha08
6 كانون الأول (ديسمبر) 2018
يحتوي هذا الإصدار على تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.
الميزات الجديدة
- عند استخدام تصنيفات الوجهة مع طرق
NavigationUI
، ستحل الآن تلقائيًا محل{argName}
مثيلات فيandroid:label
بالوسيطة الصحيحة b/80267266 - يعتمد التنقّل الآن على الإصدار 28.0.0 من Support Library b/120293333
تغييرات قد تؤدي إلى أعطال
- تمت إعادة تسمية
OnNavigatedListener
إلىOnDestinationChangedListener
b/118670572 - يجتاز
OnDestinationChangedListener
الآن أيضًاBundle
من الوسيطات aosp/837142 - تمت إزالة السمتَين
app:clearTask
وapp:launchDocument
والطرق المرتبطة بهما. يمكنك استخدامapp:popUpTo
مع جذر الرسم البياني لإزالة جميع الوجهات من الحزمة الخلفية. b/119628354 - يستخدم
ActivityNavigator.Extras
الآن نمطBuilder
مع إمكانية ضبط أي علاماتIntent.FLAG_ACTIVITY_
. aosp/828140 - تمت إعادة تسمية
NavController.onHandleDeepLink
إلىhandleDeepLink
aosp/836063 - تم
final
aosp/835681 العديد من الفئات والطرق غير المخصصة للفئات الفرعية، مثلNavOptions
وNavInflater
وNavDeepLinkBuilder
وAppBarConfiguration
. - تمت إزالة طريقة
NavHostFragment.setGraph()
المتوقّفة نهائيًا aosp/835684 - لقد أزلنا طريقة
NavigationUI.navigateUp(DrawerLayout, NavController)
المتوقّفة نهائيًا. aosp/835684 - تم نقل إنشاء الجزء إلى
FragmentNavigator
، لتسهيل تفويض إنشاء جزء إلىFragmentFactory
. b/119054429 - لم تعُد الدالة الإنشائية لـ
NavGraphNavigator
تستخدمContext
aosp/835340 - أصبح NavigatorProvider
فئة الآن بدلاً من واجهة. لم يتم تغيير وظائف
NavigatorProvider
التي يعرضهاgetNavigatorProvider()
. aosp/830660 - تمّت إزالة
NavDestination.navigate()
. يمكنك الاتصال بـnavigate()
علىNavigator
بدلاً من ذلك. aosp/830663 - إعادة هيكلية كبيرة لـ
Navigator
، ما يؤدّي إلى إلغاء الحاجة إلىOnNavigatorNavigatedListener
وبدلاً من ذلك جعلnavigate
يعيدNavDestination
الذي تم الانتقال إليه. - لم يعُد بإمكان
Navigator
مثيل إرسال أحداث منبثقة إلىNavController
. ننصحك باستخدامOnBackPressedCallback
لاعتراض ضغطات زر الرجوع والاتصال بـnavController.popBackStack()
. aosp/833716
إصلاح الأخطاء
- تعمل
popUpTo
الآن بشكل متسق عندما تكون الوجهة عبارة عن عنصر<navigation>
b/116831650 - تم إصلاح عدد من الأخطاء التي أدت إلى حدوث الخطأ
IllegalArgumentException
عند استخدام الرسوم البيانية المدمجة b/118713731 b/113611083 b/113346925 b/113305559 - ستعمل السمة
dataPattern
للوجهات<activity>
الآن على تعبئة الوسيطات من الوسيطات التي ليست سلسلة من خلال استدعاءtoString()
b/120161365
الوسيطات الآمنة
- تدعم Safe Args الكائنات القابلة للتسلسل، بما في ذلك قيم Enum. يمكن لأنواع التعدادات
ضبط قيمة تلقائية باستخدام التعداد الحرفي بدون اسم الفئة
(على سبيل المثال
app:defaultValue="READ"
) b/111316353 - تتيح ميزة Safe Args المصفوفات من جميع الأنواع المتوافقة. b/111487504
- تتجاهل Safe Args الآن المجلدات الفرعية لأدلة الموارد. b/117893516
- تضيف Safe Args تعليقات
@Override
التوضيحية حيثما كان ذلك مناسبًا b/117145301
الإصدار 1.0.0-alpha07
29 تشرين الأول (أكتوبر) 2018
الميزات الجديدة
- تتيح لك فئة AppBarConfiguration الجديدة تخصيص الوجهات التي تُعتبر وجهات المستوى الأعلى. راجع المستندات المحدّثة للحصول على التفاصيل. b/117333663
- يمكنك الآن تمرير الوسيطات إلى وجهة البداية للرسم البياني b/110300470
- تتوافق الروابط لصفحات في التطبيق الآن مع المخططات المخصّصة التي تتضمّن نقاطًا وواصلات وعلامات جمع. b/112806402
تغييرات قد تؤدي إلى أعطال
- تم طي وحدة
navigation-testing-ktx
فيnavigation-testing artifact
ولن يتم نشرها بعد الآن. - تعتمد أداة
navigation-testing
الآن على مكتبة معايير لغة البرمجة Kotlin. تم تغيير واجهة برمجة التطبيقات لتصبح أكثر اتساقًا مع اصطلاحات Kotlin، ولكن يمكنك متابعة استخدامها للاختبارات المكتوبة بلغة Java. - لم تعُد الرسوم البيانية للتنقّل في بيان البيانات الوصفية متاحة. b/118355937
- لم يعُد من الممكن إرفاق الإجراءات بوجهات <activity>. aosp/785539
إصلاح الأخطاء
- تعمل روابط صفحات التطبيق الآن على تحليل مَعلمات طلب البحث بشكل صحيح. b/110057514
- تطبّق وجهات الأنشطة الآن جميع رسوم الدخول والخروج بشكلٍ صحيح. b/117145284
- العطل الذي تم إصلاحه يحدث بعد تغيير الإعداد عند استخدام برامج التنقل المخصصة. b/110763345
الوسيطات الآمنة
- أصبحت المنصات الآمنة الآن تعتمد على المكوّن الإضافي Android Gradle الإضافي 3.2.1. b/113167627
- يمكن الآن إنشاء التوجيهات للصفوف الداخلية. b/117407555
- تم إصلاح مشكلة إنشاء الاتجاهات إلى رسم بياني من <include>. b/116542123
الإصدار 1.0.0-alpha06
20 أيلول (سبتمبر) 2018
الميزات الجديدة
- تتوفّر الآن عمليات نقل العناصر المشتركة لوجهات "الأجزاء" و"النشاط" b/79665225. لمزيد من المعلومات، يُرجى الاطّلاع على تنفيذ التنقّل باستخدام مكوِّن بنية التنقل.
- سيؤدي اختيار عنصر في
NavigationView
إلى إغلاق أي بطاقة تحتوي على البطاقة السفلية b/112158843.
تغييرات واجهة برمجة التطبيقات
- تغيير مهم: تأخذ طريقة المستكشف
navigate()
الآن المعلَمةNavigator.Extras
. - طريقة
getGraph()
في NavController أصبحت الآنNonNull
b/112243286
إصلاح الأخطاء
- لم يعد بإمكان
NavigationUI.setupWithNavController()
تسريب المشاهدات إذا تم استخدامها مع المشاهدات من وجهات فردية b/111961977 - تم الآن تسمية المستكشف
onSaveState()
مرة واحدة فقط b/112627079
الوسيطات الآمنة
- تعمل فئات الاتجاهات في وجهة التنقل الآن على تمديد فئة الاتجاهات التابعة لها الرئيسية إذا كانت موجودة b/79871405
- تتضمّن فصول الاتجاهات وARgs الآن تطبيق
toString()
مفيدًا b/111843389
الإصدار 1.0.0-alpha05
10 آب (أغسطس) 2018
إصلاح الأخطاء
- إصلاح الخطأ الذي يتسبب في حدوث سلوك غير صحيح لحزمة Backstack. b/111907708
- إصلاح خطأ في
equals()
بفئات Args التي تم إنشاؤها. b/111450897 - يجب إصلاح إخفاق الإصدار في Safe Args. b/109409713
- إصلاح إحالة ناجحة من معرّفات الموارد إلى أسماء JavaScript b/111602491
- إصلاح رسائل الخطأ بشأن قابلية القيم الفارغة في المكوِّن الإضافي Safe Args
- أضِف تعليقات توضيحية غير متوفّرة حول القيم الفارغة.
الإصدار 1.0.0-alpha04
July 19, 2018
يحتوي شريط التنقّل 1.0.0-alpha04
والمكوِّن الإضافي Safe Args الإضافي المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وإصلاحات الأخطاء.
التغييرات في واجهات برمجة التطبيقات أو السلوك
- سيضبط NavHostFragment دائمًا الجزء الحالي كجزء التنقل الأساسي، مع التأكد من فتح مدراء الأجزاء الفرعية قبل ظهور وحدة التحكّم الخارجية في NavHostFragment b/111345778
الوسيطات الآمنة
- تغيير مهم: تم تغيير
app:type
إلىapp:argType
لتجنُّب التعارضات مع المكتبات الأخرى مثل ConstraintLayout 2.0.0-alpha1 b/111110548 - يمكن الآن النقر على رسائل الخطأ الواردة من Safe Args b/111534438
- تؤكد فئات Args الآن أن سمات
NonNull
ليست فارغة b/111451769 - تمت إضافة تعليقات
NonNull
التوضيحية الإضافية إلى الفئات التي تم إنشاؤها بواسطة NavDirections وARgs b/111455455 b/111455456.
إصلاح الأخطاء
- تم إصلاح مشكلة زر الرجوع في النظام بعد الربط بصفحة معيّنة بوجهة جزء b/111515685
الإصدار 1.0.0-alpha03
12 تموز (يوليو) 2018
يحتوي شريط التنقّل 1.0.0-alpha03
والمكوِّن الإضافي Safe Args الإضافي المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وإصلاحات الأخطاء.
التغييرات في واجهات برمجة التطبيقات أو السلوك
- تمت إضافة طريقة NavigationUI.setupWithNavController لشريط الأدوات b/109868820
- تمت إضافة طريقة NavigationUI.setupWithNavController لـ CollapsingToolbarLayout b/110887183
- تعرض PopBackStack() الآن القيمة "false" عندما يكون المكدس الخلفي فارغًا أو عندما لا يكون رقم تعريف الوجهة المحدد في الحزمة الخلفية من b/110893637.
- يتجاهل FragmentNavigator الآن عمليات التنقل بعد حفظ FragmentManager للحالة، مع تجنب "لا يمكن تنفيذ هذا الإجراء بعد استثناءات onSaveInstanceState" b/110987825
الوسيطات الآمنة
- تغيير مهم: سيتم استبدال الأحرف غير الأبجدية الرقمية في اسم الإجراء وأسماء الوسيطات بحالة الجمل في أسماء طرق NavDirections ذات الصلة.
- على سبيل المثال، سيصبح
DemoController.index
setDemoControllerIndex
b/79995048. - على سبيل المثال، سيصبح
action_show_settings
actionShowSettings
b/79642240.
- على سبيل المثال، سيصبح
- تغيير قد يؤدي إلى عطل: تُعتبر الوسيطات الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في السلسلة والوسيطات القابلة للفصل، أضِف
app:nullable="true"
b/79642307. - يمكنك الآن استخدام
app:type="long"
مع القيم التلقائية على شكل "123L" b/79563966. - أصبحت الوسيطات القابلة للدمج متاحة الآن، باستخدام اسم فئة مؤهل بالكامل لـ
app:type
. إنّ القيمة التلقائية الوحيدة المتوافقة هي"@null"
b/79563966. - تنفِّذ صفوف Args الآن
equals()
وhashCode()
b/79642246 - يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553
- يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع الميزات b/110011752
إصلاح الأخطاء
- تم إصلاح المشكلات عند التنقل أثناء طرق دورة حياة التجزئة b/109916080
- تم إصلاح المشاكل عند التنقل من خلال الرسوم البيانية المتداخلة عدة مرات b/110178671
- تم حل المشاكل عند استخدام
setPopUpTo
مع الوجهة الأولى في الرسم البياني b/109909461 - تم إصلاح المشكلة المتمثلة في تمرير جميع قيم
app:defaultValue
كسلاسل b/110710788 - يضيف الآن aapt2 المضمن مع المكوّن الإضافي Android Gradle Plugin 3.2 الإصدار التجريبي 01 قواعد احتفاظ بالبيانات لكل سمة
android:name
في ملفات التنقل بتنسيق XML b/79874119. - تم إصلاح تسرب الذاكرة عند استبدال FragmentNavigator التلقائي b/110900142
الإصدار 1.0.0-alpha02
7 حزيران (يونيو) 2018
التغييرات في السلوك
يستخدم تطبيق
FragmentNavigator
الآنsetReorderingAllowed(true)
. b/109826220الانتقال الآن: URLفك ترميز الوسيطات المُحلّلة من عناوين URL لروابط صفحات التطبيق. b/79982454
إصلاح الأخطاء
تم إصلاح
IllegalStateException
عند استدعاء الانتقال من طرق مراحل نشاط التجزئة. b/79632233يعتمد التنقل الآن على الإصدار 27.1.1 من Support Library لإصلاح الوميض عند استخدام الرسوم المتحركة. b/80160903
تم إصلاح
IllegalArgumentException
عند استخدام defaultNavHost="true" كجزء ثانوي. b/79656847تم إصلاح
StackOverflowError
عند استخدام NavDeepLinkBuilder. b/109653065تم إصلاح
IllegalArgumentException
عند الرجوع إلى رسم بياني متداخل. b/80453447تم إصلاح مشكلة تداخل الأجزاء عند استخدام
launchSingleTop
. b/79407969ينشئ التنقّل الآن المكدس الخلفي الاصطناعي الصحيح للرسومات البيانية المتداخلة. b/79734195
ستميّز واجهة MapsUI الآن العنصر الصحيح عند استخدام رسم بياني مدمج كدالة
MenuItem
. b/109675998
تغييرات واجهة برمجة التطبيقات
تم إيقاف السمة
clearTask
للإجراءات وواجهة برمجة التطبيقات المرتبطة بها فيNavOptions
. b/80338878تم إيقاف السمة
launchDocument
للإجراءات وواجهة برمجة التطبيقات المرتبطة بها فيNavOptions
نهائيًا. b/109806636
الإصدار 1.0.0-alpha01
8 أيار (مايو) 2018
توفر التنقل إطار عمل لإنشاء التنقل
داخل التطبيق. هذا الإصدار الأولي هو 1.0.0-alpha01
.