التنقّل
androidx.navigation
androidx.navigation.compose
androidx.navigation.dynamicfeatures
androidx.navigation.dynamicfeatures.fragment
androidx.navigation.dynamicfeatures.fragment.ui
androidx.navigation.fragment
androidx.navigation.fragment.compose
androidx.navigation.testing
androidx.navigation.ui
آخر الأخبار | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
---|---|---|---|---|
2 يوليو 2025 | 2.9.1 | - | - | - |
تعريف التبعيات
لإضافة تبعية إلى Navigation، عليك إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف التبعيات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle
لتطبيقك أو وحدتك:
رائع
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.1" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.1" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
لإضافة Safe Args
إلى مشروعك، أدرِج classpath
التالي في ملف build.gradle
من المستوى الأعلى:
رائع
buildscript { repositories { google() } dependencies { def nav_version = "2.9.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.1" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
يجب أيضًا تطبيق أحد المكوّنين الإضافيَين المتاحَين.
لإنشاء رمز برمجي بلغة Java مناسب لوحدات 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. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.
يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.
الإصدار 2.9
الإصدار 2.9.1
2 يوليو 2025
تم طرح androidx.navigation:navigation-*:2.9.1
. يحتوي الإصدار 2.9.1 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبّب في عدم تجاوز
NavEntries
التي تم إنشاء مثيل لها باستخدام single top الحالة CREATED فيLifecycle.State
. (I043ba، b/421095236)
الإصدار 2.9.0
7 مايو 2025
تم طرح androidx.navigation:navigation-*:2.9.0
. يحتوي الإصدار 2.9.0 على عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 2.8.0
- يتم الآن إنشاء إجراءات Safe Args الخاصة بميزة "التنقّل" باستخدام التعليق التوضيحي
@CheckResult
لضمان استخدامها.
واجهة SupportingPane
- يمكن الآن لمكوّنات Custom Navigators وضع علامة على وجهاتها للإشارة إلى أنّها تنفّذ واجهة
SupportingPane
، ما يشير إلىNavController
بأنّه سيتم عرض هذه الوجهات إلى جانب الوجهات الأخرى. باستخدام هذه الواجهة، يمكنRESUMED
وجهات متعددة في الوقت نفسه، على سبيل المثال.
Compose Kotlin Multiplatform
- توفّر ميزة "التنقّل" الآن دالة
NavController.handleDeepLink()
جديدة مشتركة تأخذNavDeepLinkRequest
بدلاً منIntent
. يتيح ذلك للمنصات الأخرى غير Android التعامل مع الروابط لصفحات في التطبيق بشكل صحيح. شكرًا لك "كونستانتين تسخوفريبو"! - توفّر ميزة "التنقّل" الآن
NavUri
، وهي دالة محلّل لغوي جديدة مشتركة تمثّل واجهة برمجة تطبيقات متوافقة مع معرّف الموارد الموحّد (URI) في Android على المنصات الأخرى. ويتيح ذلك إنشاء معرّف موارد موحّد بطريقة مستقلة عن النظام الأساسي. شكرًا لك "كونستانتين تسخوفريبو"!
الدوال الآمنة من حيث النوع
- واجهات برمجة التطبيقات الآمنة من حيث النوع التي كان يمكن الوصول إليها سابقًا فقط من خلال طرق
reified
، أي تتضمّنcomposable<YourScreen>
الآن إصدارات غير مجسَّمة تقبل مباشرةً مثيلاً منKClass
. - تتيح ميزة "أمان نوع التنقّل" الآن استخدام فئات القيم كمسار أو كنوع وسيطة لمسار.
الإصدار 2.9.0-rc01
23 أبريل 2025
تم طرح androidx.navigation:navigation-*:2.9.0-rc01
. يحتوي الإصدار 2.9.0-rc01 على عمليات الدمج هذه.
إصلاح الأخطاء
- تمت إزالة جميع استهدافات الأنظمة الأساسية غير Android من Jetpack Navigation لأنّ هذه الاستهدافات لا تعمل في الواقع. تم الآن توفير رموز صورية للأنظمة الأساسية المختلفة بدلاً من ذلك.(I2877d)
الإصدار 2.9.0-beta01
9 أبريل 2025
تم طرح androidx.navigation:navigation-*:2.9.0-beta01
. يحتوي الإصدار 2.9.0-beta01 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تم تغيير واجهة برمجة التطبيقات الشائعة
parseStringAsNavUri
إلى دالة مصنعNavUri
تأخذ سلسلة. (I4db6e، b/403616316)
تحديثات التبعيات
- تستهدف هذه المكتبة الآن مستوى لغة Kotlin 2.0 وتتطلّب الإصدار 2.0.0 أو إصدارًا أحدث من KGP. (Idb6b5)
الإصدار 2.9.0-alpha09
26 مارس 2025
تم طرح androidx.navigation:navigation-*:2.9.0-alpha09
. يحتوي الإصدار 2.9.0-alpha09 على عمليات الدمج هذه.
الميزات الجديدة
- يتوافق الآن المكوّن الإضافي
navigation-testing
مع أجهزة الكمبيوتر المكتبي وLinux وmacOS وiOS بالإضافة إلى Android. (I2b770، b/398265336) - أصبح بإمكانك استخدام
NavType
على أجهزة الكمبيوتر المكتبي وLinux وmacOS وiOS بالإضافة إلى Android. (I297d8)
الإصدار 2.9.0-alpha08
12 مارس 2025
تم طرح androidx.navigation:navigation-*:2.9.0-alpha08
. يحتوي الإصدار 2.9.0-alpha08 على عمليات الدمج هذه.
إصلاح الأخطاء
- من Navigation
2.8.9
: تم إصلاح مشكلة تراجع في Navigation 2.8.8 كانت تتطلّب أن يتطابق الرابط لصفحة معيّنة مع جميع حقول طلب الرابط لصفحة معيّنة أو الهدف تمامًا ليتم اعتباره مطابقًا. وقد أدّى ذلك إلى توقّف الروابط المؤدية إلى صفحات في التطبيق التي تتضمّن تطابقات جزئية للحقول ولا تتضمّن غيرها. (Ie5e36، b/399826566)
المساهمة الخارجية
- دالة محلّل عامة جديدة لإنشاء
NavUri
شكرًا لك "كونستانتين تسخوفريبو"! (If0a6a)
الإصدار 2.9.0-alpha07
26 فبراير 2025
تم طرح androidx.navigation:navigation-*:2.9.0-alpha07
. يحتوي الإصدار 2.9.0-alpha07 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تؤدي إلى ظهور قيمة فارغة لـ savedState عند محاولة
saveState
باستخدام نافذة منبثقة غير شاملة، ما قد يؤدي إلى حدوث عطل عند الاستعادة. (I9f3e8، b/395091644) - من Navigation 2.8.8: تم إصلاح مشكلة مطابقة
NavDeepLink
حيث يجب أن يتطابق الرابط لصفحة في التطبيق وطلب الرابط لصفحة في التطبيق تمامًا مع عنوان URI والإجراء ونوع MIME. لم يعُد يُسمح بالمطابقة إذا تطابق حقل واحد أو حقلان فقط. (I3b029، b/395712033) - من Navigation 2.8.8: تم إصلاح الخطأ الذي لا تتطابق فيه المسارات التي تتضمّن مسارات أحرف بدل مع رابط لصفحة في التطبيق تمت إضافته (I7ea92، b/389970341)
المساهمة الخارجية
- استخرِج واجهات برمجة التطبيقات navigation-common وnavigation-runtime وnavigation-compose إلى المنصة المشتركة. شكرًا لك "كونستانتين تسخوفريبو"! (I1e626 وIca76f وIdf479)
المشاكل المعروفة
- بسبب العمل على حلّ المشكلة b/395712033، يُطلب بشكلٍ غير صحيح أن تتضمّن الروابط لصفحات في التطبيق جميع الحقول نفسها التي يتضمّنها طلب الرابط و/أو
Intent
. يجب أن تتطابق الروابط لصفحات في التطبيق مع الحقول التي تحتوي عليها فقط، ويجب تجاهل الحقول غير المضمّنة. تم حلّ هذه المشكلة في إصدار لاحق كجزء من b/399826566.
الإصدار 2.9.0-alpha06
12 فبراير 2025
تم طرح androidx.navigation:navigation-*:2.9.0-alpha06
. يحتوي الإصدار 2.9.0-alpha06 على عمليات الإيداع هذه.
الميزات الجديدة
- يتم الآن إنشاء إجراءات Safe Args الخاصة بميزة "التنقّل" باستخدام التعليق التوضيحي
@CheckResult
لضمان استخدامها. (I14d4c، b/356323084)
إصلاح الأخطاء
- تم إصلاح خطأ في
NavController
حيث تمت محاولة استعادة حالات backStack بشكل غير صحيح إلى مصفوفة عند حفظها في قائمة. (Idfb9b) - من التنقل
2.8.7
: توفّر حزمة Safe Args الخاصة بمكوّن Navigation الآن إمكانية استخدام وجهات قابلة للإنشاء. (I35320، b/362791955)
الإصدار 2.9.0-alpha05
29 يناير 2025
تم طرح androidx.navigation:navigation-*:2.9.0-alpha05
. يحتوي الإصدار 2.9.0-alpha05 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تتسبّب في ظهور رسم متحرك غير متوقّع لتغيير الحجم عند استخدام Navigation Compose. (I480f4، b/353294030)
- من التنقّل
2.8.6
: سيتم تحليل تصنيفاتNavDestination
المقدَّمة من خلال XML باستخدامNavType.get
لضمان احترام منطقNavType
المخصّص. (I7ec2f، b/388100796) - من التنقّل
2.8.6
: عند التنقّل إلى نشاط باستخدامdataPattern
، سيحاولActivityNavigator
الآن ترميز قيمة الوسيط باستخدامNavType
للوسيط. (I16376، b/383616432) - من التنقّل
2.8.5
: تم إصلاح مشكلة تسبّبت في ظهور حركة تحجيم غير متوقّعة عند استخدام Navigation Compose واستدعاء navigate في الإطار نفسه الذي تنتهي فيه الحركة الحالية. (I26cb1، b/353294030)
الإصدار 2.9.0-alpha04
11 ديسمبر 2024
تم طرح androidx.navigation:navigation-*:2.9.0-alpha04
. يحتوي الإصدار 2.9.0-alpha04 على عمليات الدمج هذه.
الميزات الجديدة
- واجهات برمجة التطبيقات الآمنة من حيث النوع التي كان يمكن الوصول إليها سابقًا فقط من خلال طرق
reified
، أيcomposable<YourScreen>
تتضمّن الآن إصدارات غير مجسّمة تقبل مباشرةً مثيلاً منKClass
.(Ia7eed، Id2879، Ibf244، I17d79، Id09d2، I54696، Ia47be، I93281، Ic1bf0، Iba4ee، If56a5، Icf969، I67644، I6f788، b/382094941، b/366291612، b/381938808)
يقدّم الجدول أدناه واجهات برمجة التطبيقات reified وKClass.
reified | KClass |
---|---|
composable<TestClass> { } |
composable(TestClass::class) { } |
navigation<NestedGraph>(startDestination = TestClass::class) |
navigation(route = NestedGraph::class, startDestination = TestClass::class) |
dialog<TestClass> {} |
dialog(TestClass::class) {} |
navDeepLink<TestClass>(baseUri) |
navDeepLink(TestClass::class, baseUri) |
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) |
NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri) |
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } |
NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { } |
navController.getBackStackEntry<TestClass>() |
navController.getBackStackEntry(TestClass::class) |
navController.popBackStack<TestClass>(true) |
navController.popBackStack(TestClass::class, true) |
navController.clearBackStack<TestClass>() |
navController.clearBackStack(TestClass::class) |
NavOptions.setPopUpTo<TestClass>() |
NavOptions.setPopUpTo(TestClass::class) |
navOptions { popUpTo<TestClass> {...} } |
navOptions { popUpTo(TestClass::class) {...} } |
NavGraph.setStartDestination<TestClass>() |
NavGraph.setStartDestination(TestClass::class) |
NavGraph.findNode<TestClass>() |
NavGraph.findNode(TestClass::class) |
backStackEntry.toRoute<TestClass>() |
backStackEntry.toRoute(TestClass::class) |
savedStateHandle.toRoute<TestClass>() |
savedStateHandle.toRoute(TestClass::class) |
تغييرات واجهة برمجة التطبيقات
- يتم إخفاء عملية التحميل الزائد
NavGraph.setStartDestination
الخاصة بلغة Kotlin لضمان أمان الأنواع عن مصادر Java. (Ic640c، b/364634035)
إصلاح الأخطاء
- من التنقّل
2.8.5
: تم إصلاح مشكلة كان يمكن أن يؤدي فيهاNavHost
إلى حدوث استثناء داخلPredictiveBackHandler
إذا تم إزالة آخر إدخال من سجلّ الرجوع وتم تفعيل الرجوع إلى الخلف في النظام في الإطار نفسه. (I1a429، b/375343407) - من التنقّل
2.8.5
: تم إصلاحNavDestination
NullPointerException
عند تعديلstartDestination
في رسم بياني. (I99421، b/361560785)
المساهمة الخارجية
- من التنقّل
2.8.5
: يتيح أمان نوع التنقّل الآن استخدامList<Enum>
كنوع وسيطة لمسار بدون الحاجة إلى أيNavType
مخصّص. شكرًا Csaba Kozák. (GH-725، b/375559962)
الإصدار 2.9.0-alpha03
13 نوفمبر 2024
تم طرح androidx.navigation:navigation-*:2.9.0-alpha03
. يحتوي الإصدار 2.9.0-alpha03 على عمليات الإيداع هذه.
الميزات الجديدة
- تتيح ميزة "أمان نوع التنقّل" الآن استخدام فئات القيم كمسار أو كنوع وسيطة لمسار. (I9344a، b/374347483)
إصلاح الأخطاء
- تم إصلاح
ConcurrentModificationException
كان من المحتمل أن يحدث عندما يؤديLifecycleObserver
مرفق بـNavBackStackEntry
إلى تغيير في سجلّ التصفّح الخلفي عندما يغيّر المضيفLifecycleOwner
، مثل النشاط أو الجزء الحاوي، حالة دورة حياته. (Ia9494)
الإصدار 2.9.0-alpha02
30 أكتوبر 2024
تم طرح androidx.navigation:navigation-*:2.9.0-alpha02
. يحتوي الإصدار 2.9.0-alpha02 على عمليات الدمج هذه.
المساهمة الخارجية
- طريقة
NavController.handleDeepLink(request: NavDeepLinkRequest)
جديدة وشائعة شكرًا لك "كونستانتين تسخوفريبو"! (I3e228)
الإصدار 2.9.0-alpha01
16 أكتوبر 2024
تم طرح androidx.navigation:navigation-*:2.9.0-alpha01
. يحتوي الإصدار 2.9.0-alpha01 على عمليات الإيداع هذه.
الميزات الجديدة
- يمكن الآن لمكوّنات Custom Navigators وضع علامة على وجهاتها للإشارة إلى أنّها تنفّذ واجهة
SupportingPane
، ما يشير إلىNavController
بأنّه سيتم عرض هذه الوجهات إلى جانب الوجهات الأخرى. باستخدام هذه الواجهة، يمكنRESUMED
وجهات متعددة في الوقت نفسه، على سبيل المثال. (Id5559) - من التنقل
2.8.3
: أضفنا عمليات فحص جديدة باستخدام أداة lint للوحداتnavigation-common
وnavigation-runtime
وnavigation-compose
للمساعدة في تحديد أي مسارات آمنة من حيث النوع لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام@Serializable
. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافةNavGraphBuilder
وNavDeepLinkBuilder
. (I4a259، I95402، Ie601a، Id8c6e، I28bda، b/362725816) - من التنقل
2.8.3
: تمت إضافة عمليات فحص جديدة باستخدام أداة Lint للوحداتnavigation-common
وnavigation-runtime
وnavigation-compose
للمساعدة في تحديد أي مسارات آمنة من حيث النوع تتضمّن وسيطات Enum لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام@Keep
. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافةNavGraphBuilder
وNavDeepLinkBuilder
. (I4a259 وI95402 وIe601a وId8c6e وI2b46f وb/358687142)
التغييرات في السلوك
- ستؤدي محاولة استخدام
NavController
تمDESTROYED
من قبل إلى حدوثIllegalStateException
. (I520da، b/369616172)
إصلاح الأخطاء
- تعديل استثناء عدم العثور على فئة Enum لاقتراح استخدام التعليق التوضيحي
@Keep
في حال محو فئة Enum في الإصدارات المصغّرة (I90e79، b/358137294)
المشاكل المعروفة
- هناك مشكلة في قواعد Lint الجديدة التي تمت إضافتها في
Navigation 2.8.*
وتتسبّب في ظهور الخطأObsolete custom lint check
عند محاولة تشغيل Lint باستخدام الإصدار 8.4 أو إصدار أحدث من "مكوّن Android الإضافي في Gradle". (b/368070326 وb/371463741)
الإصدار 2.8
الإصدار 2.8.9
12 مارس 2025
تم طرح androidx.navigation:navigation-*:2.8.9
. يحتوي الإصدار 2.8.9 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح خطأ في Navigation 2.8.8 كان يتطلّب أن يتطابق الرابط لصفحة معيّنة مع جميع حقول طلب الرابط لصفحة معيّنة أو الهدف تمامًا ليتم اعتباره مطابقًا. وقد أدّى ذلك إلى توقّف الروابط المؤدية إلى صفحات في التطبيق التي تتضمّن تطابقات جزئية للحقول ولا تتضمّن غيرها. (Ie5e36، b/399826566)
الإصدار 2.8.8
26 فبراير 2025
تم طرح androidx.navigation:navigation-*:2.8.8
. يحتوي الإصدار 2.8.8 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يتسبب في عدم تطابق المسارات التي تتضمّن مسارات أحرف بدل مع رابط إضافي لصفحة في التطبيق. (I7ea92، b/389970341)
- تم إصلاح مشكلة مطابقة
NavDeepLink
، حيث يجب أن يتطابق الرابط لصفحة في التطبيق وطلب الرابط لصفحة في التطبيق تمامًا من حيث معرّف الموارد المنتظم (URI) والإجراء ونوع MIME. لم يعُد يُسمح بالمطابقة إذا تطابق حقل واحد أو حقلان فقط. (I3227f، b/395712033)
المشاكل المعروفة
- بسبب العمل على حلّ المشكلة b/395712033، يُطلب بشكلٍ غير صحيح أن تتضمّن الروابط لصفحات في التطبيق جميع الحقول نفسها التي يتضمّنها طلب الرابط و/أو
Intent
. يجب أن تتطابق الروابط لصفحات في التطبيق مع الحقول التي تحتوي عليها فقط، ويجب تجاهل الحقول غير المضمّنة. تم حلّ هذه المشكلة في إصدار لاحق كجزء من b/399826566.
الإصدار 2.8.7
12 فبراير 2025
تم طرح androidx.navigation:navigation-*:2.8.7
. يحتوي الإصدار 2.8.7 على عمليات الدمج هذه.
إصلاح الأخطاء
- توفّر مكتبة Navigation Safe Args الآن إمكانية استخدام الوجهات القابلة للإنشاء. (I35320، b/362791955)
الإصدار 2.8.6
29 يناير 2025
تم طرح androidx.navigation:navigation-*:2.8.6
. يحتوي الإصدار 2.8.6 على عمليات الدمج هذه.
إصلاح الأخطاء
- ستتم معالجة تصنيفات
NavDestination
المقدَّمة من خلال XML باستخدامNavType.get
لضمان احترام منطقNavType
المخصّص. (Id366d، b/388100796) - عند الانتقال إلى النشاط باستخدام
dataPattern
، سيحاولActivityNavigator
الآن ترميز قيمة الوسيطة باستخدامNavType
للوسيطة. (I1a71d، b/383616432)
الإصدار 2.8.5
11 ديسمبر 2024
تم طرح androidx.navigation:navigation-*:2.8.5
. يحتوي الإصدار 2.8.5 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة كان يمكن أن تؤدي إلى ظهور استثناء داخل
PredictiveBackHandler
إذا تم إزالة آخر إدخال من سجلّ الرجوع وتم تفعيل زر الرجوع في النظام في الإطار نفسه.NavHost
(I1a429، b/375343407) - تم إصلاح الخطأ
NavDestination
NullPointerException
عند تعديلstartDestination
في رسم بياني. (I99421، b/361560785) - تم إصلاح مشكلة تسبّبت في ظهور حركة تحجيم غير متوقّعة عند استخدام Navigation Compose واستدعاء navigate في الإطار نفسه الذي تنتهي فيه الحركة الحالية. (I26cb1، b/353294030)
- تم إصلاح
ConcurrentModificationException
كان من المحتمل أن يحدث عندما يؤديLifecycleObserver
مرفق بـNavBackStackEntry
إلى تغيير في سجلّ التصفّح الخلفي عندما يغيّر المضيفLifecycleOwner
، مثل النشاط أو الجزء الحاوي، حالة دورة حياته. (Ia9494)
المساهمة الخارجية
- تتيح ميزة "أمان نوع التنقّل" الآن استخدام
List<Enum>
كنوع وسيطة لمسار بدون الحاجة إلى أيNavType
مخصّص. شكرًا Csaba Kozák. (GH-725، b/375559962)
الإصدار 2.8.4
13 نوفمبر 2024
تم طرح androidx.navigation:navigation-*:2.8.4
. يحتوي الإصدار 2.8.4 على عمليات الدمج هذه.
الميزات الجديدة
- من التنقّل
2.9.0-alpha03
: يتوافق أمان نوع التنقّل الآن مع فئة القيمة كمسار أو كنوع وسيطة لمسار (I9344a، b/374347483)
إصلاح الأخطاء
- من التنقّل
2.9.0-alpha01
: ستؤدي محاولة استخدامNavController
تمDESTROYED
سابقًا إلى حدوثIllegalStateException
. (I520da، b/369616172)
الإصدار 2.8.3
16 أكتوبر 2024
تم طرح androidx.navigation:navigation-*:2.8.3
. يحتوي الإصدار 2.8.3 على عمليات الدمج هذه.
الميزات الجديدة
- تمت إضافة عمليات فحص جديدة باستخدام أداة Lint للوحدات
navigation-common
وnavigation-runtime
وnavigation-compose
للمساعدة في تحديد أي مسارات آمنة من حيث النوع لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام@Serializable
. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافةNavGraphBuilder
وNavDeepLinkBuilder
. (I4a259، I95402، Ie601a، Id8c6e، I28bda، b/362725816) - تمت إضافة عمليات فحص جديدة للتدقيق اللغوي في الوحدات
navigation-common
وnavigation-runtime
وnavigation-compose
للمساعدة في تحديد أي مسارات آمنة من حيث النوع تتضمّن وسيطات Enum لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام@Keep
. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافةNavGraphBuilder
وNavDeepLinkBuilder
. (I4a259 وI95402 وIe601a وId8c6e وI2b46f وb/358687142)
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تتسبّب في ظهور الخطأ
Obsolete custom lint check
عند محاولة تشغيل أداة lint باستخدام الإصدار 8.4 أو إصدار أحدث من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"، وذلك بسبب قواعد lint الجديدة التي تمت إضافتها فيNavigation 2.8.*
. (I1be3d وb/368070326 وb/371463741)
المشاكل المعروفة
- سيُظهر فحص Navigation lint خطأ Obsolete custom lint check عند محاولة تشغيل فحص lint باستخدام الإصدار 16 من أداة Lint (الإصدار 8.7 من "مكوّن Android الإضافي في Gradle") أو إصدار أحدث. (b/371926651)
الإصدار 2.8.2
2 أكتوبر 2024
تم طرح androidx.navigation:navigation-*:2.8.2
. يحتوي الإصدار 2.8.2 على عمليات الدمج هذه.
الميزات الجديدة
- تتيح ميزة "أمان نوع التنقّل" الآن استخدام فئات Serializable التي تتضمّن
Double
وDouble?
وDoubleArray
وDoubleArray?
وList<Double>
وList<Double>?
بدون الحاجة إلى أيNavType
مخصّص. (I570eb وIbc4c0 وI37461 وI5bed4 وb/359245753)
إصلاح الأخطاء
- تم تحسين رسالة الخطأ التي تظهر عندما يتعذّر على Navigation ربط وسيطة مسار بـ
NavType
، وستتضمّن رسالة الخطأ الجديدة اسم الوسيطة واسم الوسيطة المؤهَّل بالكامل واسم المسار المؤهَّل بالكامل. (Id8416، b/346264232)
الإصدار 2.8.1
18 سبتمبر 2024
تم طرح androidx.navigation:navigation-*:2.8.1
. يحتوي الإصدار 2.8.1 على عمليات الدمج هذه.
الميزات الجديدة
- تمت إضافة قاعدة lint جديدة لضمان استخدام الدالة
popBackStack
التي تتلقّى نوع فئة مجسَّمًا عند محاولةpopBackStack
باستخدام واجهات برمجة التطبيقات الآمنة من حيث النوع. (Ief161، b/358095343)
إصلاح الأخطاء
- تتطلّب عملية التنقّل الآن أن يحتوي المسار الذي تم تمريره إلى
NavGraph
فيstartDestination
على قيم جميع الوسيطات المطلوبة، بما في ذلك الوسيطات غير القابلة للتصغير والتي ليس لها قيمة تلقائية. (I18e74، b/362594265) - أتاحت ميزة "الوسيطات الآمنة" في Navigation إمكانية استخدام السلاسل غير القابلة للتصغير، بحيث يتم تحليل القيم "null" وتخزينها في الحزمة كما هي، وهذا يختلف عن السلوك الحالي الذي يتم فيه تحليل القيم "null" إلى عنصر فارغ. لا ينطبق هذا التغيير إلا على أنواع السلاسل غير القابلة للقيم الفارغة. تبقى السلاسل القابلة للقيم الخالية بدون تغيير. (I08b4a، b/348936238)
- لم يعُد من الممكن إنشاء رابط لصفحة في
NavDestination
إلا من خلال رابط لصفحة في التطبيق تمت إضافته بشكل صريح إلى الوجهة. يعني هذا أيضًا أنّه يمكنك الانتقال إلى مسار وجهة باستخدام وظيفة التحميل الزائد لوظيفة التنقّل التي تتضمّن مسار سلسلة فقط. يحلّ هذا التحديث ثغرة أمنية أتاحت إنشاء روابط لصفحات في التطبيق قد تكون محمية. (Ie30e6)
تحديث التبعية
- تعتمد أداة Navigation Safe Args الآن على الإصدار 1.9.24 من Kotlin بدلاً من الإصدار 2.X من Kotlin، ما يضمن عدم اضطرار المطوّرين إلى إجراء التحديث. (a4129a)
- تعتمد مكتبة Navigation Compose الآن على Compose
1.7.2
.
الإصدار 2.8.0
4 سبتمبر 2024
تم طرح androidx.navigation:navigation-*:2.8.0
. يحتوي الإصدار 2.8.0 على عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 2.7.0
Navigation Kotlin DSL Type-Safety
- توفّر ميزة "التنقّل" الآن أمان الأنواع للغة Kotlin DSL (التي تستخدمها مكتبة Navigation Compose) باستخدام مكتبة Kotlin Serialization للسماح لك بتحديد الوجهات في الرسم البياني للتنقّل من خلال كائنات آمنة الأنواع وفئات البيانات:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
يمكنك الاطّلاع على منشور المدونة حول ميزة "أمان الأنواع" في Navigation Compose للحصول على مزيد من المعلومات.
Navigation Compose Predictive Back
- تتيح مكتبة Navigation Compose الآن استخدام ميزة "الرجوع التوقّعي داخل التطبيق" من خلال واجهات برمجة التطبيقات الجديدة
SeekableTransitionState
من compose-animation. يتيح لك ذلك استخدام إيماءة الرجوع للاطّلاع على الوجهة السابقة مع الانتقال المخصّص قبل اتّخاذ قرار بإكمال المعاملة من خلال الإيماءة المكتملة أو إلغائها.
Navigation Fragment Composable
- تمت إضافة عنصر
navigation-fragment-compose
جديد يتضمّن بديلاًComposableNavHostFragment
للعنصرNavHostFragment
يتيح لك إضافة وجهات قابلة للإنشاء إلى ملفات Navigation XML. يجب التعبير عن كل وجهةcomposable
كطريقة@Composable
ذات مستوى أعلى وبدون وسيطة، ويتم استخدام الاسم المؤهّل بالكامل كسمةandroid:name
في كل وجهة. عند الانتقال إلى إحدى هذه الوجهات، يتم إنشاء جزء حاوٍ لعرض المحتوى القابل للإنشاء.
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
التغييرات الأخرى
- تعتمد مكتبة Navigation Compose الآن على الإصدار 1.7.0 من Compose.
- توفّر ميزة "التنقّل" الآن فئة
CollectionNavType<T>
جديدة، وهي فئة فرعية منNavType<T>
للوسيطات المستندة إلى المجموعات، مثل القوائم والصفائف والخرائط. تتضمّن جميع مصفوفاتNavType
التلقائية (IntArrayType
وLongArrayType
وFloatArrayType
وBoolArrayType
وStringArrayType
) الآن هذه الفئة الجديدة. - يتوافق
NavType
الآن مع قوائم الأعداد الصحيحة والسلاسل والقيم المنطقية والأعداد العشرية والأعداد الطويلة.
الإصدار 2.8.0-rc01
21 أغسطس 2024
تم طرح androidx.navigation:navigation-*:2.8.0-rc01
. يحتوي الإصدار 2.8.0-rc01 على عمليات الدمج هذه.
إصلاح الأخطاء
- إصلاح عُطل التنقّل عند تمرير فئات تعداد المستوى الأعلى كمعلَمات آمنة الأنواع (I0ba76، b/358137294)
- تعمل حزمة Navigation 2.8 الآن بشكل صحيح مع الإصدار 34 من حزمة تطوير البرامج (SDK)، ولن يتم التبديل إلى الإصدار 35 إلا عند طرح الإصدار 2.9 مع بقية مكتبات AndroidX. (b/358798728)
الإصدار 2.8.0-beta07
7 أغسطس 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta07
. يحتوي الإصدار 2.8.0-beta07 على عمليات الدمج هذه.
المشاكل المعروفة
- بسبب b/358137294، لا تتوفّر تلقائيًا سوى التعدادات المتداخلة في فئة أخرى. ستتوفّر أنواع Enums من المستوى الأعلى في الإصدار التالي.
إصلاح الأخطاء
- عند التنقّل إلى وجهات مكرّرة أو مشترَكة، ستعطي ميزة التنقّل الأولوية للوصول إلى أقرب وجهة مطابقة من الموقع الجغرافي الحالي في الرسم البياني. (Ic89a4، b/352006850)
- تمت إضافة
NavType.EnumType
جديدة إلى التنقّل في safe args. يعني هذا أنّ أنواعEnum
لم تعُد تتطلّبNavType
مخصّصة. يُرجى العِلم أنّEnum
SerialName
يجب أن يكون الاسم المؤهَّل بالكامل التلقائي. (I66d22، b/346475493) - أضافت ميزة "الوسيطات الآمنة" إمكانية استخدام أنواع الوسيطات القابلة للتصغير، بما في ذلك
Int?
وLong?
وFloat?
وBoolean?
وEnum<*>?
. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - سيستخدم
startDestination
الخاص بـNavGraph
الآن قيم وسيطات تلقائية إذا كان مسارstartDestination
الذي تم تمريره إلىNavGraph
يساويstartDestination.route
تمامًا. (I13762، b/354046047)
الإصدار 2.8.0-beta06
24 يوليو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta06
. يحتوي الإصدار 2.8.0-beta06 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم تحقّق عمليات فحص
WrongStartDestinationType
lint من كائنات Companion في نوع الفئة التي تم تمريرها، ما أدّى إلى عدم رصد lint للخطأ. (I92b09)
الإصدار 2.8.0-beta05
10 يوليو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta05
. يحتوي الإصدار 2.8.0-beta05 على عمليات الدمج هذه.
إصلاح الأخطاء
- إصلاح عُطل التنقّل
singleTop
عند مشاركةNavGraphs
المتداخلة للمسارstartDestination
نفسه (I17b94، b/294408596)
الإصدار 2.8.0-beta04
26 يونيو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta04
. يحتوي الإصدار 2.8.0-beta04 على عمليات الدمج هذه.
إصلاح الأخطاء
- تتيح Navigation الآن التنقّل باستخدام سلاسل فارغة في وسيطات المسار. (Ic5dbd، b/339481310)
- تحسين رسالة الخطأ الخاصة بأدوات التسلسل المخصّصة التي يتم تعريفها مباشرةً في حقول الفئات من خلال
@Serializable(with =...)
لتوضيح أنّ هذه الميزة غير متاحة حاليًا. (I052b0، b/341319151) - يمكن الآن استخدام واجهة برمجة التطبيقات
SavedStateHandleFactory
الاختبارية في الاختبارات غير المتعلّقة بنظام Android، ولكن سيتطلّب ذلك أن يتيح Robolectric تحليل الوسيطات باستخدام حِزم. (I76cdc، b/340966212) - تم إصلاح عُطل ناتج عن استعادة الحالة عند استئناف التطبيق بعد إيقاف العملية باستخدام Type-Safe Navigation في Compose. (Ia8f38، b/341801005)
- تم إصلاح مشكلة في Navigation Compose حيث لا تعود
NavBackStackEntry
التي يعود إليها المستخدم إلىRESUMED
Lifecycle State بعد إلغاء الإيماءة التوقعية للرجوع. يضمن ذلك أيضًا أن يتم تحريك وجهة العودة بشكل صحيح بدلاً من الانتقال إلى مكانها بعد التمرير السريع. (I97a0c، b/346608857) - عند استخدام "الرجوع التوقّعي" مع Navigation Compose، ستتضمّن الوجهة التي يتم إغلاقها الآن ترتيبًا مناسبًا على المحور z، وسيتم تحريكها بشكل صحيح فوق الوجهة الواردة. (I2077b، b/345993681)
الإصدار 2.8.0-beta03
12 يونيو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta03
. يحتوي الإصدار 2.8.0-beta03 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- يحتوي
CollectionNavType
على طريقة مجرّدة جديدةemptyCollection()
. يمكنك تجاهل هذا الإجراء للتعامل مع مجموعة فارغة تم تمريرها كوسيطة. (Ie4d84، b/341723133)
إصلاح الأخطاء
- تمت إضافة مستندات حول
NavType.serializeAsValue
وserializeAsValues
لتوضيح أنّه يجب ترميز المخرجات النهائية باستخدام Uri. (Ida6bd، b/344943214) - تم إصلاح عُطل يحدث عند استدعاء
toRoute<T>
باستخدام وسيطةCollectionNavType
فارغة. عند التنقّل باستخدام قيمة فارغةCollectionNavType
، ستكون وسيطة الإخراج هي القيمة التلقائية المُعلَن عنها في فئة Serializable، أو قيمة الإرجاعemptyCollection()
إذا لم تكن هناك قيمة تلقائية. (I84158 وId630f وb/342672856)
الإصدار 2.8.0-beta02
29 مايو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta02
. يحتوي الإصدار 2.8.0-beta02 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح عُطل
ClassCastException
عند استخدامNavBackStackEntry.toRoute
معNavType
مخصّص يقبل القيم الخالية. (I1c29b، b/342239473) - تم إصلاح المشاكل المتعلّقة باستعادة حالة سجلّ التصفّح الخلفي في "التنقّل" والتي تحدث عند محاولة استعادة إدخال سجلّ تصفّح خلفي لا يمكن الوصول إليه من خلال المعرّف من الوجهة الحالية. بما أنّ المسارات تستند إلى أرقام تعريف، تأثّرت أيضًا الوجهات التي تم إنشاؤها باستخدام المسارات. يحلّ هذا الإصدار أيضًا مشكلة تعذُّر التشغيل الناتجة عن استدعاء
clearBackStack()
التي كانت تتضمّن المشكلة الأساسية نفسها. (I423c3، b/339908057)
الإصدار 2.8.0-beta01
14 مايو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-beta01
. يحتوي الإصدار 2.8.0-beta01 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تتلقّى الدالة
SavedStateHandle.toRoute()
الآن المَعلمةtypeMap
لأنواع الوسيطات المخصّصة. (Ie39fb، b/339026523) - تمت إضافة واجهة برمجة تطبيقات تجريبية إلى
navigation-testing
لإنشاءSavedStateHandle
من كائن Kotlin Serializable. (Id4867، b/339080702)
إصلاح الأخطاء
- تمت إضافة مستندات مَعلمات مفقودة لدوال Navigation Kotlin DSL. (I26a36)
الإصدار 2.8.0-alpha08
1 مايو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha08
. يحتوي الإصدار 2.8.0-alpha08 على عمليات الدمج هذه.
Safe Args في Navigation Compose
- اكتملت عملية توفير ميزة أمان الأنواع في وقت الترجمة لكل من Navigation Compose ومستخدمي Navigation Kotlin DSL استنادًا إلى Kotlin Serialization، وأصبحت واجهات برمجة التطبيقات التجريبية السابقة ثابتة الآن. (Iea94d، I0eb0d، I873b7، I3a64b، I6c3a2، I11f0b، Ic3032، I8d394، I95710، Ice060، Id0e55، I45f8b، Idcdaf، If5380، I08b23، Ia5c59، b/188693139)
تستخدِم هذه الوظيفة Kotlin Serialization لتتيح لك تحديد وجهات في الرسم البياني للتنقّل من خلال كائنات وفئات بيانات آمنة الأنواع:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
يمكنك الاطّلاع على منشور المدونة حول ميزة "أمان الأنواع" في Navigation Compose للحصول على مزيد من المعلومات.
الميزات الجديدة
- يوفّر العنصر
navigation-fragment-compose
الآنLocalFragment
محليًا للتركيب لطُرق قابلة للإنشاء داخلComposableFragment
. (If35e5) - يتوافق
NavType
الآن مع قوائم الأعداد الصحيحة والسلاسل والقيم المنطقية والأعداد العشرية والأعداد الطويلة. (I4b6dd، Ia914c، b/188693139)
الإصدار 2.8.0-alpha07
17 أبريل 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha07
. يحتوي الإصدار 2.8.0-alpha07 على عمليات الدمج هذه.
الميزات الجديدة
تضيف هذه السمة عنصر
navigation-fragment-compose
جديدًا يتضمّن بديلاًComposableNavHostFragment
للعنصرNavHostFragment
يتيح لك إضافة وجهاتcomposable
إلى ملفات XML الخاصة بالتنقّل. يجب التعبير عن كل وجهةcomposable
كطريقة@Composable
ذات مستوى أعلى وبدون وسيطة، ويتم استخدام الاسم المؤهّل بالكامل كسمةandroid:name
في كل وجهة. عند الانتقال إلى إحدى هذه الوجهات، يتم إنشاء جزء حاوٍ لعرض المحتوى القابل للإنشاء. (I0ef2e، b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }
// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
تغييرات واجهة برمجة التطبيقات
- تمت مواصلة إتاحة Safe Args في Navigation Compose باستخدام أسلوب يستند إلى Kotlin Serialization. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه، ويتم وضع التعليق التوضيحي
ExperimentalSafeArgsApi
عليها. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
الإصدار 2.8.0-alpha06
3 أبريل 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha06
. يحتوي الإصدار 2.8.0-alpha06 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- بدأنا في توفير إمكانية استخدام Safe Args في Navigation Compose باتّباع نهج يستند إلى Kotlin Serialization. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه، ويتم وضع التعليق التوضيحي
ExperimentalSafeArgsApi
عليها. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي. (I644e7 وI98896 وI2a1c5 وI43a51 وI836a1 وIc5eec وI39407 وI24e41 وIf9e14 وIbb13e وIf44d3 وIcb70f وI8972f وI1d432 وIcf32b وI20a14 وI262aa وI7de99 وI35990 وI1033d وb/188693139)
إصلاح الأخطاء
- تستخدم
NavHost
الآنAlignment.TopStart
كقيمة تلقائية لوسيط contentAlignment. يؤدي ذلك إلى توافقه مع الإعداد التلقائي لـAnimatedContent
ويحلّ بعض حالات الانتقال غير المتوقّع من المنتصف. (I09e72، b/330111602) - عند تنفيذ إيماءة "الرجوع التوقّعي" أثناء استخدام Navigation Compose، سيكمل الرمز
NavHost
الآن الانتقال المخصّص بشكلٍ صحيح بدلاً من الانتهاء منه على الفور. (I99017، b/327292110)
الإصدار 2.8.0-alpha05
20 مارس 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha05
. يحتوي الإصدار 2.8.0-alpha05 على عمليات الدمج هذه.
الميزات الجديدة
- يمكنك الآن تمرير وسيطات إلى
startDestination
فيNavGraph
مباشرةً في مسارstartDestination
بدون الاعتماد علىdefaultValue
. وينطبق ذلك أيضًا علىNavGraph
startDestinations
المدمَجة. (I0e0b5، b/109505019، b/188693139)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة فئة مجرّدة جديدة
CollectionNavType<T>
، وهي فئة فرعية منNavType<T>
للوسيطات المستندة إلى المجموعات، مثل القوائم والصفائف والخرائط. (Ic6d63، b/188693139) - أصبحت جميع مصفوفات
NavType
التلقائية (IntArrayType
وLongArrayType
وFloatArrayType
وBoolArrayType
وStringArrayType
) الآن من النوعCollectionNavType
(Idcf79 وb/188693139) - توفّر
NavType
الآن واجهة برمجة تطبيقات مفتوحة جديدةvalueEquals
تحدّد ما إذا كانت قيمتان من النوع نفسه متساويتين. (I6cb97، b/327229511)
إصلاح الأخطاء
- تسمح مَعلمات طلب البحث في الروابط لصفحات في التطبيق الآن بقيم في شكل أقواس معقوفة حول اسم الوسيط (أي
{argName}
) كقيم صالحة لـNavTypes
المستند إلى السلسلة. يحلّ هذا الإجراء مشكلة كانت تؤدي إلى اعتبار هذه القيمة غير صالحة (أو عدم توفّر قيمة) لجميع الأنواع. (I18302، b/327274038) - يمكن الآن لدوال
NavController
التي تتوافق مع المسارات، مثلnavigate
أوpopBackStack
، مطابقة المسارات التي تم ملؤها بوسيطات من النوع ArrayNavTypes
بشكل صحيح. (Iea805، b/327229511)
الإصدار 2.8.0-alpha04
6 مارس 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha04
. يحتوي الإصدار 2.8.0-alpha04 على عمليات الدمج هذه.
الميزات الجديدة
- يمكنك الآن تحديد
SizeTranform
لعمليات الانتقال في Navigation Compose من خلال تعريفها كجزء من عملية الإعداد للدالتَينcomposable
و/أوnavigation
. (I91062، b/296912651)
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبب في عدم عرض
NavHost
في Compose Navigation للانتقال بشكل صحيح عند استخدام "الرجوع إلى الخلف" في النظام بدون إيماءة. (Iceeae، b/325998468)
الإصدار 2.8.0-alpha03
21 فبراير 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha03
. يحتوي الإصدار 2.8.0-alpha03 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تم الآن وضع علامة
@MainThread
علىNavBackStackEntry.savedStateHandle
لأنّه يستخدم رمزًا يجب أن يكون على سلسلة التعليمات البرمجية الرئيسية على أي حال. (Ibb988، b/299523245)
إصلاح الأخطاء
- تم إصلاح مشكلة في Navigation تسبّبت في
NavGraph
تحميل ViewModelsDESTROYED
مبكرًا جدًا لأنّViewModel
الخاص بالإدخال المرتبط لم يكن جزءًا من الحالة المحفوظة. (Ib6bb7، b/317581849)
تحديث التبعية
- تعتمد مكتبة Navigation Compose الآن على الإصدار 1.7.0-alpha03 من Compose.
الإصدار 2.8.0-alpha02
7 فبراير 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha02
. يحتوي الإصدار 2.8.0-alpha02 على عمليات الإيداع هذه.
الميزات الجديدة
- تتيح مكتبة Navigation Compose الآن استخدام ميزة "الرجوع التوقّعي داخل التطبيق" من خلال واجهات برمجة التطبيقات الجديدة
SeekableTransitionState
من compose-animation. يتيح لك ذلك استخدام إيماءة الرجوع للاطّلاع على الوجهة السابقة مع الانتقال المخصّص قبل اتّخاذ قرار بإكمال المعاملة من خلال الإيماءة المكتملة أو إلغائها. (I8b8e9)
الإصدار 2.8.0-alpha01
24 يناير 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha01
. يحتوي الإصدار 2.8.0-alpha01 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح تسريب
BackStackState
حيث يؤدي إجراء طلباتsaveState
متعددة على وجهة إلى حفظ حالات متعددة، ولكن يمكن استعادة الحالة الأولى فقط. (I598b0، b/309559751) - تم إصلاح مشكلة عدم عرض وسيطات غير السلسلة بشكل صحيح عند استخدام أدوات المساعدة
NavigationUI
لملء عنوان أشرطة التطبيقات. (#636، b/316676794)
تحديث التبعية
- تعتمد Navigation Compose الآن على Compose
1.7.0-alpha01
في حلّ مشكلة قد تتسبّب في حركة تحجيم غير متوقّعة. (b/297258205)
المساهمة الخارجية
- شكرًا SimonMarquis على إصلاح مشكلة العرض المتعلّقة بالوسيطات غير النصية عند استخدام أدوات المساعدة
NavigationUI
لتعبئة عنوان أشرطة التطبيقات.
الإصدار 2.7.7
الإصدار 2.7.7
7 فبراير 2024
تم طرح androidx.navigation:navigation-*:2.7.7
. يتضمّن الإصدار 2.7.7 عمليات الدمج هذه.
إصلاح الأخطاء
- تم نقل الإصلاح من Navigation
2.8.0-alpha01
: تم إصلاح تسريبBackStackState
حيث كانت طلباتsaveState()
المتعددة علىNavBackStackEntry
واحدة تؤدي إلى حفظ حالات متعددة، ولكن لا يمكن استعادة الحالة الأولى المحفوظة فقط. (I598b0، b/309559751) - تم نقل الإصلاح من Navigation
2.8.0-alpha01
: تم إصلاح المشكلة المتمثّلة في عدم عرض الوسيطات غير النصية بشكلٍ صحيح عند استخدام أدوات المساعدةNavigationUI
لملء عنوان أشرطة التطبيقات. (#636، b/316676794)
المساهمة الخارجية
- شكرًا SimonMarquis على إصلاح مشكلة العرض المتعلّقة بالوسيطات غير النصية عند استخدام أدوات المساعدة
NavigationUI
لتعبئة عنوان أشرطة التطبيقات.
الإصدار 2.7.6
الإصدار 2.7.6
13 كانون الأول (ديسمبر) 2023
تم طرح androidx.navigation:navigation-*:2.7.6
. يتضمّن الإصدار 2.7.6 عمليات الإيداع التالية.
إصلاح الأخطاء
- تأخذ الدالة
NavGraph
equals()
الآن في الاعتبار عُقد الرسم البياني الآخر بشكل صحيح بدلاً من الرسم البياني الذي تم استدعاؤها منه فقط. سيضمن ذلك عدم اعتبار الرسومات البيانية التي تحتوي على عُقد بأرقام تعريف مختلفة متساوية (I401cb، b/311414915)
الإصدار 2.7.5
الإصدار 2.7.5
1 نوفمبر 2023
تم طرح androidx.navigation:navigation-*:2.7.5
. يتضمّن الإصدار 2.7.5 عمليات الإيداع هذه.
تحسينات على الأداء
- تم تحسين أداء مقارنة رسمَين بيانيَين بشكل كبير (من حيث الوقت وعدد عمليات التخصيص). وهذا يعني أنّ عمليات الاستدعاء، مثل
setGraph
التي تقارن داخليًا الرسم البياني الجديد بالرسم البياني الحالي، تكون أسرع بكثير وتؤدي إلى تقليل عدد اللقطات التي تم تخطّيها. نشكر Michał Z على التحليل الشامل الذي أدّى إلى هذا التحسين. (I6ad62) - ستعرض
NavHost
الآن وجهة البدء في عملية الإنشاء الأولى بدلاً من الانتظار حتى العملية الثانية لقراءة الحالة المعدَّلة. (I439a7، b/304852206)
إصلاح الأخطاء
- تم إصلاح مشكلة يتم فيها إزالة سجلّ التصفّح الخلفي إذا تم استدعاء
setGraph
أكثر من مرة باستخدام الرسم البياني نفسه بالضبط، وذلك فقط إذا كان هناك وجهة في الرسم البياني تحتوي على إجراء يربط بين وجهتَين. (Ieaed7) - لن يتم بعد الآن إدراج مربّعات الحوار التي تم الانتقال إليها وإغلاقها بسرعة في قائمة
NavController.visibleEntries
. (I67586، b/287969970) - عندما يتم إزالة إدخال ثم إجراء تغيير في الإعدادات، سيتم الآن محو
ViewModel
الإدخال بشكل صحيح إذا كانت قيمةsaveState
هي false. (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)
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تؤدي إلى تعطُّل
FragmentNavigator
عند مقاطعة عملية تنقّل بأخرى باستخدامpopUpTo
. (I3c848، b/301887045) - تم إصلاح المشكلة التي كانت تؤدي إلى عدم تعديل
currentDestination
بشكلٍ صحيح ليتطابق مع Fragment المعروض عند الضغط على زر الرجوع في النظام. (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 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة في Navigation with Fragments تسبّبت في احتواء القائمة
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
في Navigation Compose التي كانت تؤدي إلى عدم استعادة حالةrememberSaveable
للوجهات وأي مثيلاتSavedStateHandle
مملوكةViewModel
بشكل صحيح بعد إيقاف العملية وإعادة إنشائها. (b/298059596، b/289436035) - تم إصلاح مشكلة عند عرض مربّعات حوار متعدّدة في Navigation Compose في الوقت نفسه، حيث تكون مربّعات الحوار المخفية جزئيًا (مثل مربّع الحوار غير العلوي) في حالة دورة الحياة
CREATED
بدلاً من الحالةSTARTED
. (aosp/2728520، b/289257213) - تم إصلاح مشكلة عند عرض مربّعات حوار متعدّدة في Navigation Compose في الوقت نفسه، حيث كان إغلاق مربّع الحوار العلوي يؤدي إلى تعذُّر الانتقال إلى مربّع الحوار العلوي الجديد إلى حالة دورة الحياة
RESUMED
، بل كان يبقى في حالةSTARTED
. (aosp/2629401، b/286371387) - لم يعُد المكوّن Navigation Safe Args ينشئ مثيلاً لمهمته على الفور إذا لم يتم تنفيذها فعليًا. (I0e385، b/260322841)
تحديث التبعية
- تعتمد مكتبة Navigation Compose الآن على الإصدار 1.5.1 من Compose.
الإصدار 2.7.1
الإصدار 2.7.1
23 أغسطس 2023
تم طرح androidx.navigation:navigation-*:2.7.1
. يحتوي الإصدار 2.7.1 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح المشاكل في Navigation with Compose حيث كان من الممكن الحصول على خطأ عند محاولة الوصول إلى
Lifecycle.State.DESTROYED
ViewModel
عند استخدامScaffold
. (I1dc11، b/268422136)
الإصدار 2.7.0
الإصدار 2.7.0
9 أغسطس 2023
تم طرح androidx.navigation:navigation-*:2.7.0
. يتضمّن الإصدار 2.7.0 عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 2.6.0
الصور المتحركة من تطبيق "المرافق الموسيقي"
بعد أن أصبح الإصدار AnimatedContent
ثابتًا، تمكّنا من نقل الرمز من الرسوم المتحركة الخاصة بميزة "التنقّل المصاحب" إلى Navigation Compose نفسه.
وهذا يعني أنّ جميع ميزات ضبط الانتقالات المخصّصة المتوفّرة في AnimatedNavHost
متاحة مباشرةً في NavHost
.
لن يتم إجراء أي تغييرات إضافية على Accompanist Navigation Animation، وسنتوقف نهائيًا عن إتاحتها قريبًا، وسنقدّم إرشادات حول كيفية الرجوع إلى Navigation Compose نفسها، ولكنها ستكون عكس دليل نقل البيانات بدون الحاجة إلى إجراء أي تغييرات أخرى على واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار من Accompanist الأولي (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- تعترض الآن السمة NavHost في Navigation Compose بشكلٍ صحيح طلبات الرجوع إلى الخلف في النظام حتى بعد أن يتم إيقاف النشاط مؤقتًا ثم استئنافه. (Icb6de، b/279118447)
تحديثات التبعيات
- أصبحت عملية التنقّل تعتمد الآن على
1.5.0
في Compose بدلاً من1.1.0
.
الإصدار 2.7.0-rc01
26 يوليو 2023
تم طرح androidx.navigation:navigation-*:2.7.0-rc01
. يحتوي الإصدار 2.7.0-rc01 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تتسبّب في إمكانية بقاء تعبيرات lambda
EnterTransition
وExitTransition
التي تم إنشاؤها كجزء منNavHost
في الذاكرة حتى بعد إزالةNavHost
من التركيب. (I893d0)
المشاكل المعروفة
- هناك مشكلة في الإصدار 2.6.x من Navigation، وهي أنّه عند التنقّل باستخدام popUpTo، من المحتمل حدوث
IllegalArgumentException
. من المحتمل أن يكون من الممكن تجنُّب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على غرار النصيحة المقترَحة هنا. (b/287133013)
الإصدار 2.7.0-beta02
28 يونيو 2023
تم طرح androidx.navigation:navigation-*:2.7.0-beta02
. يحتوي الإصدار 2.7.0-beta02 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تتضمّن Navigation Compose الآن ترتيب z الصحيح لعمليات الانتقال المخصّصة التي تستخدم navigate مع الخيار
popUpTo
.(/Ib1c3a، b/285153947)
الإصدار 2.7.0-beta01
7 يونيو 2023
تم طرح androidx.navigation:navigation-*:2.7.0-beta01
. يحتوي الإصدار 2.7.0-beta01 على عمليات الدمج هذه.
إصلاح الأخطاء
- تعترض
NavHost
في Navigation Compose الآن بشكلٍ صحيح طلبات الرجوع إلى الخلف في النظام حتى بعد أن تمSTOPPED
وRESUMED
Activity
. (Icb6de، b/279118447)
الإصدار 2.7.0-alpha01
24 مايو 2023
تم طرح androidx.navigation:navigation-*:2.7.0-alpha01
. يحتوي الإصدار 2.7.0-alpha01 على عمليات الإيداع هذه.
الصور المتحركة من تطبيق "المرافق الموسيقي"
بعد أن أصبح الإصدار AnimatedContent
ثابتًا، تمكّنا من نقل الرمز من الرسوم المتحركة الخاصة بميزة "التنقّل المصاحب" إلى Navigation Compose نفسه.
وهذا يعني أنّ جميع ميزات ضبط الانتقالات المخصّصة المتوفّرة في AnimatedNavHost
متاحة مباشرةً في NavHost
.
لن يتم إجراء أي تغييرات إضافية على Accompanist Navigation Animation، وسنتوقف نهائيًا عن إتاحتها قريبًا، وسنقدّم إرشادات حول كيفية الرجوع إلى Navigation Compose نفسها، ولكنها ستكون عكس دليل نقل البيانات بدون الحاجة إلى إجراء أي تغييرات أخرى على واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار من Accompanist الأولي (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- من Navigation
2.6.0-rc02
: تم إصلاح مشكلة في Navigation in Fragments حيث يؤدي التنقّل باستخدامpopUpTo
وإزالة جزء من سجلّ الرجوع بدون إعادة إنشاء طريقة العرض إلى توقّف عمل زر الرجوع في النظام. (Ieb8d4، b/281726455)
تحديثات التبعيات
- أصبحت عملية التنقّل تعتمد الآن على
1.5.0-beta01
في Compose.
الإصدار 2.6.0
الإصدار 2.6.0
7 يونيو 2023
تم طرح androidx.navigation:navigation-*:2.6.0
. يتضمّن الإصدار 2.6.0 عمليات الدمج هذه.
تغييرات مهمة على Navigation منذ الإصدار 2.5.0
- إنّ
arguments
الخاص بـNavBackStackEntry
وarguments
الذي تم تمريره إلىOnDestinationChangedListener
هما الآن مجرد نسخة من الوسيطات غير القابلة للتغيير التي تم إنشاؤها عند الانتقال إلى الوجهة. وهذا يعني أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلىarguments
أو مثيلاتOnDestinationChangedListener
الأخرى. - تتيح السمة
NavDeepLink
الآن القيم التلقائية للصفائف، ما يسمح بتوفير مَعلمات طلب بحث متكرّرة سيتم ربطها بنوع صفيف الوسيطة. يتضمّنNavType
الآن أيضًا طريقة تلقائية يمكن إلغاؤها لدمج قيمتَين تم تحليلهما. - يمكن الآن لفئات
NavType
الفرعية المخصّصة إلغاءserializeAsValue
لتسلسل قيمة في سلسلة، ما يتيح تضمين كل من التسلسل وإلغاء التسلسل (عبرparseValue
) بالكامل في فئةNavType
. تتجاوز السمةStringType
الآن هذه الطريقة لاستدعاءUri.encode
علىString
المحدّد.
التغييرات المهمة في Navigation Compose منذ الإصدار 2.5.0
- عند معاينة عنصر قابل للإنشاء باستخدام
NavHost
، سيتم الآن عرضstartDestination
الخاص بـ NavGraph تلقائيًا. - تتيح الآن كل من
NavController.popBackStack(route)
وNavController.getBackStackEntry(route)
وNavController.clearBackStack(route)
استخدام مسارات تتضمّن وسيطات تم ملؤها جزئيًا أو كليًا. يُرجى العِلم أنّه يجب أن تتطابق الوسيطات تمامًا مع وسيطات الإدخال. - ستؤدي محاولة إنشاء
NavDeepLink
فارغ باستخدامnavDeepLink
Kotlin DSL الآن إلى ظهور تحذير من أداة Lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى معرّف الموارد المنتظم (URI) و/أو إجراء و/أو نوع MIME ليكون صالحًا.
التغييرات المهمة في Navigation with Fragments منذ الإصدار 2.5.0
- لم يعُد
NavHostFragment
يعترض زر الرجوع في النظام نفسه. يتيح ذلكFragmentManager
الأساسي التعامل مع الرجوع إلى الخلف في النظام. يتيح ذلك للإصدار Fragment1.7.0-alpha01
والإصدارات الأحدث توفير رسم متحرك لميزة "الرجوع التوقّعي داخل التطبيق" على أجهزة Android U. - عند استخدام Navigation مع الفئات، ستؤدي محاولة تنفيذ
FragmentTransaction
يدويًا لإضافة جزء إلى سجلّ الرجوع فيFragmentManager
إلى ظهورIllegalArgumentException
. يجب دائمًا إضافة الأجزاء عبر واجهة برمجة التطبيقاتnavigate()
. - عند استخدام السلسلة المطابقة
${applicationId}
كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط ضمن ملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بقيمةpackageName
للسياق عند التضخّم. - تستخدم
FragmentNavigator
الآن واجهات برمجة تطبيقات الانتقال عند التنقّل وفتحNavBackStackEntries
. هذا يعني أنّNavBackStackEntry
Lifecycle
سينتظر الآن حتى تكتمل المؤثرات الخاصة لعملية الدخول والخروج من الجزء قبل نقلLifecycle.State
النهائي. - تستخدم
DialogFragmentNavigator
الآن واجهات برمجة تطبيقات الانتقال عند التنقّل وفتحNavBackStackEntries
. وهذا يعني أنّNavBackStackEntry
Lifecycle
سينتظر الآنDialogFragment
Lifecycle
للانتقال إلىDESTROYED
قبل الانتقال إلىDESTROYED
نفسه. - تتيح لك
NavHostFragment
الآن استردادNavController
فور ربطNavHostFragment
بـFragmentManager
، بدلاً من استرداده بعدonCreate()
فقط. - يعتمد توفّر ميزة التنقّل في "وحدات الميزات الديناميكية" الآن على مكتبة "عرض الميزات في Play" الدقيقة.
- تعتمد ميزة Safe Args في Navigation الآن على الإصدار 7.3.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". وهذا يعني أنّه متوافق الآن مع الإصدارات 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 على عمليات الإيداع التالية.
إصلاح الأخطاء
- تم إصلاح مشكلة في Navigation مع الأجزاء حيث كان يؤدي إزالة جزء من خلال navigate باستخدام
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)
إصلاح الأخطاء
- عند استخدام Navigation مع الفئات، ستؤدي محاولة تنفيذ
FragmentTransaction
يدويًا لإضافة جزء إلى سجلّ الرجوع فيFragmentManager
إلى ظهورIllegalArgumentException
. يجب دائمًا إضافة الأجزاء عبر واجهة برمجة التطبيقاتnavigate()
. (I6d38e) - عندما يكون هناك
navigate
يضيف إدخالاً وpopBackStack
يزيله في الإطار نفسه، سيتم الآن عرض الإدخال الأعلى الناتج في الخلفية بشكل متسق فيRESUMED
Lifecycle.State
. (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
بدون حفظ الحالة في Navigation Compose. يحلّ هذا أيضًا خطأً يحدث عند الانتقال إلى الوجهات المرتبطة بالرسم البياني الأساسي، ما يؤدي إلى إنشاء حزمة خلفية غير صحيحة. (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) - لن تؤدي إضافة أجزاء إلى
FragmentNavigator
بدون استخدام التنقّل إلى حدوث عُطل.FragmentManager
(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
إلى الحالة RESUMED عند استخدام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)
تغييرات واجهة برمجة التطبيقات
- تمت الآن إضافة التعليق التوضيحي
@MainThread
إلى جميع عمليات التحميل الزائدNavController
navigate
لضمان استدعائها في سلسلة التعليمات البرمجية الرئيسية. (I2c0b0، b/263427111)
إصلاح الأخطاء
- تم إصلاح عُطل عند محاولة التنقّل أثناء استخدام ميزة "التنقّل الديناميكي بين الأجزاء". (I3ee29، b/268360479)
- تم إصلاح الخطأ الذي كان يؤدي إلى عدم تعديل الشريط السفلي إلى العنصر المحدّد الصحيح عند الانتقال إلى جزء آخر باستخدام زر الرجوع في النظام (If559f، b/269044426)
المشاكل المعروفة
- عند استخدام Navigation مع Fragments، يتعذّر على دورة حياة
NavBackStackEntry
الوصول إلىRESUMED
عند استخدام واجهات برمجة التطبيقاتAnimation
. (b/269646882) - عند استخدام Navigation with Fragments والتنقّل باستخدام
BottomNavigation
، إذا حاولت استعادة سجلّ الرجوع الذي يتضمّن عدّة إدخالات، لن يتم تعديلBottomMenuItem
بشكل صحيح. (b/270447657) - عند استخدام Navigation مع Fragments، بعد استعادة الحالة، لا يتم استدعاء
DESTROYED
فيNavBackStackEntry
Lifecycle
عندما يكون الجزء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
. هذا يعني أنّNavBackStackEntry
Lifecycle
سينتظر الآن حتى تكتمل المؤثرات الخاصة لعملية الدخول والخروج من الجزء قبل نقلLifecycle.State
النهائي. (I3cb19، b/238686802) - تستخدم
DialogFragmentNavigator
الآن واجهات برمجة تطبيقات الانتقال عند التنقّل وفتحNavBackStackEntries
. وهذا يعني أنّNavBackStackEntry
Lifecycle
سينتظر الآن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)
إصلاح الأخطاء
- لن يتم تنفيذ أي عملية في حالة Navigator عند استخدام واجهات برمجة التطبيقات
push/popWithTransition
وكان يتم التعامل مع الإدخال بالفعل. (Iadbfa، b/261213893) - عند استخدام
launchSingleTop
معNavGraph
متداخلة، لن تتم إضافة جميع الوجهات بدءًا من الوجهة الأصلية إلىstartDestination
بشكل صحيح إلا إلى أعلى حزمة الخلف. (Id4bea، b/253256629) - سيؤدي التنقّل الآن إلى استبدال مثيل
DialogFragment
بشكل صحيح عند التنقّل إلى الوجهة نفسها مع ضبط العلامةlaunchSingleTop
على "صحيح". (I45b5a، b/149572817) - لن تتسبّب Navigation SafeArgs بعد الآن في حدوث خطأ في التجميع عند استخدام وسيطات تتألف من 19 حرفًا بالضبط. (Id60bc وb/257110095)
الإصدار 2.6.0-alpha04
9 نوفمبر 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)
- تعتمد ميزة Safe Args في Navigation الآن على الإصدار 7.3.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". وهذا يعني أنّها أصبحت متوافقة فقط مع الإصدارات 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
: تم إصلاح مشكلة عدم نسيان حالة Compose المحفوظة (مثل استخداماتrememberSaveable
) وإزالتها عند إزالة وجهة من سجلّ الرجوع. (I64949)
تحديثات التبعيات
- يعتمد التنقّل الآن على Fragment
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
من Fragment. (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 الآن إلى ظهور تحذير من أداة Lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى معرّف الموارد المنتظم (URI) و/أو إجراء و/أو نوع MIME ليكون صالحًا. (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) - من Navigation
2.5.2
: سيؤدي التنقّل الآن إلى استبدال مثيل Fragment بشكلٍ سليم عند التنقّل إلى الوجهة نفسها وضبط العلامةlaunchSingleTop
على "صحيح". (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) - تم إصلاح المشكلة المتمثّلة في عدم نسيان حالة Compose المحفوظة (مثل استخدامات
rememberSaveable
) وإزالتها عند إزالة وجهة من سجلّ الرجوع. (I64949)
الإصدار 2.5.2
7 أيلول (سبتمبر) 2022
تم طرح androidx.navigation:navigation-*:2.5.2
. يحتوي الإصدار 2.5.2 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تحاول ميزة "التنقّل الديناميكي" الآن تثبيت وجهات الأنشطة من الوحدات الأخرى بشكل صحيح قبل الانتقال إليها. (Ia2c16، b/240292838)
- سيؤدي التنقّل الآن إلى استبدال مثيل Fragment بشكل صحيح عند التنقّل إلى الوجهة نفسها وضبط العلامة
launchSingleTop
على "صحيح". (I5a2f1، b/237374580) - تم إصلاح الخطأ
IllegalStateException
الناتج عن الانتقال إلى رسم بياني متداخل مرتين يتشارك عنصرًا رئيسيًا مع وجهة بدء جديدة تم فتحها. (I9f7cb، b/243778589)
تحديث التبعية
- أصبح التنقّل
2.5.2
يعتمد الآن على Fragment1.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)
تحديثات التبعيات
- تعتمد مكتبة Navigation الآن على Lifecycle
2.5.1
. (Ib4451) - تعتمد مكتبة Navigation الآن على Activity
1.5.1
. (I3efe8) - تعتمد مكتبة Navigation الآن على Fragment
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
في Lifecycle2.5.0
.
Navigation SafeArgs
- تمت ترقية اعتمادية
Navigation Safe Args
علىAndroid Gradle Plugin
للاستناد إلى7.0.4
، ما أدى إلى إيقاف التوافق مع إصدارات "مكوّن Android الإضافي" قبل7.0
. - تمت إضافة إمكانية استخدام سمة build.gradle لمساحة الاسم بدلاً من applicationId.
التغييرات الأخرى
- لم تعُد واجهة برمجة التطبيقات
visibleEntries
تجريبية، وهي توفّر وظيفة لاسترداد جميع الإدخالات التي تكون وجهتها مرئية حاليًا وفقًاNavController
.
الإصدار 2.5.0-rc02
15 يونيو 2022
تم طرح androidx.navigation:navigation-*:2.5.0-rc02
. يحتوي الإصدار 2.5.0-rc02 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح عُطل ناتج عن التبديل السريع بين الوجهات في أسفل الشاشة عند استخدام
NavHost
Navigation Compose. (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 على عمليات الإرسال هذه.
الميزات الجديدة
- تمت إضافة قاعدة تدقيق جديدة للتحذير من وضع عناصر
<deeplink>
داخل عناصر<activity>
في ملفnavigation.xml
.(Ic15a5، b/178403185)
إصلاح الأخطاء
- يتم الآن التخلص من النطاقات القابلة للإنشاء في
NavHost
وDialogHost
بالترتيب المتوقّع، أي يتم التخلص من العناصر القابلة للإنشاء الداخلية قبل العناصر القابلة للإنشاء الخارجية. (I157e6) - تستخدم Navigation SafeArgs الآن
PathSensitivity.RELATIVE
فيArgumentsGenerationTask
للسماح بإمكانية نقل ذاكرة التخزين المؤقت. وهذا يعني أنّه يمكن الآن إعادة استخدام إدخال ذاكرة التخزين المؤقت من إصدار CI إلى إصدار محلي. (I5f67c، b/173420454) - تم تعديل قاعدة التدقيق
UnrememberedGetBackStackEntryDetector
للتأكّد من أنّ طلب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)
تحديثات التبعيات
- يعتمد التنقّل الآن على Lifecycle
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
الآن إلى الحدّ الأقصى لحالة Lifecycle بدلاً من حالة Lifecycle الحالية. وهذا يعني أنّه حتى إذا كانت دورة حياة المضيفnavController
أقل من STARTED، ستظل قائمة الإدخالات المرئية كما هي. (I9e2a8، b/225394514) - يتيح
SavedStateViewFactory
الآن استخدامCreationExtras
حتى إذا تم إعداده باستخدامSavedStateRegistryOwner
. في حال توفير عناصر إضافية، سيتم تجاهل الوسيطات التي تمّت تهيئتها. (I6c43b، b/224844583) - يمكن الآن لـ
NavDeepLink
تحليل عناوين URI التي تتضمّن مَعلمة طلب بحث واحدة بدون قيمة. (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
لإنشاء ViewModels. (I69161، b/217617710) - تتيح Navigation Safe Args الآن استخدام مساحة الاسم المحدّدة في
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
بشكل صحيح عند استخدام viewbinding مع الرسوم البيانية المتداخلة. (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، الذي تم طرحه كجزء من Lifecycle2.5.0-alpha01
. (Ib9fe2، b/207012490)
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تؤدي إلى تعذُّر الوصول إلى
ViewModel
تم إنشاؤه باستخدامby navGraphViewModels()
منonCreate()
في Fragment مع ظهور الخطأIllegalStateException
. (I8a14d) - لن يتم بعد الآن فك ترميز
NavDeepLink
s مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير الوسيطات المناسبة إلى وجهتك النهائية. (I31b0a، b/210711399)
Safe Args
- تعتمد Safe Args الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّ ميزة Safe Args في Navigation لن تكون متوافقة مع إصدارات Android Studio الأقدم من 7.0، ولكنّها ستكون متوافقة مع الإصدار 7.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث. (I41c88 وb/213086135 وb/207670704)
الإصدار 2.4.2
الإصدار 2.4.2
6 أبريل 2022
تم طرح androidx.navigation:navigation-*:2.4.2
. يتضمّن الإصدار 2.4.2 عمليات الدمج هذه.
إصلاح الأخطاء
- تمت إعادة نقل الميزة من Navigation
2.5.0-alpha03
: تتوافقNavDeepLinks
الآن بشكلٍ سليم مع أحرف السطر الجديد المرمّزة والمضمّنة في مسارات/معرّفات الموارد المنتظمة (URI) للروابط لصفحات معيّنة. (I513d1، b/217815060) - تم نقل الميزة من Navigation
2.5.0-alpha03
: تتيح ميزة Navigation SafeArgs الآن استخدام مساحة الاسم المحدّدة فيbuild.gradle
بدلاً من الحزمة في ملف AndroidManifest. (I659ef، b/217414933) - تم نقل هذه الميزة من Navigation
2.5.0-alpha04
: لن يتعطّلNavigation Safe Args
بعد الآن عند استخدام مساحات الأسماء وعدم توفّرAndroidManifest.xml
. (I17ccf، b/227229815) - تم نقل هذه الميزة من Navigation
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
بشكل صحيح عند استخدام viewbinding مع الرسوم البيانية المتداخلة. (Ifbb51، b/214577959) - عند استخدام الروابط لصفحات في التطبيق من خلال عدة
NavGraph
s متداخلة، سيشمل الآن سجلّ الرجوع وجهات البدء الوسيطة بشكل صحيح. (I504c0، b/214383060) - تم نقل الإصلاح من Navigation
2.5.0-alpha01
: تم إصلاح مشكلة تعذُّر الوصول إلى ViewModel تم إنشاؤه باستخدامby navGraphViewModels()
منonCreate()
في Fragment مع ظهور الخطأIllegalStateException
. (I8a14d) - تم نقل التغيير من Navigation
2.5.0-alpha01
: لم يعُد يتم فك ترميز الوسيطات مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير الوسيطات التي تم فك ترميزها بشكل صحيح إلى وجهتك النهائية.NavDeepLink
(I31b0a، b/210711399) - تم نقل هذه الميزة من Navigation
2.5.0-alpha01
: تعتمد Safe Args الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. هذا يعني أنّ ميزة Safe Args في Navigation لن تكون متوافقة مع إصدارات Android Studio الأقدم من 7.0، ولكنّها ستكون متوافقة مع الإصدار 7.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث. (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
- تمت إعادة كتابة جميع عناصر Navigation في Kotlin. وقد أدّى ذلك إلى تحسين إمكانية القيم الخالية في الفئات التي تستخدم الأنواع العامة (مثل الفئات الفرعية
NavType
). تم نقل جميع دوال الإضافة في Kotlin التي كانت جزءًا من عناصر-ktx
إلى عناصرها الرئيسية المعنية. سيستمر نشر عناصر-ktx
، ولكنّها ستكون فارغة تمامًا. - يحتوي العنصر
navigation-fragment
الآن على تنفيذ مُنشأ مسبقًا لتصميم ذي لوحتَين من خلالAbstractListDetailFragment
الجديد. تستخدِم هذه الفئةSlidingPaneLayout
لإدارة لوحة قائمة (توفّرها الفئة الفرعية) ولوحة تفاصيل تستخدِمNavHostFragment
كطريقة تنفيذ، كما هو موضّح في مثال التنفيذ. - تقدّم الطريقة
currentBackStackEntryAsFlow()
فيNavController
Flow
ينبعث كلما تغيّرNavBackStackEntry
الحالي. يمكن استخدام هذا المسار كبديل لإدارةOnDestinationChangedListener
يدويًا. - يتيح NavController الآن إمكانية استرداد قائمة بجميع مثيلات
NavBackStackEntry
المرئية كـStateFlow
من خلال السمة التجريبيةvisibleEntries
. - يمكن الآن توسيع فئة
NavType
لإنشاء أنواع NavType مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقّل آليًا، مثلاً من خلال Navigation Graph Kotlin DSL. توفّر ميزة التنقّل الآن واجهتَي برمجة التطبيقات
findStartDestination()
وgetHierarchy()
اللتين يمكن استخدامهما للمساعدة في تنفيذ NavigationUI مخصّصة. findStartDestination()
هي دالة إضافية فيNavGraph
ستحدّد وجهة البدء الفعلية التي سيتم عرضها عند الانتقال إلى الرسم البياني، حتى إذا كانstartDestination
نفسهNavGraph
متداخل. getHierarchy()
هي دالة فيNavDestination
يمكن استخدامها للتحقّق مما إذا كانت وجهة معيّنة ضِمن التسلسل الهرمي لوجهة أخرى.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل طرق
NavigationUI
التي كانت تستخدمBottomNavigationView
لتستخدم بدلاً من ذلك الفئة الرئيسية التي تم تقديمها في Material1.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
اعتمدت الإصدارات السابقة من Navigation على توفّر معرّف عدد صحيح ثابت لكل وجهة يحدّدها بشكل فريد عن الوجهات المشابهة لها ويسمح لك navigate()
إلى تلك الوجهة إما مباشرةً أو من خلال إجراء. على الرغم من أنّ هذا النظام لا يزال صالحًا ومفيدًا، لا سيما في الحالات التي تحدّد فيها الرسم البياني للتنقّل في XML ويمكنك استخدام ثوابت R.id
التي يتم إنشاؤها تلقائيًا أو Safe Args (الذي يستخدم هذه الثوابت لإنشاء الرمز البرمجي في وقت الإنشاء)، لم يستوعب نظام الأعداد الصحيحة الفريدة المعنى الدلالي والقدرة التعبيرية اللازمَين لدعم الرسوم البيانية الديناميكية بالكامل التي يتم إنشاؤها آليًا في وقت التشغيل من خلال 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
توفّر حزمة navigation-compose
إمكانية الدمج بين مكوّن Navigation وJetpack Compose. تستخدِم هذه السمة دوال @Composable
كوجهات في تطبيقك.
يوفّر هذا الإصدار ما يلي:
NavHost
هي عنصر قابل للإنشاء يتيح لك إنشاء رسم بياني للتنقّل من خلال لغة Kotlin DSL، باستخدام وجهتَيcomposable
وdialog
، بالإضافة إلى إمكانية استخدام أدوات التنقّل الاختيارية، مثل تلك المتوفّرة في Accompanist Navigation Material.- يجب توفير إمكانية الانتقال السلس بين الوجهات. يمكن استخدام Accompanist Navigation Animation للتحكّم في عمليات الانتقال عند الدخول والخروج باستخدام واجهات برمجة تطبيقات Compose التجريبية.
- تحديد نطاق
Lifecycle
لكل وجهة قابلة للإنشاء لا تصل كل وجهة إلى الحالةRESUMED
إلا عند انتهاء أي انتقالات داخلة، وتنتقل على الفور إلى الحالةSTARTED
عند بدء أي انتقالات خارجة، ما يتيح لك تجنُّب جميع مشاكلIllegalStateException
واللمس المتعدد من خلال تفعيل طلبnavigate
فقط عندما تكون قيمةLifecycle
هيRESUMED
. - تحديد نطاق
ViewModel
(من خلال واجهة برمجة التطبيقاتviewModel()
الخاصة بـ Lifecycle ViewModel Compose2.4.0
أوhiltViewModel()
الخاصة بـ Hilt Navigation Compose1.0.0
على مستوى الوجهة، ما يوفّر نطاقًا يظل متاحًا عند إجراء تغييرات في الإعدادات وعندما يكون في سجلّ الرجوع (عند التخلّص من محتوى Composable بطريقة أخرى) وإشارة فيonCleared()
الخاص بـ ViewModel تشير إلى التخلّص الدائم من الحالة المرتبطة بـ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()
}
}
}
راجِع دليل التنقّل في Compose لمزيد من المعلومات.
حِزم خلفية متعددة
يتولّى NavController إدارة سجلّ الرجوع الخاص بالوجهات، وإضافة الوجهات إلى سجلّ الرجوع عند الانتقال navigate()
إليها وإزالتها عند استدعاء popBackStack()
أو تفعيل زر الرجوع في النظام. تم توسيع فئة NavOptions
الحالية وعملية الدمج في عناصر <action>
في ملف XML الخاص بمخطط التنقّل من أجل إتاحة حفظ سجلّ الرجوع واستعادته.
في إطار هذا التغيير، تحفظ الآن طُرق NavigationUI
في onNavDestinationSelected()
وBottomNavigationView.setupWithNavController()
وNavigationView.setupWithNavController()
حالة الوجهات التي تم إرجاعها تلقائيًا وتعيدها، ما يتيح إمكانية استخدام حِزم خلفية متعددة بدون إجراء أي تغييرات على الرمز البرمجي. عند استخدام Navigation مع Fragments، هذه هي الطريقة المقترَحة للتكامل مع حِزم السجلّ الخلفي المتعدّدة.
يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من الأسطح:
في ملف 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()
، ما يضمن عمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف Android 12. - تعتمد عملية التنقّل الآن على
Lifecycle
2.3.1
وتشير الآن إلىsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، وهي الطُرق التي تعدّلNavBackStackEntry
Lifecycle
، على أنّها@MainThread
، ما يؤدي إلى توافق Navigation مع عملية التنفيذ في سلسلة التعليمات الرئيسية التي تم تقديمها في Lifecycle2.3.0
. - تتحقّق الروابط لصفحات في التطبيق الآن من توفّر جميع الوسيطات المطلوبة (التي ليس لها قيم تلقائية) في
Uri
. - تتعامل الوسيطات التي تم تحليلها في
NavDeepLink
الآن مع علامات الجنيه بالطريقة نفسها التي تتعامل بها مع علامات الاستفهام كفاصل بين أجزاء المسار، ما يمنع الوسيطة من الامتداد على علامة الجنيه. - عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن الوسيطات التي لا تتضمّن قيمًا تلقائية قبل تلك التي تتضمّن قيمًا تلقائية كمعلَمات.
- عند إنشاء وسيطات، تضع Safe Args الآن المَعلمات التي لا تتضمّن قيمًا تلقائية قبل تلك التي تتضمّن قيمًا تلقائية.
- تعتمد Safe-Args الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. يعني ذلك أنّه من المفترض ألا يظهر لك التحذير بشأن استخدام
applicationIdTextResource
بعد الآن.
المشاكل المعروفة
- تم إصلاح المشكلة في مكوّن التنقّل
2.5.0-alpha01
: سيؤدي الوصول إلىViewModel
تم إنشاؤه عبرby navGraphViewModels()
منonCreate()
في Fragment إلى حدوث خطأIllegalStateException
. (b/213504272) - تم إصلاح الخطأ في Navigation
2.5.0-alpha01
: لا يتوافق الإصدار 2.4.0 من Safe Args مع الإصدار 7.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث. (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)
إصلاح الأخطاء في Navigation Compose
- تم إصلاح عُطل محتمل ناتج عن التبديل السريع بين وجهة البدء ووجهة أخرى باستخدام عناصر قائمة التنقّل في أسفل الشاشة. (Ic8976، b/208887901)
- تتم الآن استعادة وجهات مربّعات الحوار بشكل صحيح في أعلى الشاشة بعد تغييرات الإعدادات أو إيقاف العملية. (I4c0dc، b/207386169)
- تم إصلاح مشكلة كانت تؤدي إلى تعذُّر استرداد
ViewModel
منNavBackStackEntry
في مربّع حوار عند إغلاق مربّع الحوار. (I6b96d، b/206465487) - تم إصلاح مشكلة عند استخدام وجهات
activity
معNavHost
في Navigation Compose تؤدي إلى إعادة إنشاء لا نهائية. (I8f64c) - تم إصلاح تسريب في Navigation Compose حيث كان يحتفظ بمرجع للنشاط القديم بعد تغيير الإعدادات أو إيقاف العملية. (I4efcb، b/204905432)
إصلاح الأخطاء في Safe Args
- لم يعُد تطبيق
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
البرمجية API على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
مع مسار كبديل لاستخدام معرّف من أجل إتاحة استخدام Navigation Kotlin DSL مع "التقسيمات" بشكل أفضل. (I901e3، b/201446416)
تغييرات واجهة برمجة التطبيقات
- أصبحت واجهة برمجة التطبيقات
visibleEntries
تجريبية الآن. (I93f6f)
إصلاح الأخطاء
- لن يتم إيقاف ViewModels عند مقاطعة عمليات الانتقال من خلال التنقّل ذهابًا وإيابًا بين الشاشات نفسها (Id52d8، b/200817333)
- لم تعُد وسيطات
NavDeepLink
القابلة للقيم الخالية تتطلّب قيمة تلقائية عند إضافة روابط لصفحات معيّنة إلىNavDestination
. (I5aad4، b/201320030) - لم يعُد يتم اعتبار NavBackStackEntries متساوية إذا كانت تتضمّن دورات حياة مختلفة. وهذا يعني أنّ NavHost ستعيد إنشاء جميع الوجهات بشكل صحيح عند التنقّل باستخدام singleTop وعند إعادة اختيار عناصر القائمة السفلية. (I1b351، b/196997433)
- تم إصلاح مشكلة في
AbstractListDetailFragment
تسبّبت في معالجة أو تجاهل السمتَينlayout_width
وlayout_weight
في لوحة القائمة التي تعرضهاonCreateListPaneView()
بشكل غير صحيح. (f5fbf3) - تتزامن الآن حالة العرض لوجهات مربّعات الحوار بشكل صحيح مع حالة
DialogFragmentNavigator
. وهذا يعني أنّ طلبdismiss()
API غير المتزامن يدويًا لعرض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
المعروضة من أجل توفير دعم أفضل لأدوات التنقّل الاختيارية، مثل تلك الواردة من مواد التنقّل المصاحبة. (I4619e)
إصلاح الأخطاء
- لن يتعطّل تطبيق Dynamic Navigation بعد الآن عند إعادة إنشاء النشاط. (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)
التغييرات في السلوك
- عند إنشاء وسيطات، تضع Safe Args الآن المَعلمات التي لا تتضمّن قيمًا تلقائية قبل تلك التي تتضمّن قيمًا تلقائية. (I89709، b/198493585)
إصلاح الأخطاء
- عند استخدام Navigation Compose، لن يتم تجميع NavGraphs إلا بعد أن يتم تجميع جميع العناصر التابعة لها.
DESTROYED
DESTROYED
(I86552، b/198741720) - لم تعُد وسيطات
NavDeepLink
القابلة للقيم الخالية تتطلّب قيمة تلقائية. (Ia14ef، b/198689811) - سيؤدي استدعاء
setGraph()
باستخدام رسم بياني جديد إلى محو أي حِزم سابقة محفوظة، بالإضافة إلى سلوكه السابق المتمثل في إزالة الحزمة السابقة. (I97f96) - تم إصلاح مشكلة عدم تلقّي مثيلات
OnDestinationChangedListener
وcurrentBackStackEntryFlow
إشعارات عند استخدامlaunchSingleTop
. (Iaaebc)
تحديثات التبعيات
- تعتمد Navigation Compose الآن على Activity Compose 1.3.1. (I05829)
- تعتمد مكتبة Navigation Compose الآن على
Lifecycle ViewModel Compose
2.4.0-beta01
. (Ib86a3)
الإصدار 2.4.0-alpha08
1 سبتمبر 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha08
. يحتوي الإصدار 2.4.0-alpha08 على عمليات الدمج هذه.
الميزات الجديدة
- يمكن الآن توسيع فئة
NavType
لإنشاء أنواع NavType مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقّل آليًا، مثلاً من خلال Navigation Graph Kotlin DSL. (I78440، b/196871885)
التغييرات في السلوك
- عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن الوسيطات التي لا تتضمّن قيمًا تلقائية قبل تلك التي تتضمّن قيمًا تلقائية كمعلَمات. (Idb697، b/188855904)
- تتحقّق الروابط لصفحات في التطبيق الآن من توفّر جميع الوسيطات المطلوبة (التي ليس لها قيم تلقائية) في
Uri
. (#204، b/185527157)
إصلاح الأخطاء
- لن يؤدي استخدام
getBackStackEntry
وpreviousBackStackEntry
داخل composable()، بالإضافة إلىremember()
، إلى حدوث استثناء بسبب عدم توفّر وجهة في سجلّ الرجوع. (I75138، b/194313238) - تعيد مكتبة Navigation Compose الآن إنشاء التركيب بشكلٍ صحيح عند تغيير وسيطات حزمة الخلفية واستخدام
launchSingleTop=true
. (Iebd69، b/186392337) - لن يكون هناك
ArrayIndexOutOfBoundsException
عند الاتصال بـsetGraph
باستخدام رسم بياني يتضمّن 13 أو 29 وجهة. (I1a9f1، b/195171984) - من المفترض ألا يتسبّب مولّد SafeArgs Java في ظهور تحذيرات Lint عند إنشاء فئات 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 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تحفظ Navigation Compose الآن الحالة بشكل صحيح بعد إجراء تغييرات في الإعدادات وعند تغيير الرسومات البيانية أثناء استخدام ميزة "حِزم الخلف المتعددة". (If5a3d، b/195141957)
- لن يؤدي إعادة تحديد علامة التبويب نفسها عند استخدام Navigation Compose مع حِزم سابقة متعددة إلى ظهور شاشة فارغة. (I860dc، b/194925622)
- تراقب السمة
NavHost
الآن التغييرات فيLifecycle.State
الخاصة بعناصرNavBackStackEntry
، ما يعني أنّ استخدامNavHost
في جزء سيؤدي الآن إلى إعادة التركيب بشكل صحيح عند حدوث تغييرات في مراحل النشاط بدلاً من عرض شاشة فارغة. (I4eb85، b/195864489) - تم إصلاح مشكلة عدم تعديل حالة
NavController
بشكل صحيح بعد إعادة إنشاء نشاطك (أي بعد تغيير الإعدادات) عند إغلاقDialogFragment
. (Icd72b) - تم إصلاح مشكلة عدم تعديل معالجة زر الرجوع في النظام في NavController عند عرض وجهة حوار، ما قد يؤدي إلى اعتراض NavController لزر الرجوع على الرغم من عدم توفّر أي سجلّ للرجوع. (If3b34)
- تنشئ Safe-args الآن تلقائيًا طريقة
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
في Navigation Compose الآن الرسم البياني كجزء من التركيب الأول. (Ieb7be)
إصلاح الأخطاء
- لم يعُد يؤدي إغلاق آخر وجهة في الرسم البياني للتنقّل إلى ظهور الخطأ
ClassCastException
. (If0543، b/172112072، b/194301889) - تم إصلاح
NullPointerException
كان يحدث عند إضافة رابط لصفحة في التطبيق بدونUri
والانتقال عبر مسار أو رابط لصفحة في التطبيق. (938a0c، b/193805425) - تم إصلاح مشكلة في Navigation Compose حيث لا يصل الرابط لصفحة معيّنة
NavBackStackEntry
إلى الحالةRESUMED
. (I192c5) - تم إصلاح مشكلة عدم تعديل معالجة زر الرجوع في النظام في NavController عند عرض وجهة مربّع حوار، ما قد يؤدي إلى اعتراض NavController لزر الرجوع على الرغم من عدم توفّر أي حزمة احتياطية لعرضها. (aosp/1782668)
الإصدار 2.4.0-alpha05
21 تموز (يوليو) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha05
. يحتوي الإصدار 2.4.0-alpha05 على عمليات الدمج التالية.
التغييرات في السلوك
- تستخدم
NavHost
في Navigation Compose الآن تأثيرات Crossfade دائمًا عند التنقّل بين الوجهات. (I07049، b/172112072) - يمكنك الآن إجراء تغييرات على الرسم البياني لـ NavHost. سيتم اعتبار الرسوم البيانية التي تتضمّن startDestination ووجهات متطابقة في الرسم البياني متساوية، ولن يتم محو سجلّ التصفّح
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
وجهة. سيتم عرض وجهات مربّعات الحوار هذه كلّها ضمن عنصر ComposableDialog
، مع ظهورها فوق وجهة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()
، ما يضمن عمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف Android 12. (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 من "مكوّن Android الإضافي" أو الإصدارات الأحدث. (I69518، b/189966576)
مشكلة معروفة
- ستتعذّر عملية Safe Args مع ظهور الخطأ
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
عند استخدام الإصدار6.7.0
من Gradle بسبب الاعتماد على إصدار قديم من Kotlin. يمكن حلّ هذه المشكلة عن طريق الترقية إلى Gradle 7.0. (b/190739257)
الإصدار 2.4.0-alpha02
2 حزيران (يونيو) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha02
. يحتوي الإصدار 2.4.0-alpha02 على عمليات الإيداع هذه.
الميزات الجديدة
- تتوفّر المسارات الآن لوجهات Activity وFragment وDialog، بالإضافة إلى جميع أنحاء DynamicNavigation Kotlin DSL. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
- أضافت
NavigationUI
مؤقتًا واجهات برمجة تطبيقات تجريبية للسماح بإيقاف حفظ حالتك. على الرغم من أنّ حفظ الحالة دائمًا هو السلوك الصحيح، لا يزال هناك استخدام للمكتبات المتوقّفة نهائيًا (مثل الأجزاء المحفوظة)، والتي لا يمكن توفيرها عند حفظ الحالة، لذا يتيح ذلك للتطبيقات فرصة التحويل تدريجيًا من أي واجهات برمجة تطبيقات غير متوافقة. (Idf93c) توفّر ميزة التنقّل الآن واجهتَي برمجة التطبيقات
findDestination()
وgetHierarchy()
اللتين يمكن استخدامهما للمساعدة في تنفيذ NavigationUI مخصّصة. findDestination()
هي دالة إضافية فيNavGraph
ستحدّد موقع وجهة ضمن الرسم البياني. getHierarchy()
هي دالة فيNavDestination
يمكن استخدامها للتحقّق مما إذا كان وجهة معيّنة تقع ضمن التدرّج الهرمي لوجهة أخرى.(I2932f، b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل طرق NavigationUI التي كانت تستخدم
BottomNavigationView
لتستخدم بدلاً من ذلك الفئة الرئيسية التي تم تقديمها في الإصدار1.4.0
وNavigationBarView
من Material. يتيح ذلك استخدام هذه الطرق معNavigationRailView
. (Ib0b36، b/182938895)عند إنشاء عنصر
<action>
من خلال XML، يمكن أن تستخدم سمات الرسوم المتحركة سمات تم استردادها من المظهر باستخدام بنيةapp:enterAnim="?attr/transitionEnter"
. (I07bc1، b/178291654)
تغييرات واجهة برمجة التطبيقات
- تم إيقاف نهائيًا أدوات إنشاء Kotlin DSL التي تستخدم معرّفًا، ويجب استبدالها بأدوات إنشاء تستخدم مسارات (I85b42 وb/188816479) (I9f58f وb/188816479).
إصلاح الأخطاء
- يستخدم
DialogFragmentNavigator
الآن واجهة برمجة التطبيقاتNavigatorState.pop()
لإبلاغNavController
عندما يتم إغلاق مربّع حوار من خلال الضغط على زر الرجوع في النظام أو النقر خارجه، ما يضمن أن تكون حالةNavController
متزامنة دائمًا مع حالة Navigator. (I2ead9) لم يعُد التنقّل يعرض
ConcurrentModificationException
عند استخدام معالجة قائمةOnDestinationChangedListeners
من خلال عملية ردّ الاتصالonDestinationChanged
. (Ib1707، b/188860458)لم يعُد Safe Args يتعطّل عند محاولة إنشاء سمات الاتجاه في Kotlin. (Id2416، b/188564435)
تمت الآن إضافة التعليق التوضيحي
@IdRes
بشكل صحيح إلى طريقة setId في NavDestination، لذا لا تقبل سوى معرّفات الموارد. (I69b80)أصبحت المَعلمة int الخاصة بـ
findNode
الآنresId
بدلاً منresid
. (I7711d)
تحديث التبعية
- تعتمد Safe-Args الآن على الإصدار 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()
حالة الوجهات التي تم إرجاعها تلقائيًا وتعيدها، ما يتيح إمكانية استخدام حِزم خلفية متعددة بدون إجراء أي تغييرات على الرمز البرمجي. عند استخدام Navigation مع Fragments، هذه هي الطريقة المقترَحة للتكامل مع حِزم السجلّ الخلفي المتعدّدة. (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
في Navigation Compose وFragmentNavigator
وDynamicFragmentNavigator
المستخدَمة لوجهات <fragment>
في Navigation with Fragments لاستخدام واجهات Navigator API الجديدة وإتاحة حفظ الحالة واستعادتها.
مسارات التنقّل
المسار هو String
يحدّد الوجهة بشكل فريد. مع أنّ هذا المفهوم كان يُستخدَم سابقًا في Navigation Compose فقط، أصبح الآن جزءًا من واجهات برمجة التطبيقات الأساسية الخاصة بمكوّن Navigation. يوفر ذلك بديلاً لاستخدام معرّفات الأعداد الصحيحة عند إنشاء الرسم البياني من خلال Navigation Kotlin DSL. (b/172823546)
تحتوي جميع واجهات برمجة التطبيقات التي كانت تقبل معرّفًا فقط على حمولة زائدة تقبل مسارًا String
. ويشمل ذلك navigate()
وpopBackStack()
وpopUpTo()
وgetBackStackEntry()
.
وقد كان لذلك بعض الآثار على واجهة برمجة التطبيقات:
- تم إيقاف السمة
popUpTo
في Kotlin نهائيًا في Kotlin DSL، وتم استبدالها بالسمةpopUpToId
. (I59c73، b/172823546) - تم إيقاف واجهة برمجة التطبيقات
getStartDestination()
نهائيًا واستبدالها بواجهةgetStartDestinationId()
. (I0887f، b/172823546)
بالنسبة إلى المطوّرين الذين يجرون ترقية من الإصدارات السابقة من Navigation Compose إلى الإصدار 2.4.0-alpha01
من Navigation Compose، يعني ذلك أنّ عمليات الاستيراد التالية لطُرق الإضافة لم تعُد ضرورية ويجب إزالتها:
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
مباشرةً.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة كتابة جميع عناصر Navigation في 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
تنشئ 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) }
تم تعديل Safe Args ليعتمد على KotlinPoet
1.8.0
. (#172، b/183990444)
التغييرات في السلوك
- تعتمد عملية التنقّل الآن على
Lifecycle
2.3.1
وتشير الآن إلىsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، وهي الطُرق التي تعدّلNavBackStackEntry
Lifecycle
، على أنّها@MainThread
، ما يؤدي إلى توافق Navigation مع عملية التنفيذ في سلسلة التعليمات الرئيسية التي تم تقديمها في Lifecycle2.3.0
. (b/171125856) - أصبح تحليل وسيطات Enum من الروابط لصفحات معيّنة في التطبيق غير حساس لحالة الأحرف، ما يسمح بمطابقة رابط لصفحة معيّنة مثل
http://www.example.com/red
مع رابط لصفحة معيّنةwww.example.com/{color}
حتى عندما يكون لقيمة التعداد القيمةRED
. (#152، b/135857840)
توافق Compose
- لا يتوافق
androidx.navigation:navigation-compose:2.4.0-alpha01
إلا مع الإصدار1.0.0-beta07
من Compose والإصدارات الأحدث.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تتسبّب في منح الأولوية لعناصر نائبة لوسيطات لاحقة على الروابط لصفحات في التطبيق التي تتضمّن لاحقة مطابقة ودقيقة. (#153، b/184072811)
- يتيح
NavHostFragment
الآن استخدام أدوات تصفّح مخصّصة تستخدم@Navigator.Name("dialog")
نفسها المستخدَمة فيDialogFragmentNavigator
التلقائية. (Ib1c2c، b/175979140) - تم تحسين سلوك
NavigatorProvider#addNavigator
لضمان أنّ استدعاءه بشكل متكرّر باستخدام المثيل نفسه لا يتسبّب في حدوث مشاكل. (#176، b/187443146)
المساهمات الخارجية
- نشكر simonschiller على توفير إمكانية إنشاء طريقة
fromSavedStateHandle()
لكل فئةNavArgs
باستخدام Safe Args. (#122، b/136967621) - نشكر Bradleycorn على إتاحة تحليل وسيطات Enum من الروابط لصفحات في التطبيق بدون مراعاة حالة الأحرف. (#152، b/135857840)
- شكرًا osipxd على إصلاح المشكلة التي كانت تتسبب في منح الأولوية للعناصر النائبة للوسيطات اللاحقة على الروابط لصفحات في التطبيق التي تتضمّن لاحقة مطابقة تمامًا. (#153، b/184072811)
- نشكر tatocaster على تعديل Safe Args ليعتمد على KotlinPoet
1.8.0
. (#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 من Navigation Compose
الإصدار 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) - تعتمد Navigation Compose الآن على Navigation
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)
إصلاح الأخطاء
- تعتمد Navigation Compose الآن على الإصدار 2.3.4 من Navigation الذي يتضمّن إصلاحًا لمحاولة ضبط كائن ViewModelStore نفسه بعد ضبط الرسم البياني. (I65c24، b/177825470)
الإصدار 1.0.0-alpha08
24 شباط (فبراير) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha08
. يحتوي الإصدار 1.0.0-alpha08 على عمليات الإيداع هذه.
الميزات الجديدة
- تعبئ
NavHost
الآنLocalSavedStateRegistryOwner
CompositionLocal باستخدامNavBackStackEntry
الخاص بهذه الوجهة، ما يضمن حفظ أي حالة يتم حفظها مباشرةً فيSavedStateRegistry
واستعادتها إلى جانب الوجهة. (I435d7، b/179469431)
الإصدار 1.0.0-alpha07
10 شباط (فبراير) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha07
. يحتوي الإصدار 1.0.0-alpha07 على عمليات الإيداع هذه.
تحديثات التبعيات
- تعتمد Navigation Compose الآن على Lifecycle ViewModel Compose 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 على عمليات الإيداع هذه.
تم تعديلها لتعتمد على الإصدار 1.0.0-alpha10 من Compose.
الإصدار 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 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تتيح ميزة التنقّل في Compose الآن استخدام NavOptions لإجراء عمليات popUpTo وlaunchSingleTop (If96c3 وb/171468994).
- تمت إضافة دالة تنقّل تأخذ مسارًا بدلاً من معرّف، ما يتيح لك إنشاء رسومات بيانية متداخلة في لغة DSL الخاصة بمكتبة Navigation Compose. (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
إمكانية الدمج بين مكوّن Navigation وJetpack Compose. تستخدِم هذه السمة دوال @Composable
كوجهات في تطبيقك.
يوفر هذا الإصدار الأوّلي ما يلي:
NavHost
عنصر قابل للإنشاء يتيح لك إنشاء الرسم البياني للتنقّل من خلال لغة Kotlin DSL.- تحديد نطاق دورة الحياة و
ViewModel
والحالة المحفوظة على مستوى الوجهة - التكامل التلقائي مع زر الرجوع في النظام
- إتاحة تمرير الوسيطات وإرفاق روابط لصفحات معيّنة بالوجهات وإرجاع نتيجة إلى الوجهات السابقة
- أنشئ دوال مساعدة مخصّصة في
rememberNavController()
وcurrentBackStackEntryAsState()
للسماح برفع الحالة وربطNavController
بعناصر قابلة للإنشاء خارجNavHost
(مثل شريط التنقّل السفلي).
راجِع دليل التنقّل في Compose لمزيد من المعلومات.
الإصدار 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 الآن على الإصدار 1.4.31 من المكوّن الإضافي Kotlin Gradle. (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
بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم للرابط لصفحة في التطبيق. تتيح هذه السمة استخدام قيمة العدد الصحيح الأوّلي بالإضافة إلى قيم سداسية عشرية مسبوقة بـ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 الآن تعليقات توضيحية لإيقاف التحذيرات في الطرق المناسبة عند استخدام Java. (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 والتسلسل الهرمي لطريقة العرض الخاصة بعنصر Fragment. يتيح لك ذلك اختبار أجزاء مربّعات الحوار التي تستخدم Navigation معFragmentScenario
وNavigation.setViewNavController()
. (I69e0d)
الإصدار 2.3.1
الإصدار 2.3.1
14 أكتوبر 2020
تم طرح androidx.navigation:navigation-*:2.3.1
. يحتوي الإصدار 2.3.1 على عمليات الإيداع هذه.
الميزات الجديدة
- تمت إضافة موارد Animator التلقائية إلى Navigation UI، ويُنصح باستخدامها بدلاً من موارد الحركة التلقائية. (b/167430145)
- تتجاوز NavOptions الآن طريقتَي hashcode وequals (b/161586466)
- تتضمّن ميزة "التنقّل" الآن الوجهة الحالية في IllegalArgumentException "لا توجد وجهة تحمل المعرّف"، ما من شأنه تحسين تجربة تصحيح الأخطاء للمطوّرين. (b/168311416)
إصلاح الأخطاء
- لن تلتفّ أسطر الإرجاع في Safe Args بعد الآن، حتى إذا كان اسم فئة الوسيطة التي تم إنشاؤها أطول من 100 حرف. (b/168584987)
التغييرات في التبعيات
- يعتمد
navigation-ui
الآن على DrawerLayout 1.1.1، ما يضمن إمكانيةNavigationUI
فتح الدرج حتى عند استخدامLOCK_MODE_LOCKED_CLOSED
أوLOCK_MODE_LOCKED_OPEN
. (b/162253907) - تعتمد Safe Args الآن على الإصدار 1.6.0 من KotlinPoet (aosp/1435911)
- تعتمد Safe Args الآن على الإصدار 4.0.1 من "مكوّن Android الإضافي في Gradle" (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 في "مخطط التنقّل" استخدام
defaultArguments
Map
للإجراءات، ما يتيح إمكانية ضبط القيم التلقائية على عناصر<action>
في ملفات XML الخاصة بالتنقّل. (b/150345605)
إصلاح الأخطاء
- من Navigation 2.2.2: تم إصلاح
IllegalStateException
عند الربط لصفحة معيّنة في الوجهة الأولى من الرسم البياني عندما يكون لديك عدة مثيلاتNavHostFragment
في النشاط. (b/147378752)
تحديثات التبعيات
- يعتمد التنقّل الآن على Fragment
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)
تحديثات التبعيات
- تعتمد عناصر Navigation Dynamic Features الآن على Play Core
1.6.5
. (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)
إصلاح الأخطاء
- تحتفظ قواعد
navigation-common-ktx
ProGuard الآن بشكل صحيح بفئاتNavArgs
المستخدَمة فقط بدلاً من جميع مثيلاتNavArgs
. (b/150213558)
التغييرات في التبعيات
- تمت إعادة ربط التنقّل بالإصدار
1.2.0
من Core، وأصبح يعتمد الآن على الإصدار1.1.0
من Core لتجنُّب إجبار المطوّرين على الانتقال إلى إصدار أحدث عندما لا يعتمد التنقّل على أي واجهات برمجة تطبيقات جديدة في الإصدار1.2.0
من Core.
الإصدار 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)
التغييرات في التبعيات
- يعتمد التنقّل الآن على Core
1.2.0
.
الإصدار 2.3.0-alpha01
5 شباط (فبراير) 2020
تم طرح androidx.navigation:navigation-*:2.3.0-alpha01
. يحتوي الإصدار 2.3.0-alpha01 على عمليات الإيداع هذه.
الميزات الجديدة
- يوفر عنصر
navigation-testing
الجديد فئةTestNavHostController
. يوفّر هذا الصف بديلاً لاستخدام عنصرNavController
وهمي عند اختبار Navigation، ما يتيح لك ضبط الوجهة الحالية والتحقّق من سجلّ الرجوع بعد عمليات التنقّل. (b/140884273) - تتيح لك السمة الجديدة
navigation-dynamic-features-fragment
(والسمةnavigation-dynamic-features-runtime
التي تعتمد عليها) تضمين وجهات أو رسومات بيانية كاملة للتنقّل (من خلال<include-dynamic>
) من وحدات الميزات، ما يوفّر عملية تثبيت سلسة لوحدات الميزات عند الطلب عند الانتقال إلى تلك الوجهات. لمزيد من المعلومات، يُرجى الاطّلاع على التنقّل باستخدام وحدات الميزات. (b/132170186)
إصلاح الأخطاء
- من التنقّل
2.2.1
: تتجاهل الروابط المؤدية إلى صفحات معيّنة في التطبيق التي لا تتضمّن مَعلمات طلب البحث الآن أي مَعلمات طلب بحث بشكلٍ صحيح بدلاً من إلحاقها بعناصر{argument}
اللاحقة أو عدم مطابقة الرابط المؤدي إلى صفحة معيّنة في التطبيق. (b/147447512) - من شريط التنقّل
2.2.1
: تم تعديل قواعدnavigation-ui
ProGuard الخاصة بـDrawerArrowDrawable
لضمان عدم الحاجة إلىandroid.enableJetifier=true
. (b/147610424) - من التنقّل
2.2.1
: يحتوي الآن الوحدةnavigation-common-ktx
على اسم حزمة بيان فريد بدلاً من مشاركة اسم حزمة البيان نفسه معnavigation-runtime-ktx
. (aosp/1141947)
تحديثات التبعيات
- من التنقّل
2.2.1
: يعتمد التنقّل2.2.1
الآن على Lifecycle ViewModel SavedState2.2.0
وFragment1.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=””
)، وأصبح الآن يضبط العنوان بشكل صحيح على سلسلة فارغة. تم طرح هذه الميزة سابقًا في Navigation 2.3.0-alpha04. (b/148679860) - تحتفظ قواعد
navigation-common-ktx
ProGuard الآن بشكل صحيح بفئاتNavArgs
المستخدَمة فقط بدلاً من جميع مثيلاتNavArgs
. تم إصدار هذه الميزة سابقًا في Navigation 2.3.0-alpha03. (b/150213558
تحديثات التبعيات
- يعتمد التنقّل الآن على Fragment
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) - تم تعديل
navigation-ui
قواعد ProGuard الخاصة بـDrawerArrowDrawable
لضمان عدم الحاجة إلىandroid.enableJetifier=true
. (b/147610424) - يحتوي الوحدة
navigation-common-ktx
الآن على اسم حزمة بيان فريد بدلاً من مشاركة اسم حزمة البيان نفسه معnavigation-runtime-ktx
. (aosp/1141947)
تحديثات التبعيات
- تعتمد مكتبة Navigation
2.2.1
الآن على Lifecycle ViewModel SavedState2.2.0
وFragment1.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
المستندة إلى Navigation، بالإضافة إلى توفير الوسيطات المستخدَمة لبدء تلك الوجهة. - عملية دمج SavedState مع Lifecycle ViewModel: أصبح
SavedStateViewModelFactory
الآن المصنع التلقائي المستخدَم عند استخدامby navGraphViewModels()
أو الدالة الإنشائيةViewModelProvider
معViewModelStoreOwner
التي تعرضها الدالتانNavController.getBackStackEntry()
أوNavController.getViewModelStoreOwner()
. - إتاحة مَعلمات طلب البحث للروابط لصفحات في التطبيق: تتيح الروابط لصفحات في التطبيق التي تتضمّن مَعلمات طلب البحث الآن إعادة ترتيب مَعلمات طلب البحث، كما أنّ الوسيطات التي تتضمّن قيمة تلقائية أو يمكن أن تكون فارغة أصبحت اختيارية عند مطابقة الروابط لصفحات في التطبيق.
- تحسين إمكانية استخدام الصور المتحركة: يستخدم الإصدار
NavHostFragment
الآنFragmentContainerView
من Fragment 1.2.0، ما يؤدي إلى حلّ مشاكل ترتيب الصور المتحركة حسب المحور z وإرسال هوامش النافذة إلى "اللقطات".
الإصدار 2.2.0-rc04
18 كانون الأول (ديسمبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-rc04
. يتضمّن الإصدار 2.2.0-rc04 عمليات الإيداع هذه.
إصلاح الأخطاء
- تم تعديل الرسوم المتحركة التلقائية للتلاشي المستخدَمة في
navigation-ui
لتتطابق مع الرسوم المتحركة المعدَّلة للتلاشي في Fragment1.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)
التغييرات في التبعيات
- تعتمد ميزة "التنقّل" الآن على Lifecycle
2.2.0-rc03
وLifecycle ViewModel SavedState1.0.0-rc03
وActivity1.1.0-rc03
وFragment1.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
المستندة إلى Navigation، بالإضافة إلى توفير الوسيطات المستخدَمة لبدء تلك الوجهة. (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
- تحديد نطاق ViewModels في الرسم البياني للتنقّل: يمكنك الآن إنشاء ViewModels يتم تحديد نطاقها على مستوى الرسم البياني للتنقّل باستخدام تفويض السمة
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
. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.
إصلاح الأخطاء
- تمت إزالة تبعية jacoco غير المقصودة التي تم تقديمها في
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()
علىNavController
نهائيًا لصالح طريقةgetViewModelStoreOwner()
الجديدة التي تعرضViewModelStoreOwner
. (aosp/987010) - تم تعميم تنفيذ وجهات النوافذ العائمة، مثل وجهات
<dialog>
، في واجهة علامات،FloatingWindow
، تنفّذها الآن جميع وجهات<dialog>
. تتجاهل الآن طرق NavigationUI للتفاعل مع شريط التطبيق العلوي الوجهاتFloatingWindow
. (b/133600763)
تغييرات السلوك
- يتم الآن مزامنة حالة التنقّل بشكل صحيح مع ما يظهر على الشاشة عند استخدام وجهة
<dialog>
. نتيجةً لذلك، تعرض أداة Navigation الآن تلقائيًا<dialog>
الوجهات عند الانتقال إلى وجهة غير حوارية وغير نشطة، مثل وجهة<fragment>
. (b/134089818)
إصلاح الأخطاء
- تتجاهل ميزة "التنقّل" الآن الصورة المتحركة التي تظهر عند إعادة إنشاء النشاط عند التعامل مع رابط لصفحة في التطبيق، ما يؤدي إلى إصلاح مشكلة ظهور وميض مرئي. (b/130362979)
- تم إصلاح الخطأ الذي كان يتسبب في عدم مزامنة سجلّ التصفّح السابق في Navigation عند إزالة Fragment أثناء إضافة Fragment الأوّلي. (b/133832218)
الإصدار 2.1.0-alpha05
5 يونيو 2019
تم طرح androidx.navigation:*:2.1.0-alpha05
. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية واجهات برمجة التطبيقات ذات الصلة بالمضيف على
NavController
ونقلها إلى فئة فرعية جديدة منNavController
، وهيNavHostController
. (aosp/966091) - تم استبدال الطريقة
NavController
setHostOnBackPressedDispatcherOwner()
بالطريقة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
عند اعتراض أحداث زر الرجوع في النظام، ما يؤدي إلى إصلاح مشكلة في إصدار قديم من Navigation2.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
، ما يحلّ مشكلة عند إجراء تنقّل شرطي في طرق مراحل نشاط Fragment عند الرجوع إلى Fragment. b/111598096 - بالنسبة إلى Safe Args، يتم الآن استنتاج
android:defaultValue=”@null”
بدونapp:argType
محدّد بشكل صحيح على أنّه وسيطةstring
. b/129629192
الإصدار 2.1.0-alpha02
3 أبريل 2019
تم طرح androidx.navigation:*:2.1.0-alpha02
. يمكنك الاطّلاع على عمليات الإيداع المضمَّنة في هذا الإصدار هنا.
الميزات الجديدة
- يمكنك الآن إنشاء ViewModels بنطاق على مستوى الرسم البياني للتنقّل من خلال أداة تفويض السمة
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
هذا هو الإصدار الأوّلي الأول من Navigation 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
لإنشاء مثيل من الفئة Fragment. b/119054429
إصلاح الأخطاء
- لم يعُد التنقّل يرسل قيمة فارغة
Bundle
عند إرفاق وسيطات بوجهة، ما يؤدي إلى حلّ مشكلة عند استخدامandroid:defaultValue="@null"
. b/128531879 - تعتمد Safe Args الآن على الإصدار 1.1.0 من KotlinPoet، ما يحلّ مشكلة أسماء الحِزم الطويلة جدًا. b/123654948
الإصدار 2.0.0
الإصدار 2.0.0
14 آذار (مارس) 2019
تم إصدار الإصدار 2.0.0
من أداة التنقّل بدون أي تغييرات عن الإصدار 2.0.0-rc02
.
الإصدار 2.0.0-rc02
6 مارس 2019
توفّر حزمة Navigation 2.0.0-rc02 عناصر جديدة مع معرّف المجموعة androidx.navigation
، كما تغيّر التبعيات إلى ما يعادلها في AndroidX.
يتطابق سلوك الإصدار 2.0.0-rc02 مع سلوك الإصدار 1.0.0-rc02 من Navigation، ولن تحتاج إلى إجراء أي تغييرات على الرمز البرمجي لتحديث الإصدار 1.0.0-rc02 باستثناء تعديل التبعيات لتتوافق مع التبعيات الجديدة.
يجب أن يكون مشروعك قد تم نقله إلى AndroidX لاستخدام الإصدارات 2.X من Navigation. سيكون الإصدار الثابت 1.0 من Navigation هو آخر إصدار يستخدم تبعيات Support Library، وسيستند كل التطوير المستقبلي بعد الإصدار 1.0 إلى AndroidX وسيتم إنشاؤه استنادًا إلى الإصدار الثابت 2.0.
التبعيات قبل AndroidX
بالنسبة إلى إصدارات Navigation السابقة لإصدار 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
}
بالنسبة إلى Safe args، أضِف مسار الفئة التالي في ملف 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 من Navigation. يتضمّن هذا الإصدار عددًا من إصلاحات الأخطاء.
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل
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 من Navigation. يتضمّن هذا الإصدار إصلاحًا لأحد الأخطاء.
إصلاح الأخطاء
- تم إصلاح مشكلة عند استخدام "التقسيمات" وعمليات التنقّل
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 - تضبط Navigation الآن
ClassLoader
بشكل صحيح أثناء استعادة حالة المثيل المحفوظة، ما يمنع حدوث مشاكل عند استخدام فئات مخصّصة في حالةNavigator
المحفوظة أو في الوسيطات المُرسَلة إلىNavDestination
. b/123893858 - لم تعُد فئات NavArgs التي تم إنشاؤها باستخدام Safe Args تتسبّب في حدوث أعطال عند استعادة وسيطة
Parcelable[]
من حالة المثيل المحفوظة. b/123963545 - تعمل Safe Args الآن على إزالة فئات Kotlin التي تم إنشاؤها وغير الضرورية بشكل صحيح. b/124120883
الإصدار 1.0.0-beta01
4 شباط (فبراير) 2019
هذا هو الإصدار التجريبي الأول من Navigation، ومن المتوقّع أن يبقى واجهة برمجة التطبيقات Navigation ثابتة حتى الإصدار التالي ما لم تحدث مشكلة خطيرة. يتضمّن هذا الإصدار بعض إصلاحات الأخطاء وتغييرات في السلوك.
تغييرات السلوك
- تضمن ميزة "التنقّل" الآن أنّه يتم التعامل مع القيم التلقائية للوسيطات بشكل مماثل
في وقت التشغيل ومن خلال Safe Args. نتيجةً لذلك، يمكن أن تحتوي الوسيطات التي تتضمّن
app:argType="reference"
على قيمة تلقائية تشير إلى مورد آخر (على سبيل المثال،@color/colorPrimary
). سيؤدي محاولة استخدام قيمة تلقائية مرجعية معapp:argType
مختلف إلى حدوث استثناء عند تحليل XML الخاص بالتنقّل. b/123551990 - تعتمد Safe Args الآن على الإصدار 3.3.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". 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.
إصلاح الأخطاء
- تم إصلاح مشكلة تعذُّر استيراد Safe Args لفئة Directions المرتبطة بالإجراءات الشاملة. b/123307342
الإصدار 1.0.0-alpha10
23 يناير 2019
المشاكل المعروفة
- يتعذّر على Safe Args استيراد فئة Directions المرتبطة بالإجراءات العامة. b/123307342
يتضمّن هذا الإصدار تغييرات على واجهة برمجة التطبيقات قد تؤدي إلى أعطال؛ يُرجى الاطّلاع على القسم التغييرات التي قد تؤدي إلى أعطال أدناه.
الميزات الجديدة
- يمكن لمستخدمي Kotlin الآن استخدام تفويض السمة
by navArgs()
للحصول بشكل غير مباشر على مرجع إلى فئةNavArgs
تم إنشاؤها باستخدام Safe Args في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 - تتجنّب Safe Args الآن تكرار الفئات المتطابقة للإجراءات التي لا تتضمّن وسيطات. أصبح نوع الإرجاع لطُرق عدم توفّر وسيطات في فئات NavDirections التي تم إنشاؤها هو
NavDirections
. b/123233147 - لم تعُد فئات Directions التي تم إنشاؤها باستخدام Safe Args تتضمّن دالة إنشاء عامة، ويجب التفاعل فقط مع الطرق الثابتة التي تم إنشاؤها. b/123031660
- لم تعُد فئات
NavDirections
التي تم إنشاؤها باستخدام Safe Args تتضمّن دالة إنشاء عامة، بل يجب إنشاؤها فقط من خلال الطرق الثابتة في فئات Directions التي تم إنشاؤها. b/122963206 - تمت الآن الإشارة إلى
Bundle
التي تم إرجاعها منNavDirections
'getArguments()
على أنّها@NonNull
بدلاً من@Nullable
. b/123243957
إصلاح الأخطاء
- تعالج السمة
NavDeepLinkBuilder
الآن بشكل صحيح عدة سماتPendingIntent
متزامنة تؤدي إلى الوجهة نفسها، وذلك باستخدام الوسيطات التي تمرّرها لتحديد التفرد. b/120042732 - تعالج
NavController
الآن عملياتpopBackStack()
بشكل صحيح عند استخدامNavHostFragment
متداخل أو أجزاء فرعية أخرى مع سجلّ الخلف.b/122770335 - تعمل السمة
NavigationUI
الآن على ضبط وصف المحتوى لزر "أعلى" بشكل صحيح. b/120395362 - تتعامل فئات Directions التي تم إنشاؤها باستخدام Safe Args الآن بشكل صحيح مع الإجراءات الشاملة التي لها المعرّف نفسه كإجراء في وجهة.b/122962504
- أصبحت فئات
NavDirections
التي تم إنشاؤها باستخدام Safe Args تتضمّن الآن قيمًا متساوية بشكل صحيح عندما تعرضequals()
القيمة true. b/123043662hashCode()
- تعرض الدالة
FragmentNavigator
الآن رسالة خطأ أفضل إذا حاولت تنفيذFragmentTransactions
مخصّص علىNavHostFragment
FragmentManager
. يجب استخدامgetChildFragmentManager()
دائمًا. b/112927148
الإصدار 1.0.0-alpha09
18 كانون الأول (ديسمبر) 2018
يتضمّن هذا الإصدار تغييرات على واجهة برمجة التطبيقات قد تؤدي إلى أعطال؛ يُرجى الاطّلاع على القسم التغييرات التي قد تؤدي إلى أعطال أدناه.
لقد اخترنا عدم مواصلة تطوير العنصر android.arch.navigation:navigation-testing
. على الرغم من أنّ هذه الطريقة أثبتت فعاليتها في الاختبار الداخلي لـ NavController
، ننصح بشدة باستخدام استراتيجيات اختبار بديلة، مثل محاكاة مثيل NavController
للتحقّق من تنفيذ طلبات navigate()
الصحيحة. تمت مناقشة هذا الأسلوب بالتفصيل في
محاضرة Single Activity في مؤتمر AndroidDevSummit 2018،
وسنعمل على توفير مستندات إضافية حول الاختبار
باستخدام Navigation.
الميزات الجديدة
- لن تؤدي
MenuItem
التي تتضمّنmenuCategory="secondary"
إلى إيقاف عملية الرجوع إلى الخلف عند استخدامها مع طرقNavigationUI
. b/120104424 - تتيح لك السمة
AppBarConfiguration
الآن ضبط مثيل احتياطيOnNavigateUpListener
سيتم استدعاؤه عندما تعرض السمةnavController.navigateUp()
القيمةfalse
. b/79993862 b/120690961
التغييرات التي قد تؤدي إلى أعطال
- عند استخدام
<argument>
معargType="reference"
، لن يحلّل Navigation المرجع بعد ذلك، بل سيقدّم معرّف المورد الأولي نفسه. b/111736515 - تعود
onNavDestinationSelected()
الآن تلقائيًا إلى وجهة البدء في الرسم البياني للتنقّل، ما يجعلها متوافقة مع طرقsetup
. أضِفmenuCategory="secondary"
إلىMenuItem
لتجنُّب إظهار سجلّ الرجوع. aosp/852869 - تتلقّى الآن طرق
fromBundle()
لفئاتArgs
التي تم إنشاؤها قيمةBundle
غير فارغة بدلاً من قيمةBundle
قابلة للتصغير aosp/845616
إصلاح الأخطاء
- يتم الآن تحليل الوسيطات بشكل صحيح من الروابط لصفحات في التطبيق على أنّها
argType
بدلاً من تحليلها دائمًا على أنّها سلاسل b/110273284 - أصبح بإمكان التنقّل الآن تصدير الموارد العامة بشكل صحيح b/121059552
- أصبحت Safe Args متوافقة الآن مع الإصدار 3.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث b/119662045
الإصدار 1.0.0-alpha08
6 كانون الأول (ديسمبر) 2018
يتضمّن هذا الإصدار تغييرات على واجهة برمجة التطبيقات قد تؤدي إلى أعطال؛ يُرجى الاطّلاع على القسم التغييرات التي قد تؤدي إلى أعطال أدناه.
الميزات الجديدة
- عند استخدام تصنيفات الوجهة مع طرق
NavigationUI
، سيتم الآن تلقائيًا استبدال مثيلات{argName}
فيandroid:label
بالوسيط الصحيح b/80267266 - يعتمد التنقّل الآن على الإصدار 28.0.0 من مكتبة الدعم 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 - تم تعديل العديد من الفئات والطرق غير المخصّصة لإنشاء فئات فرعية، مثل
NavOptions
وNavInflater
وNavDeepLinkBuilder
وAppBarConfiguration
، لتصبحfinal
aosp/835681 - تمت إزالة الطريقة المتوقّفة نهائيًا
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
- تتيح Safe Args استخدام عناصر Serializable، بما في ذلك قيم 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
Safe Args
- أصبحت وسيطات Safe تعتمد الآن على الإصدار 3.2.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/113167627
- يمكن الآن إنشاء توجيهات للصفوف الداخلية. b/117407555
- تم إصلاح مشكلة في إنشاء "اتجاهات" إلى رسم بياني <include>. b/116542123
الإصدار 1.0.0-alpha06
20 سبتمبر 2018
الميزات الجديدة
- أصبحت ميزة "انتقالات العناصر المشترَكة" لوجهات Fragment وActivity متاحة الآن b/79665225. لمزيد من المعلومات، يُرجى الاطّلاع على تنفيذ التنقّل باستخدام "مكوّن بنية التنقّل".
- سيؤدي اختيار عنصر في
NavigationView
الآن إلى إغلاق أي ورقة سفلية تحتوي على b/112158843
تغييرات واجهة برمجة التطبيقات
- تغيير غير متوافق: تأخذ الطريقة
navigate()
في Navigator الآن المَعلمةNavigator.Extras
. - أصبح الإجراء
getGraph()
في NavController الآنNonNull
b/112243286
إصلاح الأخطاء
- لم يعُد
NavigationUI.setupWithNavController()
يتسبّب في تسرُّب المشاهدات إذا تم استخدامه مع مشاهدات من وجهات فردية b/111961977 - لا يتم الآن استدعاء Navigator
onSaveState()
إلا مرة واحدة b/112627079
Safe Args
- توسّع فئات "الوجهة" في Navigation الآن فئة "الاتجاهات" الرئيسية إذا كانت متوفّرة b/79871405
- تتضمّن فئتَا Directions وArgs الآن
toString()
عملية تنفيذ مفيدة b/111843389
الإصدار 1.0.0-alpha05
10 أغسطس 2018
إصلاح الأخطاء
- تم إصلاح الخطأ الذي تسبَّب في حدوث سلوك غير صحيح في سجلّ الرجوع. b/111907708
- تم إصلاح خطأ في
equals()
من فئات Generated Args. b/111450897 - إصلاح خطأ في عملية الإنشاء في Safe Args b/109409713
- إصلاح خطأ في تحويل معرّفات الموارد إلى أسماء Java b/111602491
- إصلاح رسائل الخطأ المتعلّقة بقيمة Null في المكوّن الإضافي Safe Args
- إضافة تعليقات توضيحية بشأن إمكانية قبول القيمة الخالية
الإصدار 1.0.0-alpha04
July 19, 2018
يتضمّن الإصدار 1.0.0-alpha04
من Navigation والمكوّن الإضافي Safe Args gradle المرتبط به عددًا من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وعمليات إصلاح الأخطاء.
التغييرات في واجهة برمجة التطبيقات / السلوك
- سيضبط NavHostFragment دائمًا الجزء الحالي على أنّه جزء التنقّل الأساسي، ما يضمن إزالة مديري الأجزاء الفرعية قبل إزالة NavController الخارجي b/111345778.
Safe Args
- تغيير قد يؤدي إلى أعطال: تم تغيير
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
من Navigation والمكوّن الإضافي Safe Args gradle المرتبط به عددًا من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وعمليات إصلاح الأخطاء.
التغييرات في واجهة برمجة التطبيقات / السلوك
- تمت إضافة طريقة NavigationUI.setupWithNavController إلى شريط الأدوات b/109868820
- تمت إضافة طريقة NavigationUI.setupWithNavController إلى CollapsingToolbarLayout b/110887183
- تعرض الدالة popBackStack() الآن القيمة "خطأ" عندما تكون قائمة الرجوع فارغة أو عندما لا يكون معرّف الوجهة المحدّد في قائمة الرجوع b/110893637
- يتجاهل FragmentNavigator الآن عمليات التنقّل بعد أن يحفظ FragmentManager الحالة، ما يؤدي إلى تجنُّب استثناءات "لا يمكن تنفيذ هذا الإجراء بعد onSaveInstanceState" b/110987825
Safe Args
- تغيير غير متوافق: سيتم استبدال الأحرف غير الأبجدية الرقمية في أسماء الإجراءات والوسيطات بنظام الكتابة المختلطة في أسماء طرق NavDirections ذات الصلة
- على سبيل المثال، سيصبح
DemoController.index
setDemoControllerIndex
b/79995048 - على سبيل المثال، سيصبح
action_show_settings
actionShowSettings
b/79642240
- على سبيل المثال، سيصبح
- تغيير غير متوافق مع الإصدارات السابقة: أصبحت الوسيطات الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في وسيطات السلسلة والقابلة للتجزئة، أضِف
app:nullable="true"
b/79642307 - يمكنك الآن استخدام
app:type="long"
مع defaultValues بالتنسيق "123L" b/79563966 - أصبحت وسيطات Parcelable متاحة الآن، وذلك باستخدام اسم فئة مؤهَّل بالكامل لـ
app:type
. القيمة التلقائية الوحيدة المتاحة هي"@null"
b/79563966 - تتضمّن فئات Args الآن الرمزين
equals()
وhashCode()
b/79642246 - يمكن الآن تطبيق مكوّن Safe Args الإضافي على مشاريع المكتبة b/80036553
- يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع الميزات b/110011752
إصلاح الأخطاء
- تم إصلاح المشاكل التي تحدث عند التنقّل أثناء طرق دورة حياة Fragment b/109916080
- تم إصلاح المشاكل التي تحدث عند التنقّل في الرسومات البيانية المتداخلة عدة مرات b/110178671
- تم إصلاح المشاكل عند استخدام
setPopUpTo
مع الوجهة الأولى في الرسم البياني b/109909461 - تم إصلاح المشكلة التي كانت تتسبّب في تمرير جميع قيم
app:defaultValue
كسلاسل b/110710788 - يضيف الإصدار التجريبي الأول من الإصدار 3.2 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"، والذي يتضمّن أداة aapt2، الآن قواعد keep لكل سمة
android:name
في ملفات XML الخاصة بميزة "التنقّل" b/79874119 - تم إصلاح تسرب الذاكرة عند استبدال FragmentNavigator التلقائي b/110900142
الإصدار 1.0.0-alpha02
7 يونيو 2018
التغييرات في السلوك
يستخدم
FragmentNavigator
الآنsetReorderingAllowed(true)
. b/109826220تعمل ميزة التنقّل الآن على فك ترميز وسيطات عناوين URL التي تم تحليلها من عناوين URL للروابط لصفحات معيّنة في التطبيق. b/79982454
إصلاح الأخطاء
تم إصلاح
IllegalStateException
عند طلب التنقّل من خلال طرق دورة حياة Fragment. b/79632233تعتمد حزمة Navigation الآن على الإصدار 27.1.1 من "حزمة الدعم" لإصلاح مشكلة الوميض عند استخدام الرسوم المتحركة. b/80160903
تم إصلاح
IllegalArgumentException
عند استخدام defaultNavHost="true" كجزء فرعي. b/79656847تم إصلاح
StackOverflowError
عند استخدام NavDeepLinkBuilder. b/109653065تم إصلاح الخطأ
IllegalArgumentException
عند الرجوع إلى رسم بياني متداخل. b/80453447تم إصلاح مشكلة تداخل "اللقطات" عند استخدام
launchSingleTop
. b/79407969تنشئ ميزة "التنقّل" الآن حزمة الخلفية الاصطناعية الصحيحة للرسومات البيانية المتداخلة. b/79734195
ستعمل NavigationUI الآن على تمييز العنصر الصحيح عند استخدام رسم بياني متداخل كـ
MenuItem
. b/109675998
تغييرات واجهة برمجة التطبيقات
تمّ إيقاف السمة
clearTask
للإجراءات وواجهة برمجة التطبيقات المرتبطة بها فيNavOptions
نهائيًا. b/80338878تم إيقاف السمة
launchDocument
للإجراءات وواجهة برمجة التطبيقات المرتبطة بها فيNavOptions
نهائيًا. b/109806636
الإصدار 1.0.0-alpha01
8 مايو 2018
توفّر أدوات التنقّل إطار عمل لإنشاء أدوات التنقّل داخل التطبيق. هذا الإصدار الأوّلي هو 1.0.0-alpha01
.