التنقّل
آخر تعديل | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار التجريبي الأول |
---|---|---|---|---|
11 كانون الأول (ديسمبر) 2024 | 2.8.5 | - | - | 2.9.0-alpha04 |
الإعلان عن التبعيات
لإضافة تبعية على 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.8.4" // 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.8.4" // 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.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" 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. يُرجى إعلامنا إذا واجهت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.
اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.
الإصدار 2.9
الإصدار 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.
تم تحويلها إلى كائن | 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.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 عمليات الربط هذه.
الميزات الجديدة
- يمكن الآن للمستكشفين المخصّصين وضع علامة على وجهاتهم على أنّها تستخدم واجهة
SupportingPane
، ما يشير إلىNavController
أنّه سيتم عرض هذه الوجهات إلى جانب وجهات أخرى. باستخدام هذه الواجهة، يمكنRESUMED
وجهات متعددة في الوقت نفسه، على سبيل المثال. (Id5559) - من التنقّل
2.8.3
: تمت إضافة عمليات تحقّق جديدة من الأخطاء في وحداتnavigation-common
وnavigation-runtime
وnavigation-compose
للمساعدة في تحديد أيّ طرق آمنة من حيث النوع لم تتم إضافة تعليقات توضيحية لها بشكل صحيح باستخدام@Serializable
. يتم تطبيق هذا التحقّق على جميع وظائف الإضافاتNavGraphBuilder
وNavDeepLinkBuilder
. (I4a259 وI95402 وIe601a وId8c6e وI28bda وb/362725816) - من التنقّل
2.8.3
: تمت إضافة عمليات تحقّق جديدة من الأخطاء في وحدات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 Plugin أو الإصدارات الأحدث. (b/368070326 وb/371463741)
الإصدار 2.8
الإصدار 2.8.5
11 كانون الأول (ديسمبر) 2024
تم إصدار androidx.navigation:navigation-*:2.8.5
. يحتوي الإصدار 2.8.5 على عمليات الربط هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة تؤدي إلى ظهور استثناء في
NavHost
داخلPredictiveBackHandler
إذا تم طيّ الحزمة الخلفية إلى إدخال واحد وتشغيل زر الرجوع في النظام في الإطار نفسه. (I1a429، b/375343407) - تمّ إصلاح
NavDestination
NullPointerException
عند تعديلstartDestination
للرسم البياني. (I99421، b/361560785) - تم إصلاح مشكلة كانت تؤدي إلى ظهور حركة متحركة غير متوقّعة لتغيير الحجم عند استخدام ميزة "إنشاء التنقّل" وطلب التنقّل في الإطار نفسه الذي تنتهي فيه الحركة المتحركة الحالية. (I26cb1، b/353294030)
- تم إصلاح
ConcurrentModificationException
يمكن أن يحدث عندما يؤديLifecycleObserver
مرفق بـNavBackStackEntry
إلى إجراء تغيير في الحزمة الخلفية عندما يغيّرLifecycleOwner
المضيف، مثل النشاط أو المقتطف المُضمّن، حالة دورة حياته. (Ia9494)
الإصدار 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 على عمليات الربط هذه.
الميزات الجديدة
- تمت إضافة عمليات تحقّق جديدة من الأخطاء النحوية لوحدات
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 من مكوّن Android Gradle الإضافي أو الإصدارات الأحدث، وذلك بسبب قواعد lint الجديدة التي تمت إضافتها فيNavigation 2.8.*
. (I1be3d وb/368070326 وb/371463741)
المشاكل المعروفة
- سيُظهر مدقّق الأخطاء في مسار التنقّل خطأ في التحقّق من الأخطاء المخصّصة القديمة عند محاولة تشغيل مدقّق الأخطاء باستخدام Lint 16 (AGP 8.7) أو إصدار أحدث. (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 عمليات الربط هذه.
الميزات الجديدة
- تمت إضافة قاعدة جديدة لفحص الأخطاء لضمان استخدام دالة
popBackStack
التي تأخذ نوع فئة محدّدًا عند محاولةpopBackStack
باستخدام واجهات برمجة تطبيقات آمنة من حيث النوع. (Ief161، b/358095343)
إصلاح الأخطاء
- تتطلّب عملية التنقّل الآن أن يحتوي المسار الذي تم تمريره إلى
startDestination
فيNavGraph
على قيم لجميع الوسيطات المطلوبة، بما في ذلك الوسيطات التي لا يمكن أن تكون فارغة ولا تحتوي على قيمة تلقائية. (I18e74، b/362594265) - أضافت Navigation safe args إمكانية استخدام سلاسل غير فارغة، بحيث يتم تحليل القيم "null" وتخزينها في الحِزمة كما هي. ويختلف ذلك عن السلوك الحالي الذي يتم فيه تحليل القيم "null" إلى عنصر فارغ. لا ينطبق هذا التغيير إلا على أنواع السلاسل غير الفارغة. تبقى السلاسل التي يمكن أن تكون فارغة بدون تغيير. (I08b4a، b/348936238)
- لم يعُد بإمكانك إنشاء رابط لصفحة في تطبيق معيّن إلا من خلال رابط لصفحة في التطبيق تمت إضافته صراحةً إلى الوجهة.
NavDestination
ويعني ذلك أيضًا أنّه لا يمكنك الانتقال إلى مسار وجهة إلا باستخدام التحميل الزائد لدالة التنقّل التي تأخذ مسار سلسلة. يعالج هذا الخلل الذي كان يتيح إنشاء رابط لصفحة في التطبيق يؤدي إلى وجهة يُحتمل أن تكون محمية. (Ie30e6)
تعديل التبعية
- تعتمد Navigation Safe Args الآن على Kotlin 1.9.24 بدلاً من Kotlin 2.X، ما يضمن عدم إجبار المطوّرين على التحديث. (a4129a)
- يعتمد الآن رمز التنقّل "إنشاء" على رمز إنشاء
1.7.2
.
الإصدار 2.8.0
4 أيلول (سبتمبر) 2024
تم إصدار androidx.navigation:navigation-*:2.8.0
. يتضمّن الإصدار 2.8.0 عمليات الربط هذه.
التغييرات المهمة منذ الإصدار 2.7.0
أمان أنواع لغة Kotlin DSL للتنقّل
- توفّر واجهة برمجة التطبيقات Navigation الآن أمانًا في النوع لـ 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)
}
}
اطّلِع على مقالتنا المنشورة في مدوّنة "التنقّل والإنشاء يلتقيان بأمان النوع" للحصول على مزيد من المعلومات.
التنقّل في ميزة "الكتابة التنبؤية" للرجوع
- توفّر ميزة "إنشاء التنقّل" الآن إمكانية الرجوع التوقّعي داخل التطبيق من خلال واجهات برمجة تطبيقات
SeekableTransitionState
الجديدة من compose-animation. يتيح لك ذلك استخدام إيماءة الرجوع للاطّلاع على الوجهة السابقة باستخدام الانتقال المخصّص قبل اتخاذ قرار بإتمام المعاملة من خلال الإيماءة المكتملة أو إلغائها.
العنصر القابل للتجميع لجزء التنقّل
- تمت إضافة عنصر
navigation-fragment-compose
جديد يتضمّن بديلاًComposableNavHostFragment
لعنصرNavHostFragment
يتيح لك إضافة وجهات قابلة للتجميع إلى ملفات 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" />
تغييرات أخرى
- يعتمد الآن Compose Navigation على الإصدار 1.7.0 من Compose.
- يوفّر Navigation الآن فئة
CollectionNavType<T>
جديدة، وهي فئة فرعية منNavType<T>
للوسيطات المستندة إلى المجموعة، مثل القوائم والصفائف والخرائط. أصبحت جميع صفائفNavType
التلقائية (IntArrayType
وLongArrayType
وFloatArrayType
وBoolArrayType
وStringArrayType
) الآن ترث من هذه الفئة الجديدة. - يتوفّر في
NavType
الآن دعم مضمّن لقوائم Int وString وBoolean وFloat وLong.
الإصدار 2.8.0-rc01
21 آب (أغسطس) 2024
تم إصدار androidx.navigation:navigation-*:2.8.0-rc01
. يتضمّن الإصدار 2.8.0-rc01 عمليات الربط هذه.
إصلاح الأخطاء
- إصلاح تعطُّل التنقّل عند تمرير فئات Enum ذات المستوى الأعلى كوسيطات آمنة من حيث النوع (I0ba76، b/358137294)
- يعمل الإصدار 2.8 من Navigation الآن بشكل صحيح مع حزمة SDK 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 المُدمجة في فئة أخرى بشكل تلقائي. ستتوفّر فئات Enumerations من المستوى الأعلى في الإصدار التالي.
إصلاح الأخطاء
- عند التنقّل إلى وجهات مكرّرة أو مشترَكة، سيمنح التنقّل الأولوية للانتقال إلى أقرب وجهة مطابقة من الموقع الجغرافي الحالي في الرسم البياني. (Ic89a4، b/352006850)
- تمت إضافة
NavType.EnumType
جديدة إلى التنقّل في safe args. وهذا يعني أنّ أنواعEnum
لم تعُد تتطلّبNavType
مخصّصة. يُرجى العلم أنّSerialName
فيEnum
يجب أن يكون الاسم المؤهَّل بالكامل التلقائي. (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 هذه المراجعات.
إصلاح الأخطاء
- تتيح ميزة التنقّل الآن التنقّل باستخدام سلاسل فارغة في وسيطات المسار. (Ic5dbd، b/339481310)
- تحسين رسالة الخطأ لأدوات التحويل إلى سلسلة رقمية المخصّصة التي تمّ الإعلان عنها مباشرةً في حقول الفئة من خلال
@Serializable(with =...)
لتوضيح أنّ هذه الميزة غير متوافقة حاليًا (I052b0، b/341319151) SavedStateHandleFactory
يمكن الآن استخدام واجهة برمجة التطبيقات للاختبار في الاختبارات غير المخصّصة لنظام التشغيل Android، ولكن سيتطلب ذلك من Robolectric إتاحة تحليل الوسيطات باستخدام الحِزم. (I76cdc، b/340966212)- تم إصلاح الأعطال الناتجة عن استعادة الحالة عند استئناف التطبيق بعد إنهاء العملية باستخدام ميزة "التنقّل الآمن حسب النوع" في أداة Compose. (Ia8f38، b/341801005)
- تم إصلاح مشكلة في ميزة "التنقّل والإنشاء" حيث بعد إلغاء إيماءة "الرجوع التوقّعي"، لا يعود
NavBackStackEntry
الذي يعود إليه المستخدم إلى حالةRESUMED
في دورة الحياة. ويضمن ذلك أيضًا ظهور الوجهة المعروضة مرة أخرى بشكل صحيح بدلاً من ظهورها بشكل مفاجئ بعد التمرير سريعًا. (I97a0c، b/346608857) - عند استخدام ميزة "الرجوع التوقّعي" مع ميزة "إنشاء التنقّل"، ستحصل الوجهة التي يتم عرضها بشكل مفاجئ الآن على الترتيب الصحيح للمستوى 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
للتأكيد على أنّه يجب ترميز النتائج النهائية باستخدام عناوين URL. (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 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 meet Type Safety للحصول على مزيد من المعلومات.
الميزات الجديدة
- يقدّم العنصر
navigation-fragment-compose
الآن تركيبةLocalFragment
محلية لطرق التركيب ضمنComposableFragment
. (If35e5) - يتوفّر في
NavType
الآن دعم مضمّن لقوائم Int وString وBoolean وFloat وLong. (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. لم تكتمل واجهات برمجة التطبيقات هذه، وتم وضع التعليق التوضيحي
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
كوسيطة المحتوى التلقائية. ويؤدي ذلك إلى جعلها متوافقة مع الإعداد التلقائي لرمزAnimatedContent
وإصلاح بعض حالات تغيير مقياس غير متوقّع من انتقال المركز. (I09e72، b/330111602) - عند استخدام إيماءة الرجوع التوقّعية أثناء استخدام ميزة "إنشاء التنقّل"، سيُكمل الرمز
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
، مطابقة المسارات التي تم ملؤها بوسيطات صفيفNavTypes
بشكلٍ صحيح. (Iea805، b/327229511)
الإصدار 2.8.0-alpha04
6 مارس 2024
تم إصدار androidx.navigation:navigation-*:2.8.0-alpha04
. يتضمّن الإصدار 2.8.0-alpha04 عمليات الربط هذه.
الميزات الجديدة
- يمكنك الآن تحديد
SizeTranform
للانتقالات في ميزة "إنشاء التنقّل" من خلال تحديدها كجزء من عملية الإعداد لدوالّcomposable
و/أوnavigation
. (I91062، b/296912651)
إصلاح الأخطاء
- تم إصلاح مشكلة عدم عرض الرمز
NavHost
في ميزة "التنقّل في وضع الإنشاء" بشكل صحيح لعملية النقل عند استخدام رمز الرجوع في النظام بدون إيماءة. (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)
إصلاح الأخطاء
- تم إصلاح مشكلة في التنقّل أدّت إلى
NavGraph
DESTROYED
نماذج العرض مبكرًا جدًا لأنّViewModel
الإدخال المرتبط لم يكن جزءًا من الحالة المحفوظة. (Ib6bb7، b/317581849)
تعديل التبعية
- يعتمد الآن Compose Navigation على Compose 1.7.0-alpha03.
الإصدار 2.8.0-alpha02
7 شباط (فبراير) 2024
تم إصدار androidx.navigation:navigation-*:2.8.0-alpha02
. يحتوي الإصدار 2.8.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- توفّر ميزة "إنشاء التنقّل" الآن إمكانية الرجوع التوقّعي داخل التطبيق من خلال واجهات برمجة تطبيقات
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)
تعديل التبعية
- يعتمد الآن Compose Navigation على 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 على هذه المراجعات.
إصلاح الأخطاء
- تم نقلها من التنقّل
2.8.0-alpha01
: تم إصلاح تسرُّبBackStackState
الذي كان يؤدي إلى حفظ حالات متعددة عند إجراء عدة طلباتsaveState()
علىNavBackStackEntry
واحد، ولكن لا يمكن استعادة سوى الحالة الأولى المحفوظة. (I598b0، b/309559751) - تم نقلها من التنقّل
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
غير صحيح. (Idf242، b/298164648) - تم إصلاح مشكلة تسمح لـ
NavController
بمعالجة الرابط المؤدّي إلى الصفحة نفسها أكثر من مرة إذا كانت الحزمة الخلفية فارغة تمامًا قبل تغيير الإعدادات أو طلبsetGraph
فقط عندما يكون الرمز البرمجي الوافد قد تم ضبطه علىFLAG_ACTIVITY_NEW_TASK
. (I73c7f)
تعديلات على التبعيات
- يعتمد التنقّل باستخدام "المقاطع" الآن على الإصدار 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
بشكلٍ صحيح لمطابقة المقتطف المعروض عند الضغط على زر الرجوع في النظام. (Id0d6c، b/289877514) - ستنتقل الآن دورة حياة
DialogFragment
بشكل صحيح إلى الحالةRESUMED
عند إغلاق مربّع الحوار أعلاه. (I88f0d، b/301811387)
الإصدار 2.7.3
الإصدار 2.7.3
20 أيلول (سبتمبر) 2023
تم إصدار androidx.navigation:navigation-*:2.7.3
. يحتوي الإصدار 2.7.3 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة في التنقّل باستخدام المقتطفات أدّت إلى أن تحتوي قائمة
visibleEntries
على إدخالات غير صحيحة. (I5caa9، b/288520638) - تم إصلاح مشكلة كانت تمنع وصول وجهة النافذة العائمة (أي
Dialogs
وBottomsheets
وما إلى ذلك) إلى طلب إعادة الاتصالRESUMED
Lifecycle. (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) - تم إصلاح مشكلة عند عرض مربّعات حوار متعدّدة في ميزة "التنقّل والإنشاء" في الوقت نفسه، حيث تكون مربّعات الحوار التي تم حجبها جزئيًا (مثلاً، ليس مربّع الحوار الأهم) في حالة
CREATED
Lifecycle بدلاً من الحالةSTARTED
. (aosp/2728520، b/289257213) - تم حلّ مشكلة عند عرض مربّعات حوار متعدّدة في ميزة "التنقّل والإنشاء" في الوقت نفسه، حيث يؤدي إغلاق مربّع الحوار العلوي إلى تعليق مربّع الحوار العلوي الجديد في حالة
STARTED
Lifecycle بدلاً من الانتقال بشكل صحيح إلىRESUMED
. (aosp/2629401، b/286371387) - لم تعُد Navigation Safe Args تنشئ مهمتها بشكلٍ شغوف إذا لم يتم تنفيذها فعليًا. (I0e385، b/260322841)
تعديل التبعية
- تعتمد ميزة "التنقّل في الرسائل" الآن على الإصدار 1.5.1 من ميزة "إنشاء الرسائل".
الإصدار 2.7.1
الإصدار 2.7.1
23 آب (أغسطس) 2023
تم إصدار androidx.navigation:navigation-*:2.7.1
. يحتوي الإصدار 2.7.1 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشاكل في ميزة "التنقّل باستخدام ميزة "الإنشاء"، حيث كان من الممكن ظهور خطأ عند محاولة الوصول إلى
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
الصور المتحركة من "مساعد Google"
والآن بعد أن أصبح الإصدار AnimatedContent
ثابتًا، تمكّنا من نقل الرمز من الحركة المصاحبة لتنقّل العناصر مرة أخرى إلى ميزة "إنشاء التنقّل" نفسها.
وهذا يعني أنّ جميع الإعدادات المتاحة لضبط الانتقالات المخصّصة في AnimatedNavHost
متاحة مباشرةً في NavHost
.
لن يتم إجراء أي تغييرات إضافية على "الرسوم المتحركة للتنقّل في المحتوى" في "مساعد التنقّل"، وسنوقف استخدامه رسميًا قريبًا، إلى جانب إرشادات حول كيفية نقل البيانات مرة أخرى إلى "أداة إنشاء التنقّل" نفسها، ولكن سيكون ذلك عكس دليل نقل البيانات بدون الحاجة إلى إجراء تغييرات أخرى على واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار تجريبي من "مساعد التنقّل" (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- يتداخل NavHost في Navigation Compose الآن بشكلٍ صحيح مع طلبات إعادة الاتصال بالنظام حتى بعد إيقاف النشاط واستئنافه. (Icb6de، b/279118447)
تعديلات على التبعيات
- يعتمد التنقّل الآن على رمز الإنشاء
1.5.0
من1.1.0
.
الإصدار 2.7.0-rc01
26 تموز (يوليو) 2023
تم إصدار androidx.navigation:navigation-*:2.7.0-rc01
. يحتوي الإصدار 2.7.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى بقاء دالتَي
EnterTransition
وExitTransition
اللتين تم إنشاؤهما كجزء منNavHost
في الذاكرة حتى بعد إزالةNavHost
من التركيب. (I893d0)
المشاكل المعروفة
- هناك مشكلة في الإصدار 2.6.x من Navigation، وهي أنّه عند التنقّل باستخدام popUpTo، من الممكن أن يؤدي ذلك إلى حدوث
IllegalArgumentException
. من الممكن تجنُّب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على غرار النصيحة المقترَحة هنا. (b/287133013)
الإصدار 2.7.0-beta02
28 حزيران (يونيو) 2023
تم إصدار androidx.navigation:navigation-*:2.7.0-beta02
. يحتوي الإصدار 2.7.0-beta02 على هذه المراجعات.
إصلاح الأخطاء
- تتضمّن ميزة "إنشاء التنقّل" الآن الترتيب الصحيح للمستوى z للانتقالات المخصّصة التي تستخدِم التنقّل باستخدام الخيار
popUpTo
.(/Ib1c3a، b/285153947)
الإصدار 2.7.0-beta01
7 حزيران (يونيو) 2023
تم إصدار androidx.navigation:navigation-*:2.7.0-beta01
. يحتوي الإصدار 2.7.0-beta01 على هذه المراجعات.
إصلاح الأخطاء
- يتداخل
NavHost
في ميزة "إنشاء" ضمن "التنقّل" الآن بشكلٍ صحيح مع المكالمات الخلفية للنظام حتى بعدSTOPPED
وRESUMED
Activity
. (Icb6de، b/279118447)
الإصدار 2.7.0-alpha01
24 أيار (مايو) 2023
تم إصدار androidx.navigation:navigation-*:2.7.0-alpha01
. يحتوي الإصدار 2.7.0-alpha01 على هذه المراجعات.
الصور المتحركة من "مساعد Google"
والآن بعد أن أصبح الإصدار AnimatedContent
ثابتًا، تمكّنا من نقل الرمز من الحركة المصاحبة لتنقّل العناصر مرة أخرى إلى ميزة "إنشاء التنقّل" نفسها.
وهذا يعني أنّ جميع الإعدادات المتاحة لضبط الانتقالات المخصّصة في AnimatedNavHost
متاحة مباشرةً في NavHost
.
لن يتم إجراء أي تغييرات إضافية على "الرسوم المتحركة للتنقّل في المحتوى" في "مساعد التنقّل"، وسنوقف استخدامه رسميًا قريبًا، إلى جانب إرشادات حول كيفية نقل البيانات مرة أخرى إلى "أداة إنشاء التنقّل" نفسها، ولكن سيكون ذلك عكس دليل نقل البيانات بدون الحاجة إلى إجراء تغييرات أخرى على واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار تجريبي من "مساعد التنقّل" (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- من التنقّل
2.6.0-rc02
: تم إصلاح مشكلة في التنقّل في "المقاطع"، حيث كان يؤدي التنقّل باستخدامpopUpTo
وإزالة جزء من الحزمة الخلفية بدون إعادة إنشاء طريقة العرض إلى إيقاف عمل النظام. (Ieb8d4، b/281726455)
تعديلات على التبعيات
- يعتمد التنقّل الآن على ميزة "إنشاء"
1.5.0-beta01
.
الإصدار 2.6.0
الإصدار 2.6.0
7 حزيران (يونيو) 2023
تم إصدار androidx.navigation:navigation-*:2.6.0
. يحتوي الإصدار 2.6.0 على هذه المراجعات.
تغييرات مهمة على ميزة "التنقّل" منذ الإصدار 2.5.0
- إنّ
arguments
فيNavBackStackEntry
وarguments
التي تم تمريرها إلىOnDestinationChangedListener
هما الآن نسخة فقط من الوسيطات الثابتة التي تم إنشاؤها عند الانتقال إلى الوجهة. وهذا يعني أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلىarguments
أو إلى نُسخ أخرى منOnDestinationChangedListener
. - تتيح
NavDeepLink
الآن القيم التلقائية للصفائف، ما يسمح بتوفير مَعلمات طلب متكرّرة سيتم ربطها بنوع صفيف الوسيطة. يتضمّنNavType
أيضًا طريقة تلقائية يمكن إلغاؤها لدمج قيمتَين تم تحليلهما. - يمكن الآن للفئتين الفرعيتين المخصّصتين من
NavType
إلغاءserializeAsValue
لتسلسل قيمة إلى سلسلة، ما يسمح بتضمين كل من التسلسل وفك التسلسل (من خلالparseValue
) بالكامل في فئةNavType
. تلغيStringType
الآن هذه الطريقة للاتصال بـUri.encode
علىString
المحدّد.
تغييرات مهمة على ميزة "التنقّل والإنشاء" منذ الإصدار 2.5.0
- عند معاينة عنصر قابل للتجميع باستخدام
NavHost
، سيعرض الآنstartDestination
في NavGraph تلقائيًا. - تتيح الآن جميع الوظائف
NavController.popBackStack(route)
وNavController.getBackStackEntry(route)
وNavController.clearBackStack(route)
استخدام مسارات تحتوي على وسيطات مملوءة جزئيًا أو كليًا. يُرجى العِلم أنّ الوسائط يجب أن تتطابق تمامًا مع وسيطات الإدخال. - ستؤدي محاولة إنشاء
NavDeepLink
فارغ باستخدامnavDeepLink
Kotlin DSL إلى ظهور تحذير lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى uri و/أو إجراء و/أو mimetype ليكون صالحًا.
تغييرات مهمة على ميزة "التنقّل باستخدام الأجزاء" منذ الإصدار 2.5.0
- لم تعُد
NavHostFragment
تعترض زر الرجوع في النظام نفسه. يتيح ذلك لـFragmentManager
الأساسية معالجة عمليات استرداد النظام. يتيح ذلك لـ الوحدة1.7.0-alpha01
والإصدارات الأحدث توفير رسم متحرك للرجوع التوقّعي داخل التطبيق على أجهزة Android U. - عند استخدام ميزة "التنقّل باستخدام الأجزاء"، سيؤدي الآن إجراء
FragmentTransaction
يدويًا يضيف جزءًا إلى الحزمة الخلفية لFragmentManager
إلى ظهورIllegalArgumentException
. يجب إضافة الأجزاء دائمًا من خلال واجهة برمجة التطبيقاتnavigate()
. - عند استخدام السلسلة المحدّدة
${applicationId}
كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط ضمن ملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بقيمةpackageName
للسياق عند التضخيم. - يستخدم
FragmentNavigator
الآن واجهات برمجة التطبيقات الخاصة بالانتقال عند التنقّل فيNavBackStackEntries
وعرضها. وهذا يعني أنّNavBackStackEntry
Lifecycle
سينتظر الآن اكتمال التأثيرات الخاصة للدخول إلى المقطع والخروج منه قبل نقلLifecycle.State
النهائي. - يستخدم
DialogFragmentNavigator
الآن واجهات برمجة التطبيقات الخاصة بالانتقال عند التنقّل فيNavBackStackEntries
وعرضها. وهذا يعني أنّNavBackStackEntry
Lifecycle
سينتظر الآن نقلDialogFragment
Lifecycle
إلىDESTROYED
قبل الانتقال إلىDESTROYED
نفسها. - يتيح لك
NavHostFragment
الآن استردادNavController
فور إرفاقNavHostFragment
بـFragmentManager
، بدلاً من بعدonCreate()
فقط. - يعتمد توفّر ميزة "التنقّل" لوحدات الميزات الديناميكية الآن على مكتبة "عرض الميزات في Play" الدقيقة.
- تعتمد Navigation Safe Args الآن على الإصدار 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 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة في التنقّل باستخدام الأجزاء، حيث كانت إزالة جزء من خلال التنقّل باستخدام
popUpTo
في دالة الاستدعاءonResume()
لدورة الحياة تؤدي إلى حدوثIllegalStateException
. (I21884، b/279644470)
الإصدار 2.6.0-beta01
19 نيسان (أبريل) 2023
تم إصدار androidx.navigation:navigation-*:2.6.0-beta01
. يحتوي الإصدار 2.6.0-beta01 على هذه المراجعات.
الميزات الجديدة
- يوفّر
NavBackStackEntry
الآن عملية تنفيذtoString
مخصّصة. (Iff00b)
إصلاح الأخطاء
- عند استخدام ميزة "التنقّل باستخدام الأجزاء"، ستؤدي محاولة إجراء
FragmentTransaction
يدويًا يضيف جزءًا إلى الحزمة الخلفية لFragmentManager
إلى ظهورIllegalArgumentException
. يجب إضافة الأجزاء دائمًا من خلال واجهة برمجة التطبيقاتnavigate()
. (I6d38e) - عندما يكون هناك
navigate
يضيف إدخالًا وpopBackStack
يزيله في الإطار نفسه، سيعود الإدخال الناتج في أعلى الحزمة الخلفية بشكلٍ ثابت إلى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
بدون حفظ الحالة في ميزة "الكتابة أثناء التنقّل". ويؤدي ذلك أيضًا إلى إصلاح خطأ في الانتقال إلى الوجهات المرتبطة بعمليات إنشاء الرسم البياني الجذر و"تسلسل الاستدعاء للإجراءات السابقة" غير الصحيح. (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
إلى الحالة "مُستئنف" عند استخدامAnimation
. (Ib3589، b/269646882)
الإصدار 2.6.0-alpha06
22 شباط (فبراير) 2023
تم إصدار androidx.navigation:navigation-*:2.6.0-alpha06
. يحتوي الإصدار 2.6.0-alpha06 على هذه المراجعات.
الميزات الجديدة
- عند معاينة عنصر قابل للتجميع باستخدام
NavHost
، سيعرض الآنstartDestination
في NavGraph تلقائيًا. (I2b89f)
تغييرات واجهة برمجة التطبيقات
- تم الآن إضافة تعليق توضيحي إلى جميع عمليات تحميل
NavController
navigate
باستخدام@MainThread
لضمان استدعائها في سلسلة المحادثات الرئيسية. (I2c0b0، b/263427111)
إصلاح الأخطاء
- تم إصلاح مشكلة تعطُّل عند محاولة التنقّل أثناء استخدام ميزة "التنقّل الديناميكي للأجزاء". (I3ee29، b/268360479)
- تم إصلاح الخلل الذي كان يؤدي إلى عدم تعديل الشريط السفلي لعرض العنصر المحدَّد الصحيح عند الانتقال إلى جزء آخر من خلال زر الرجوع في النظام (If559f، b/269044426)
المشاكل المعروفة
- عند استخدام ميزة "التنقّل باستخدام الأجزاء"، يتعذّر على رحلة المستخدِم في
NavBackStackEntry
الوصول إلىRESUMED
عند استخدام واجهات برمجة تطبيقاتAnimation
. (b/269646882) - عند استخدام ميزة "التنقّل باستخدام الأجزاء" والتنقّل باستخدام
BottomNavigation
، إذا حاولت استعادة حزمة تسجيلات سابقة تتضمّن إدخالات متعدّدة، لن يتم تعديلBottomMenuItem
بشكل صحيح. (b/270447657) - عند استخدام ميزة "التنقّل باستخدام الأجزاء"، لا يحصل العنصر
NavBackStackEntry
Lifecycle
علىDESTROYED
بعد استعادة الحالة عندما يكون الجزءDESTROYED
. (b/270610768)
الإصدار 2.6.0-alpha05
8 شباط (فبراير) 2023
تم إصدار androidx.navigation:navigation-*:2.6.0-alpha05
. يحتوي الإصدار 2.6.0-alpha05 على هذه المراجعات.
الميزات الجديدة
- تتيح الآن
NavController.popBackStack(route)
وNavController.getBackStackEntry(route)
وNavController.clearBackStack(route)
جميع المسارات التي تحتوي على وسيطات مملوءة جزئيًا أو كليًا. يُرجى العِلم أنّ الوسائط يجب أن تتطابق تمامًا مع وسيطات الإدخال. (Iebd28 وIc678c وI3b37b وb/257514373) - يستخدم
FragmentNavigator
الآن واجهات برمجة التطبيقات الخاصة بالانتقال عند التنقّل فيNavBackStackEntries
وعرضها. وهذا يعني أنّ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)
إصلاح الأخطاء
- لن يتم الآن تنفيذ حالة المُستكشف عند استخدام واجهات برمجة تطبيقات
push/popWithTransition
، وسيتم التعامل مع الإدخال. (Iadbfa، b/261213893) - عند استخدام
launchSingleTop
معNavGraph
متداخل، لن تتم إضافة جميع الوجهات بدءًا من الوجهة الأصلية إلىstartDestination
بشكل صحيح إلا إلى أعلى الحزمة الخلفية. (Id4bea، b/253256629) - ستستبدل ميزة التنقّل الآن مثيل
DialogFragment
بشكلٍ صحيح عند الانتقال إلى الوجهة نفسها مع ضبط العلامةlaunchSingleTop
على true. (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)
- تعتمد Navigation Safe Args الآن على الإصدار 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
: تم إصلاح مشكلة عدم نسيان حالة ميزة "الإنشاء" المحفوظة (مثل استخداماتrememberSaveable
) وإزالتها عند إزالة وجهة من الحزمة الخلفية. (I64949)
تعديلات على التبعيات
- يعتمد التنقّل الآن على العنصر
1.5.4
. (Icd424)
الإصدار 2.6.0-alpha02
5 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.navigation:navigation-*:2.6.0-alpha02
. يحتوي الإصدار 2.6.0-alpha02 على هذه المراجعات.
التغييرات في السلوك
- عند تمرير رقم تعريف رسم بياني للتنقّل إلى
AppBarConfiguration
(مثلاً من خلالMenu
)، لا يأخذNavigationUI
الآن في الاعتبار سوى وجهة البدء لرسم بياني التنقّل هذا كوجهة من المستوى الأعلى، بدلاً من وضع علامة بشكل غير صحيح على كل وجهة ضمن الرسم البياني كوجهة من المستوى الأعلى. لم يتغيّر سلوك تمرير معرّف وجهة فردية. تتوفّر هذه الوظيفة نفسها في التعليمات البرمجية الخاصة بك من خلال الدالةisTopLevelDestination
الجديدة فيAppBarConfiguration
. (Ie936e، b/238496771)
إصلاح الأخطاء
- يعتمد مكوّن
navigation:navigation-fragment
الآن على إصدار Fragment1.5.2
. (I00ba4) - لن يتم تعديل عنصر القائمة المحدّد بعد الآن عند الانتقال إلى وجهة
FloatingWindow
، مثل مربّع حوار. (I4cde8، b/240308330)
الإصدار 2.6.0-alpha01
7 أيلول (سبتمبر) 2022
تم إصدار androidx.navigation:navigation-*:2.6.0-alpha01
. يحتوي الإصدار 2.6.0-alpha01 على هذه المراجعات.
الميزات الجديدة
- إنّ عمليات دمج
setupWithNavController
فيNavigationUI
للعمل مع شريط التطبيقات العلوي ستحلّل الآن قيمR.string
لوسيطاتReferenceType
المتوفّرة فيandroid:label
إلى قيم سلاسل بدلاً من إخراج عدد الموارد الذي تم إنشاؤه تلقائيًا. (I5f803، b/167959935) - تتيح
NavDeepLink
الآن القيم التلقائية للصفائف، ما يسمح بتوفير مَعلمات طلب متكرّرة سيتم ربطها بنوع صفيف الوسيطة. يتضمّنNavType
أيضًا طريقة تلقائية يمكن إلغاؤها لدمج قيمتَين تم تحليلهما. (Id68c3، b/209977108) - عند استخدام السلسلة المحدّدة
${applicationId}
كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط ضمن ملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بقيمةpackageName
للسياق عند التضخيم. (Iaabde، b/234223561) - ستؤدي محاولة إنشاء
NavDeepLink
فارغ باستخدامnavDeepLink
Kotlin DSL إلى ظهور تحذير lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى uri و/أو إجراء و/أو mimetype ليكون صالحًا. (I08d2f، b/154038883)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة دالة إضافة
NavDestination
جديدة لتحليل التصنيفات الديناميكية باستخدام وسيطات في شكلandroid:label="{arg}"
إلى سلسلة. تتيح وسيطاتReferenceType
من خلال تحليل قيمR.string
إلى قيم سلسلة. (I07d89، b/236269380)
التغييرات في السلوك
- إنّ
arguments
في NavBackStackEntry وarguments
التي تم تمريرها إلىOnDestinationChangedListener
هما الآن نسخة فقط من الوسيطات الثابتة التي تم إنشاؤها عند الانتقال إلى الوجهة. وهذا يعني أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلىarguments
أو إلى نُسخ أخرى منOnDestinationChangedListener
. (I676f5)
إصلاح الأخطاء
- من التنقّل
2.5.2
: يحاول التنقّل الديناميكي الآن تثبيت وجهات الأنشطة بشكل صحيح من الوحدات الأخرى قبل الانتقال إليها. (Ia2c16، b/240292838) - من التنقّل
2.5.2
: سيحلّ التنقّل الآن محلّ مثيل المقتطف بشكلٍ صحيح عند الانتقال إلى الوجهة نفسها وضبط العلامةlaunchSingleTop
على true. (I5a2f1، b/237374580) - من التنقّل
2.5.2
: تم إصلاح الخطأIllegalStateException
الذي نتج عن الانتقال إلى رسم بياني مُدمَج مزدوج يتشارك عنصرًا رئيسيًا مع وجهة بداية جديدة ظهرت فجأة. (I9f7cb، b/243778589)
الإصدار 2.5
الإصدار 2.5.3
24 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.navigation:navigation-*:2.5.3
. يحتوي الإصدار 2.5.3 على هذه المراجعات.
إصلاح الأخطاء
- لن يؤدي
NavHost
بعد الآن إلى حدوثNoSuchElementException
عندما لا تتوفّر وجهة لإنشاءCrossfade
. سيتم الآن تخطّي التركيب. (Ieb46e، b/253299416) - تم إصلاح مشكلة عدم نسيان حالة "الإنشاء" المحفوظة (مثل استخدامات
rememberSaveable
) وإزالتها عند إزالة وجهة من الحزمة الخلفية. (I64949)
الإصدار 2.5.2
7 أيلول (سبتمبر) 2022
تم إصدار androidx.navigation:navigation-*:2.5.2
. يحتوي الإصدار 2.5.2 على هذه المراجعات.
إصلاح الأخطاء
- تحاول ميزة "التنقّل الديناميكي" الآن تثبيت وجهات الأنشطة من الوحدات الأخرى بشكلٍ صحيح قبل الانتقال إليها. (Ia2c16، b/240292838)
- سيحلّ التنقّل الآن محلّ مثيل المقتطف بشكلٍ صحيح عند الانتقال إلى الوجهة نفسها وضبط العلامة
launchSingleTop
على true. (I5a2f1، b/237374580) - تم إصلاح
IllegalStateException
الناتجة عن الانتقال إلى رسم بياني مُدمَج مزدوج يتشارك عنصرًا رئيسيًا مع وجهة بداية جديدة ظهرت فجأة. (I9f7cb، b/243778589)
تعديل التبعية
- يعتمد التنقّل
2.5.2
الآن على القطعة1.5.2
. (aosp/2178734)
الإصدار 2.5.1
27 تموز (يوليو) 2022
تم إصدار androidx.navigation:navigation-*:2.5.1
. يحتوي الإصدار 2.5.1 على هذه المراجعات.
إصلاح الأخطاء
- لن تؤدي
Navigation Safe Args
بعد الآن إلى ظهور تحذيرات بشأن الإيقاف النهائي في الفئات التي تم إنشاؤها عند استخدام أنواع مَعلمات مخصّصة يتم حفظها فيBundle
. (Id86ed، b/237725966)
تعديلات على التبعيات
- تعتمد مكتبة Navigation الآن على Lifecycle
2.5.1
. (Ib4451) - تعتمد مكتبة التنقّل الآن على النشاط
1.5.1
. (I3efe8) - تعتمد مكتبة التنقّل الآن على الوحدة
1.5.1
. (I56177)
الإصدار 2.5.0
29 حزيران (يونيو) 2022
تم إصدار androidx.navigation:navigation-*:2.5.0
. يحتوي الإصدار 2.5.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.4.0
- دمج CreationExtras: يمكن الآن لـ
Navigation
توفيرViewModelProvider.Factory
بدون حالة من خلالCreationExtras
في2.5.0
دورة الإصدار.
Navigation SafeArgs
- أجرت شركة
Navigation Safe Args
ترقية للاعتماديةAndroid Gradle Plugin
لتصبح تعتمد على7.0.4
، ما أدى إلى إيقاف التوافق مع إصدارات AGP قبل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
. (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)
تعديلات على التبعيات
- يعتمد التنقّل الآن على رحلة المستخدِم
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، من المفترض أن يتم الآن عرضNavHost
الداخلي بشكل متحرك بشكل صحيح. (I4ba2b، b/225394514) - يستند الآن
visibleEntries
StateFlow
المقدَّم منNavController
إلى الحد الأقصى لحالة "مرحلة النشاط" بدلاً من حالة "مرحلة النشاط" الحالية. وهذا يعني أنّه حتى إذا انخفضت دورة حياة المضيف لعنصرnavController
إلى ما دون "مُبدوء"، ستظل قائمة الإدخالات المرئية كما هي. (I9e2a8، b/225394514) - يتيح
SavedStateViewFactory
الآن استخدامCreationExtras
حتى إذا تم إعداده باستخدامSavedStateRegistryOwner
. في حال تقديم عناصر إضافية، يتم تجاهل الوسيطات التي تمّت تهيئتها. (I6c43b، b/224844583) - يمكن الآن لخدمة
NavDeepLink
تحليل عناوين URL باستخدام مَعلمة طلب بحث واحدة بدون قيمة. (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
الآن بشكل صحيح أحرف السطر الجديد المشفَّرة المضمّنة في مسارات/معرّفات الموارد المنتظمة للروابط لصفحات في التطبيق. (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
بشكلٍ صحيح عند استخدام ربط العناصر مع الرسوم البيانية المُدمجة. (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()
العنصر في المقتطف باستخدامIllegalStateException
. (I8a14d) - لن تُفكِّر
NavDeepLink
s ترميز args مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير args المناسبة إلى وجهتك النهائية. (I31b0a، b/210711399)
Safe Args
- تعتمد Safe Args الآن على الإصدار 7.0.4 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". وهذا يعني أنّ Navigation Safe Args لن يعود متوافقًا مع إصدارات 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 على هذه المراجعات.
إصلاح الأخطاء
- ميزة مُعاد استخدامها من التنقّل
2.5.0-alpha03
: تتيحNavDeepLinks
الآن بشكل صحيح أحرف السطر الجديد المشفَّرة المضمّنة في المسارات أو معرّفات الموارد المنتظمة للروابط لصفحات معيّنة في التطبيق. (I513d1، b/217815060) - ميزة مُعاد استخدامها من Navigation
2.5.0-alpha03
: تتيح الآن Navigation SafeArgs استخدام مساحة الاسم المحدّدة فيbuild.gradle
بدلاً من الحزمة في AndroidManifest. (I659ef، b/217414933) - تم نقل هذه الميزة من التنقّل
2.5.0-alpha04
: لن يتعطّلNavigation Safe Args
بعد الآن عند استخدام مساحات الاسماء بدون توفّرAndroidManifest.xml
. (I17ccf، b/227229815) - تم نقل هذه الميزة من التنقّل
2.5.0-alpha04
: أصبحت السلسلة الفارغة تُعتبر الآن وسيطات صالحة في روابط الصفحات الداخلية. (I70a0d، b/217399862)
الإصدار 2.4.1
الإصدار 2.4.1
9 شباط (فبراير) 2022
تم إصدار androidx.navigation:navigation-*:2.4.1
. يحتوي الإصدار 2.4.1 على هذه المراجعات.
إصلاح الأخطاء
- سيضبط
NavHostFragment
الآنOnBackPressedDispatcher
بشكلٍ صحيح عند استخدام ربط العرض مع الرسوم البيانية المُدمجة. (Ifbb51، b/214577959) - عند إنشاء رابط لصفحة في التطبيق من خلال
NavGraph
مُدمَجة متعددة، ستتضمّن حزمة الرجوع الآن بشكلٍ صحيح وجهات البدء الوسيطة. (I504c0، b/214383060) - تم نقلها من التنقّل
2.5.0-alpha01
: تم إصلاح مشكلة تعذُّر الوصول إلى ViewModel تم إنشاؤه من خلالby navGraphViewModels()
منonCreate()
الجزء باستخدامIllegalStateException
. (I8a14d) - تم نقلها من التنقّل
2.5.0-alpha01
: لم يعُدNavDeepLink
يفك ترميز الوسيطات مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير الوسيطات التي تم فك ترميزها بشكل صحيح إلى وجهتك النهائية. (I31b0a، b/210711399) - تم نقلها من التنقّل
2.5.0-alpha01
: تعتمد Safe Args الآن على الإصدار 7.0.4 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". وهذا يعني أنّ Navigation Safe Args لن يعود متوافقًا مع إصدارات 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
- تمت إعادة كتابة جميع عناصر التنقّل بلغة Kotlin. وقد أدّى ذلك إلى تحسين إمكانية تحديد قيمة صفرية للفئات التي تستخدم أنواعًا عامة (مثل الفئات الفرعية
NavType
). تم نقل جميع دوالّ إضافة Kotlin التي كانت جزءًا من عناصر-ktx
إلى عناصرها الرئيسية ذات الصلة. سيستمر نشر عناصر-ktx
، ولكنّها ستكون فارغة تمامًا. - يحتوي العنصر
navigation-fragment
الآن على تنفيذ مُعدّ مسبقًا لتنسيق نوافذ مزدوجة من خلالAbstractListDetailFragment
الجديد. يستخدم هذا المقتطفSlidingPaneLayout
لإدارة لوحة قائمة (توفّرها فئة فرعية) ولوحة تفاصيل تستخدمNavHostFragment
لتنفيذها، كما هو موضّح في مثال التنفيذ. - توفّر طريقة
currentBackStackEntryAsFlow()
فيNavController
Flow
يتمّ بثّه عند تغيُّرNavBackStackEntry
الحالي. يمكن استخدام هذه العملية كبديل لإدارةOnDestinationChangedListener
يدويًا. - يتيح NavController الآن إمكانية استرداد قائمة بجميع نُسخ
NavBackStackEntry
المرئية كStateFlow
من خلال السمة التجريبيةvisibleEntries
. - أصبح من الممكن الآن توسيع فئة
NavType
لإنشاء أنواع NavTypes مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء رسم بياني للتنقّل آليًا، مثل استخدام Navigation Graph Kotlin DSL. يوفّر Navigation الآن واجهات برمجة التطبيقات
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
كانت الإصدارات السابقة من ميزة "التنقّل" تعتمد على أن يكون لكل وجهة معرّف عدد صحيح ثابت يحدّدها بشكل فريد عن الوجهات الشقيقة ويسمح لك بالانتقال 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
عملية دمج بين مكوّن التنقّل وJetpack Compose. وتستخدم دوالّ @Composable
كوجهات في تطبيقك.
يوفّر هذا الإصدار ما يلي:
NavHost
قابلة للتجميع تتيح لك إنشاء رسم بياني للتنقّل من خلال لغة Kotlin DSL، باستخدام وجهتَيcomposable
وdialog
، بالإضافة إلى إمكانية استخدام أدوات التنقّل الاختيارية، مثل تلك الواردة في مادة التنقّل المصاحب.- يجب أن تتوفّر إمكانية استخدام الانتقالات البينية بين الوجهات. يمكن استخدام الرسوم المتحركة للتنقّل المصاحب للتحكّم في انتقالات الدخول والخروج باستخدام واجهات برمجة التطبيقات التجريبية لميزة "الإنشاء".
- تحديد نطاق
Lifecycle
لكل وجهة قابلة للتجميع لا تصل كل وجهة إلى الحالةRESUMED
إلا عند انتهاء أي انتقالات دخول، وتنخفض على الفور إلى الحالةSTARTED
عند بدء أي انتقالات خروج، ما يتيح لك تجنُّب جميع مشاكلIllegalStateException
واللمس المتعدّد من خلال بدء طلبnavigate
فقط عندما تكون الحالةLifecycle
هيRESUMED
. - تحديد نطاق
ViewModel
(من خلال واجهة برمجة التطبيقاتviewModel()
في Lifecycle ViewModel Compose2.4.0
أوhiltViewModel()
في Hilt Navigation Compose1.0.0
على مستوى الوجهة، ما يوفر نطاقًا لا يتأثر بتغييرات الإعدادات ويبقى في الحزمة الخلفية (عندما يتم التخلص من المحتوى القابل للتجميع بطريقة أخرى) وإشارة في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()
}
}
}
اطّلِع على دليل التنقّل في ميزة "إنشاء" للحصول على مزيد من المعلومات.
تجميعات خلفية متعددة
يتحمّل NavController مسؤولية إدارة الحزمة الخلفية للوجهات، ويضيف الوجهات إلى الحزمة الخلفية عند navigate()
إليها ويزيلها عند استدعاء popBackStack()
أو تفعيل زر الرجوع في النظام. تم توسيع نطاق فئة NavOptions
الحالية والدمج في عناصر <action>
في ملف XML الخاص بالرسم البياني للتنقّل لإتاحة حفظ الحزمة الخلفية واستعادتها.
كجزء من هذا التغيير، أصبحت طُرق NavigationUI
في onNavDestinationSelected()
وBottomNavigationView.setupWithNavController()
وNavigationView.setupWithNavController()
تحفظ حالة الوجهات التي تم عرضها بشكل مفاجئ وتعيدها تلقائيًا، ما يتيح استخدام مجموعات متعدّدة من "الأداة للرجوع" بدون إجراء أي تغييرات على الرمز البرمجي. عند استخدام ميزة التنقّل باستخدام "المقاطع"، هذه هي الطريقة المُقترَحة للدمج مع تسلسلات متعدّدة للرجوع.
يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:
في ملف XML الخاص بالتنقّل، يمكن الآن للعنصر
<action>
استخدام السمتَين المنطقيتَينapp:popUpToSaveState
وapp:restoreState
لحفظ حالة أي وجهات يتم عرضها من خلالapp:popUpTo
واستعادة الحالة المرتبطة بالوجهة التي تم تمريرها على أنّهاapp:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
في
navOptions
Kotlin DSL، يمكنك إضافة السمة المنطقيةrestoreState
والسمة المنطقيةsaveState
في أداة الإنشاءpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
عند إنشاء عنصر
NavOptions
يدويًا من خلالNavOptions.Builder
، يمكنك استخدامsetRestoreState()
وتحميلsetPopUpTo()
الجديد الذي يأخذ مَعلمةsaveState
إضافية.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
يمكن أن تتضمّن الآن الطلبات الآلية إلى
popBackStack()
مَعلمةsaveState
إضافية.يمكنك استخدام الطريقة
clearBackStack()
لمحو أي حالة تم حفظها باستخدامpopBackStack()
أوpopUpToSaveState
.
في جميع الحالات، سيحفظ NavController
حالة كل NavBackStackEntry
ويستعيدها، بما في ذلك أيّ نُسخ من ViewModel
على مستوى وجهة التنقّل. تم تعديل واجهات برمجة التطبيقات Navigator
لتفعيل كل Navigator
من أجل إتاحة حفظ حالته واستعادتها.
تغييرات السلوك
- تُضيف
NavDeepLinkBuilder
الآنPendingIntent.FLAG_IMMUTABLE
إلىPendingIntent
المعروضة منcreatePendingIntent()
، ما يضمن أن تعمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف Android 12. - يعتمد التنقّل الآن على
Lifecycle
2.3.1
ويصنّف الآنsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، وهي methods التي تعدّلNavBackStackEntry
Lifecycle
، بصفتها@MainThread
، ما ينسّق التنقّل مع عملية تنفيذ2.3.0
التي تم تقديمها في Lifecycle2.3.0
. - تتحقّق الآن روابط الصفحات من توفّر جميع الوسيطات المطلوبة (تلك التي لا تحتوي على قيم تلقائية) في
Uri
. NavDeepLink
تتعامل الوسائط التي تمّ تحليلها الآن مع علامات الهاشتاغ بالطريقة نفسها التي تتعامل بها مع علامات الاستفهام كفاصل بين أجزاء المسار، ما يمنع الوسيطة من الامتداد على علامة الهاشتاغ.- عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن وسيطات بدون قيم تلقائية قبل تلك التي تحتوي على قيم تلقائية.
- عند إنشاء الوسيطات، تضع ميزة Safe Args الآن المَعلمات التي لا تحتوي على قيم تلقائية قبل المَعلمات التي تحتوي على قيم تلقائية.
- تعتمد Safe-Args الآن على الإصدار 4.2.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". وهذا يعني أنّه لن يظهر لك تحذير استخدام
applicationIdTextResource
بعد الآن.
المشاكل المعروفة
- تم إصلاحه في Navigation
2.5.0-alpha01
: سيتعذّر الوصول إلىViewModel
تم إنشاؤه من خلالby navGraphViewModels()
منonCreate()
في المقتطف باستخدامIllegalStateException
. (b/213504272) - تم إصلاحه في التنقّل
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)
إصلاح الأخطاء في ميزة "التنقّل" في Compose
- تم إصلاح مشكلة احتمالية حدوث تعذّر بسبب التبديل السريع بين وجهة البداية ووجهة أخرى باستخدام عناصر قائمة التنقّل في أسفل الشاشة. (Ic8976، b/208887901)
- تم الآن استعادة وجهة الحوار بشكل صحيح في أعلى الشاشة بعد تغييرات الإعدادات أو إنهاء العملية. (I4c0dc، b/207386169)
- تم إصلاح مشكلة تعذُّر استرداد
ViewModel
منNavBackStackEntry
مربّع الحوار عند إغلاق مربّع الحوار. (I6b96d، b/206465487) - تم إصلاح مشكلة عند استخدام
activity
الوجهات معNavHost
ميزة "إنشاء التنقّل"، ما يؤدي إلى عمليات إعادة تركيب لا نهائية. (I8f64c) - تم إصلاح تسرُّب في Navigation Compose حيث كان يحتفظ بإشارة إلى النشاط القديم بعد تغيير الإعدادات أو إنهاء العملية. (I4efcb، b/204905432)
إصلاح الأخطاء في Safe Args
- لم يعُد
SafeArgs
يتعطّل عند محاولة استعادة صفائف قابلة للتقسيم مخصّصة بعد إنهاء العملية. (I618e8، b/207315994) - تم إصلاح خلل في safe args لا يسمح للصفائف المنطقية بقيمة
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)
إصلاح الأخطاء
- لن يتم بعد الآن إتلاف نماذج العرض عند تعطُّل عمليات النقل من خلال التنقّل ذهابًا وإيابًا بين الشاشات نفسها (Id52d8، b/200817333)
- لم تعُد المَعلمات
NavDeepLink
التي يمكن أن تكون فارغة تحتاج إلى قيمة تلقائية عند إضافة روابط لصفحات في التطبيق إلىNavDestination
. (I5aad4، b/201320030) - لم يعُد يتم اعتبار عناصر NavBackStackEntries التي تتضمّن الآن مراحل حياة مختلفة متساوية. وهذا يعني أنّ NavHost سيعيد إنشاء كل الوجهات بشكلٍ صحيح عند التنقّل باستخدام singleTop وعند إعادة اختيار عناصر القائمة في أسفل الشاشة. (I1b351، b/196997433)
- تم إصلاح مشكلة في
AbstractListDetailFragment
تسبّبت في معالجة سمتَيlayout_width
وlayout_weight
في لوحة القائمة التي يعرضهاonCreateListPaneView()
بشكل غير صحيح أو تجاهلها. (f5fbf3) - أصبحت الحالة المرئية لوجهات الحوار تتماشى الآن
بشكلٍ صحيح مع حالة
DialogFragmentNavigator
. وهذا يعني أنّه يمكن الآن من خلال طلب بيانات واجهة برمجة التطبيقاتdismiss()
غير المتزامنة لتطبيقDialogFragment
محو جميع وجهات الحوار بشكلٍ سليم فوق مربّع الحوار الذي تم إغلاقه. ولا يؤثر ذلك في الحالات التي تستخدم فيهاpopUpTo
أوpopBackStack()
لإغلاق مربّع الحوار. (I77ba2) - يتضمّن تطبيق
AbstractAppBarOnDestinationChangedListener
الآن رسائل خطأ أكثر وضوحًا بشأنonDestinationChanged()
. (Ie742d)
الإصدار 2.4.0-alpha10
29 أيلول (سبتمبر) 2021
تم إصدار androidx.navigation:navigation-*:2.4.0-alpha10
. يحتوي الإصدار 2.4.0-alpha10 على هذه المراجعات.
الميزات الجديدة
- يتيح NavController الآن إمكانية استرداد قائمة بجميع حالات
NavBackStackEntry
المرئية من خلالvisibleEntries
StateFlow (Ia964e). - يقبل العنصر
rememberNavController()
الآن مجموعة اختيارية من نُسخNavigator
التي ستتم إضافتها إلىNavController
المعروضة للسماح بشكل أفضل باستخدام المتنقّلين الاختياريين، مثل تلك الواردة من مادة التنقّل المصاحبة. (I4619e)
إصلاح الأخطاء
- لن يتعطّل التنقّل الديناميكي عند إعادة إنشاء النشاط. (Ifa6a3، b/197942869)
- تم إصلاح مشكلة في زر الرجوع في النظام لا تحدث إلا بعد الخروج من وجهة قابلة للتجميع تحتوي على
NavHost
. (3ed148، b/195668143) - تُنشئ SafeArgs الآن وسيطات
fromBundle()
وfromSavedStateHandle()
بالترتيب الصحيح للمَعلمات. (I824a8، b/200059831)
الإصدار 2.4.0-alpha09
15 أيلول (سبتمبر) 2021
تم إصدار androidx.navigation:navigation-*:2.4.0-alpha09
. يحتوي الإصدار 2.4.0-alpha09 على هذه المراجعات.
الميزات الجديدة
- يمكنك الآن استخدام الطريقة
clearBackStack()
لمحو أي حالة تم حفظها باستخدامpopBackStack()
أوpopUpToSaveState
. (I80a0f) - يمكنك الآن تمرير قائمة بالوسيطات و/أو الروابط لصفحة معيّنة في ملف تعريف الارتباط إلى أداة إنشاء الرسم البياني للملاحة المتداخلة، وسيتمّت إضافتها تلقائيًا إلى الرسم البياني الناتج. (I8a470، b/182545357)
تغييرات واجهة برمجة التطبيقات
- أصبحت دالة
navArgument
Kotlin DSL جزءًا منnavigation-common
بدلاً منnavigation-compose
. سيتطلب ذلك تعديل عمليات الاستيراد لمواصلة استخدام هذه الدالة. (I1d095)
التغييرات في السلوك
- عند إنشاء الوسيطات، تضع ميزة Safe Args الآن المَعلمات التي لا تحتوي على قيم تلقائية قبل المَعلمات التي تحتوي على قيم تلقائية. (I89709، b/198493585)
إصلاح الأخطاء
- عند استخدام ميزة "إنشاء مسار التنقّل"، لن يتم
DESTROYED
مخطّطات التنقّل إلا بعد أن يصبح جميع عناصرهاDESTROYED
. (I86552، b/198741720) - لم تعُد وسيطات
NavDeepLink
التي يمكن أن تكون فارغة تتطلّب قيمة تلقائية. (Ia14ef، b/198689811) - سيؤدي الآن استدعاء
setGraph()
باستخدام رسم بياني جديد إلى محو أيّ حِزم خلفية محفوظة بالإضافة إلى سلوكه السابق المتمثّل في إزالة الحزمة الخلفية. (I97f96) - تم إصلاح مشكلة عدم إرسال إشعارات إلى مثيلات
OnDestinationChangedListener
وإلىcurrentBackStackEntryFlow
عند استخدامlaunchSingleTop
. (Iaaebc)
تعديلات على التبعيات
- تعتمد ميزة "إنشاء مسار التنقّل" الآن على 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
لإنشاء أنواع NavTypes مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء رسم بياني للتنقّل آليًا، مثل استخدام Navigation Graph Kotlin DSL. (I78440، b/196871885)
التغييرات في السلوك
- عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن وسيطات بدون قيم تلقائية قبل تلك التي تحتوي على قيم تلقائية. (Idb697، b/188855904)
- تتحقّق الآن روابط الصفحات من توفّر جميع الوسيطات المطلوبة (تلك التي لا تحتوي على قيم تلقائية) في
Uri
. (#204، b/185527157)
إصلاح الأخطاء
- لن يؤدي استخدام
getBackStackEntry
وpreviousBackStackEntry
داخل دالة composable()، معremember()
، إلى رمي استثناء لعدم توفّر وجهة في الحزمة الخلفية. (I75138، b/194313238) - تتم الآن إعادة صياغة ميزة "إنشاء التنقّل" بشكلٍ صحيح عند تغيير وسيطات التسلسل المرجعي للخلف واستخدام
launchSingleTop=true
. (Iebd69، b/186392337) - لن يعود هناك
ArrayIndexOutOfBoundsException
عند الاتصال بـsetGraph
باستخدام رسم بياني يتضمّن 13 أو 29 وجهة. (I1a9f1، b/195171984) - من المفترض ألا يتسبب مُنشئ java في SafeArgs في تحذيرات 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 على هذه المراجعات.
إصلاح الأخطاء
- تحفظ ميزة "التنقّل والإنشاء" الآن الحالة بشكلٍ سليم بعد تغييرات الإعدادات وعند تغيير الرسومات البيانية أثناء استخدام ميزة "تجميع الخطوات السابقة" المتعدّدة. (If5a3d، b/195141957)
- لن يؤدي إعادة اختيار علامة التبويب نفسها عند استخدام ميزة "إنشاء التنقّل" مع تجميعات متعدّدة للرجوع إلى الصفحات السابقة إلى ظهور شاشة فارغة. (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
في ميزة "التنقّل والإنشاء" الآن الرسم البياني كجزء من الإنشاء الأول. (Ieb7be)
إصلاح الأخطاء
- لم يعُد ظهور الوجهة الأخيرة لرسم بياني للتنقّل يتسبب في ظهور
ClassCastException
. (If0543، b/172112072، b/194301889) - تم إصلاح
NullPointerException
كان يحدث عند إضافة رابط لصفحة في التطبيق بدونUri
والتنقّل عبر مسار أو رابط لصفحة في التطبيق. (938a0c، b/193805425) - تم إصلاح مشكلة في ميزة "التنقّل والإنشاء" حيث لن يصل
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
في ميزة "إنشاء التنقّل" الآن دائمًا الانتقالات البينية عند التنقّل في الوجهات. (I07049، b/172112072) - يمكنك الآن إجراء تغييرات على الرسم البياني لأحد عناصر NavHost. سيتم اعتبار المخططات متساوية إذا كانت تحتوي على startDestination والوجهات نفسها في المخطط، ولن يتم محو
NavController
back stack. (I0b8db، b/175392262)
إصلاح الأخطاء
- تم إصلاح
NoSuchElementException
عند استدعاءpopBackStack()
من داخلLifecycleObserver
مرفق بـNavBackStackEntry
بسبب التعديلات المتكررة على حالة NavController. (I64621) - يسمح
AbstractListDetailFragment
الآن بإزالةSlidingPaneLayout
بالكامل من حزمة APK عندما لا يتم استخدامAbstractListDetailFragment
. (I611ad) - تُلغي
NavGraph
وNavDestination
الآن طريقة equals لكي يُعتبَر كائنان يتضمّنان القيم نفسها متساويين. (I166eb، b/175392262)
الإصدار 2.4.0-alpha04
1 تموز (يوليو) 2021
تم إصدار androidx.navigation:navigation-*:2.4.0-alpha04
. يحتوي الإصدار 2.4.0-alpha04 على هذه المراجعات.
الميزات الجديدة
- يحتوي العنصر
navigation-fragment
الآن على تنفيذ مُعدّ مسبقًا لتنسيق نوافذ مزدوجة من خلالAbstractListDetailFragment
الجديد. يستخدم هذا المقتطفSlidingPaneLayout
لإدارة لوحة قائمة (توفّرها فئة فرعية) ولوحة تفاصيل تستخدمNavHostFragment
لتنفيذها، كما هو موضّح في مثال التنفيذ. (Iac4be، b/191276636) - يتيح الآن
NavHost
للعنصرnavigation-compose
الوصول إلىdialog
وجهة بالإضافة إلىcomposable
وجهة. سيتم عرض كل وجهة من وجهات الحوار هذه ضمنDialog
قابلة للتجميع، وستظهر فوق وجهةcomposable
الحالية. (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
تغييرات واجهة برمجة التطبيقات
- تمّت إعادة تسمية الدالة
add
فيNavigatorState
ليصبحpush
. يجب تغيير جميع عمليات الاتصال الحالية بـadd()
إلى push(). (Ie89fc، b/172112072) - يمكن الآن لمثيلات
Navigator
المخصّصة استخدام واجهات برمجة التطبيقاتpushWithTransaction
وpopWithTransition
علىNavigatorState
لدفع وجهة أو عرضها بشكل غير متزامن. يُرجى العِلم أنّ واجهات برمجة التطبيقات هذه لم يتم استخدامها بعد من قِبل أيّ من المتصفّحات المضمّنة. (Ic4d7c، b/172112072)
التغييرات في السلوك
- تُضيف
NavDeepLinkBuilder
الآنPendingIntent.FLAG_IMMUTABLE
إلىPendingIntent
المعروضة منcreatePendingIntent()
، ما يضمن أن تعمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف 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()
إزالة رمز Up بشكلٍ صحيح عند الانتقال إلى وجهة في أعلى المستوى. (I5d443، b/189868637) - تم إصلاح
IllegalStateException
عند استدعاءpopBackStack()
بعد إزالة الرسم البياني الجذر لـ NavController سابقًا. (I2a330، b/190265699) - أصبحت قواعد ProGuard الخاصة بـ
by navArgs()
تنطبق بشكلٍ سليم الآن عند استخدامnavigation-common
أو أي عناصر تعتمد عليه. (I68800، b/190082521) - إنّ
OnDestinationChangedListener
الذي يتصلnavigate()
في المرة الأولى التي يتلقّى فيها ردّ اتصال يتلقّى الآن ردّ اتصال ثانٍ بشكلٍ سليم مع الوجهة التي انتقَل إليها. (Ie5f9e، b/190228815) - لم يعُد تطبيق Safe Args يتعطّل عند استخدامه مع وحدات ميزة الديناميكية وAGP 7.0 والإصدارات الأحدث. (I69518، b/189966576)
مشكلة معروفة
- ستتعذّر قراءة Safe Args مع ظهور خطأ
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
عند استخدام Gradle6.7.0
بسبب الاعتماد على إصدار قديم من Kotlin. يمكن حلّ هذه المشكلة من خلال التحديث لاستخدام Gradle 7.0. (b/190739257)
الإصدار 2.4.0-alpha02
2 حزيران (يونيو) 2021
تم إصدار androidx.navigation:navigation-*:2.4.0-alpha02
. يحتوي الإصدار 2.4.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- تتوفّر المسارات الآن لوجهات النشاط والشريحة والحوار، بالإضافة إلى جميع مسارات DynamicNavigation Kotlin DSL. (Ib5544 وIa617b وI22f96 وb/188914648 وb/188901565)
- أضافت
NavigationUI
مؤقتًا واجهات برمجة تطبيقات تجريبية للسماح بإيقاف حفظ حالتك. على الرغم من أنّ حفظ الحالة دائمًا هو السلوك الصحيح، لا تزال هناك استخدامات للمكتبات المتوقّفة نهائيًا (أي الأجزاء المحفوظة) التي لا يمكن استخدامها عند حفظ الحالة، ما يمنح التطبيقات فرصة للتحوّل ببطء بعيدًا عن أي واجهات برمجة تطبيقات غير متوافقة. (Idf93c) يوفّر Navigation الآن واجهات برمجة التطبيقات
findDestination()
وgetHierarchy()
التي يمكن استخدامها للمساعدة في تنفيذ NavigationUI المخصّص.findDestination()
هي دالة إضافة فيNavGraph
تحدِّد موقع وجهة ضمن الرسم البياني.getHierarchy()
هي دالة فيNavDestination
يمكن استخدامها للتحقّق مما إذا كانت وجهة معيّنة ضمن التدرّج الهرمي لوجهة أخرى.(I2932f، b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل طرق NavigationUI التي كانت تأخذ
BottomNavigationView
لتأخذ بدلاً من ذلك فئة Superclass التي تم تقديمها في Material1.4.0
،NavigationBarView
. يتيح ذلك استخدام هذه الطرق معNavigationRailView
. (Ib0b36، b/182938895)عند تضخيم عنصر
<action>
عبر XML، يمكن لسمات الرسوم المتحركة استخدام سمات يتم جلبها من المظهر باستخدام بنيةapp:enterAnim="?attr/transitionEnter"
. (I07bc1، b/178291654)
تغييرات واجهة برمجة التطبيقات
- تم إيقاف أدوات إنشاء Kotlin DSL التي تستخدِم رقم تعريف نهائيًا، ويجب استبدالها بأدوات إنشاء تستخدِم المسارات (I85b42 وb/188816479) (I9f58f وb/188816479)
إصلاح الأخطاء
- يستخدم
DialogFragmentNavigator
الآن واجهة برمجة التطبيقاتNavigatorState.pop()
لإعلامNavController
عند إغلاق مربّع حوار من خلال الضغط على زر الرجوع في النظام أو النقر خارج مربّع الحوار، ما يضمن أن تتم مزامنة حالةNavController
دائمًا مع حالة المستكشف. (I2ead9) لم تعُد ميزة التنقّل تعرِض
ConcurrentModificationException
عند استخدام التلاعب بقائمةOnDestinationChangedListeners
من خلال طلبonDestinationChanged
. (Ib1707، b/188860458)لم يعُد تطبيق Safe Args يتعطّل عند محاولة إنشاء سمات direction في 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()
تحفظ حالة الوجهات التي تم عرضها بشكل مفاجئ وتعيدها تلقائيًا، ما يتيح استخدام مجموعات متعدّدة من "الأداة للرجوع" بدون إجراء أي تغييرات على الرمز البرمجي. عند استخدام ميزة التنقّل باستخدام "المقاطع"، هذه هي الطريقة المُقترَحة للدمج مع تسلسلات متعدّدة للرجوع. (Ie07ca)
يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:
في ملف XML الخاص بالتنقّل، يمكن للعنصر
<action>
الآن استخدام السمتَين المنطقيتَينapp:popUpToSaveState
وapp:restoreState
لحفظ حالة أي وجهات يتم عرضها من خلالapp:popUpTo
واستعادة الحالة المرتبطة بالوجهة التي تم تمريرها على أنّهاapp:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
في
navOptions
Kotlin DSL، يمكنك إضافة السمة المنطقيةrestoreState
والسمة المنطقيةsaveState
في أداة الإنشاءpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
عند إنشاء عنصر
NavOptions
يدويًا من خلالNavOptions.Builder
، يمكنك استخدامsetRestoreState()
وتحميلsetPopUpTo()
الجديد الذي يأخذ مَعلمةsaveState
إضافية.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
يمكن أن تتضمّن الآن الطلبات الآلية إلى
popBackStack()
مَعلمةsaveState
إضافية.
في جميع الحالات، سيحفظ NavController
حالة كل NavBackStackEntry
ويستعيدها، بما في ذلك أيّ نُسخ من ViewModel
على مستوى وجهة التنقّل. تم تعديل واجهات برمجة التطبيقات Navigator
لتفعيل كل Navigator
من أجل إتاحة حفظ حالته واستعادتها.
تم تعديل ComposeNavigator
المستخدَم لعناوين composable
في ميزة "إنشاء التنقّل" وFragmentNavigator
وDynamicFragmentNavigator
المستخدَمَين لعناوين <fragment>
في ميزة "التنقّل باستخدام الأجزاء" لاستخدام واجهات برمجة التطبيقات الجديدة لبرنامج Navigator API وتوفير إمكانية حفظ الحالة واستعادتها.
مسارات التنقّل
المسار هو String
يحدّد وجهة بشكل فريد. على الرغم من أنّه كان يُستخدَم سابقًا في إنشاء التنقّل فقط، أصبح هذا المفهوم الآن جزءًا من واجهات برمجة تطبيقات 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 إلى Navigation Compose 2.4.0-alpha01
، يعني ذلك أنّ عمليات الاستيراد التالية لأساليب الإضافات لم تعُد ضرورية ويجب إزالتها:
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
تم استبدال الوسيطة KEY_ROUTE
بخاصية route
في NavDestination
، ما يتيح لك استدعاء navBackStackEntry.destination.route
مباشرةً.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة كتابة جميع عناصر التنقّل بلغة Kotlin. وقد أدّى ذلك إلى تحسين إمكانية تحديد قيمة صفرية للفئات التي تستخدم أنواعًا عامة (مثل الفئات الفرعية
NavType
). تم نقل جميع دوالّ إضافة Kotlin التي كانت جزءًا من عناصر-ktx
إلى عناصرها الرئيسية ذات الصلة. سيستمر نشر عناصر-ktx
، ولكنّها ستكون فارغة تمامًا. (b/184292145) - يتيح
NavDeepLinkBuilder
الآن إضافة وجهات متعددة ومميّزة إلى ملف تعريف الارتباط الذي تم إنشاؤه. (I3ee0d، b/147913689) - إضافة دوال المصنع لـ
DynamicNavHostFragment
(Icd515، b/175222619) - أصبح المعرّف الفريد لتطبيق
NavBackStackEntry
متاحًا الآن كجزء من واجهة برمجة التطبيقات العامة. (Ie033a) - أصبحت حقول
name
وargument
ودوال تحليلNamedNavArgument
علنية الآن. (#174، b/181320559) - تمّت إضافة إضافة
NavBackStackEntry#provideToCompositionLocals
جديدة توفّرNavBackStackEntry
للغات المحلية ذات الصلة بالمقطوعة الموسيقية. (#175، b/187229439)
Safe Args
تُنشئ 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()
، وهي methods التي تعدّلNavBackStackEntry
Lifecycle
، بصفتها@MainThread
، ما ينسّق التنقّل مع عملية تنفيذ2.3.0
التي تم تقديمها في Lifecycle2.3.0
. (b/171125856) - أصبح تحليل وسيطات Enum من الروابط لصفحات في التطبيق غير حساس لحالة الأحرف، ما يسمح لرابط صفحة في التطبيق مثل
http://www.example.com/red
بمطابقة رابط صفحة في التطبيقwww.example.com/{color}
حتى عندما يكون عنصر Enum يحمل القيمةRED
. (#152، b/135857840)
توافق تطبيق Compose
- لا يتوافق
androidx.navigation:navigation-compose:2.4.0-alpha01
إلا مع الإصدار1.0.0-beta07
من تطبيق "الإنشاء" والإصدارات الأحدث.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تمنح العناصر النائبة للوسيطات اللاحقة الأولوية على الروابط لصفحات في التطبيق التي تحتوي على لاحقة مطابقة تمامًا. (#153، b/184072811)
- يتيح
NavHostFragment
الآن استخدام المتصفّحات المخصّصة التي تستخدِم@Navigator.Name("dialog")
نفسها المستخدَمة فيDialogFragmentNavigator
التلقائي. (Ib1c2c، b/175979140) - تم تحسين سلوك
NavigatorProvider#addNavigator
لضمان عدم حدوث مشاكل عند استدعائه بشكل متكرّر باستخدام العنصر نفسه. (#176، b/187443146)
المساهمات الخارجية
- نشكر simonschiller على توفير دعم لـ Safe Args لإنشاء طريقة
fromSavedStateHandle()
لكل فئةNavArgs
. (#122، b/136967621) - نشكر 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) - تعتمد ميزة "إنشاء مسار" في ميزة "التنقّل" الآن على رمز التنقّل
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 الآن على Navigation 2.3.4 الذي يتضمّن الإصلاح لمحاولة ضبط عنصر ViewModelStore نفسه بعد ضبط الرسم البياني. (I65c24، b/177825470)
الإصدار 1.0.0-alpha08
24 شباط (فبراير) 2021
تم إصدار androidx.navigation:navigation-compose:1.0.0-alpha08
. يحتوي الإصدار 1.0.0-alpha08 على هذه المراجعات.
الميزات الجديدة
- تعبئ
NavHost
الآن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 على هذه المراجعات.
تم تعديله ليعتمد على Compose 1.0.0-alpha10.
الإصدار 1.0.0-alpha04
16 كانون الأول (ديسمبر) 2020
تم إصدار androidx.navigation:navigation-compose:1.0.0-alpha04
. يحتوي الإصدار 1.0.0-alpha04 على هذه المراجعات.
- تم تعديله للتوافق مع Compose
1.0.0-alpha09
.
الإصدار 1.0.0-alpha03
2 كانون الأول (ديسمبر) 2020
تم إصدار androidx.navigation:navigation-compose:1.0.0-alpha03
. يحتوي الإصدار 1.0.0-alpha03 على هذه المراجعات.
إصلاح الأخطاء
- تم حلّ مشكلة عدم عمل
popBackStack()
وnavigateUp()
بعد تغيير الإعدادات أو إيقاف العملية وإعادة إنشائها. (Icea47، b/173281473) - يعمل الآن التنقّل إلى رسم بياني متداخل ضمن NavHost بشكل صحيح. (I0948d، b/173647694)
الإصدار 1.0.0-alpha02
11 تشرين الثاني (نوفمبر) 2020
تم إصدار androidx.navigation:navigation-compose:1.0.0-alpha02
. يحتوي الإصدار 1.0.0-alpha02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تتيح ميزة إنشاء التنقّل الآن استخدام NavOptions لاستخدام عمليات popUpTo وlaunchSingleTop (If96c3، b/171468994)
- تمت إضافة دالة تنقّل تستخدِم مسارًا بدلاً من رقم تعريف يسمح لك بإنشاء رسوم بيانية متداخلة في لغة برمجة تشكلة التنقّل. (I1661d)
- تأتي startDestination الآن قبل المسار في قائمة المَعلمات الخاصة بخادم التنقّل (Ie620e).
- يمكنك الآن إنشاء رسم بياني باستخدام المسار كوجهة بداية خارج عنصر NavHost القابل للتجميع. (Iceb75)
الإصدار 1.0.0-alpha01
28 تشرين الأول (أكتوبر) 2020
تم إصدار android.navigation:navigation-compose:1.0.0-alpha01
. يحتوي الإصدار 1.0.0-alpha01 على هذه المراجعات.
الميزات الجديدة
يقدّم العنصر navigation-compose
عملية دمج بين مكوّن التنقّل وJetpack Compose. وتستخدم دوالّ @Composable
كوجهات في تطبيقك.
يوفّر هذا الإصدار الأولي ما يلي:
NavHost
قابلة للتجميع تتيح لك إنشاء رسم بياني للتنقّل من خلال لغة Kotlin DSL- تحديد نطاق مراحل النشاط و
ViewModel
والحالة التي يتم تذكُّرها على مستوى الوجهة - الدمج التلقائي مع زر الرجوع في النظام
- إتاحة تمرير الوسيطات وإرفاق روابط لصفحات في التطبيق بالوجهات وعرض نتيجة للوجهات السابقة
- أنشئ أدوات مساعدة محدّدة في
rememberNavController()
وcurrentBackStackEntryAsState()
للسماح بحالة الرفع وربطNavController
بالعناصر القابلة للتجميع خارجNavHost
(مثل شريط التنقّل السفلي).
اطّلِع على دليل التنقّل في ميزة "إنشاء" للحصول على مزيد من المعلومات.
الإصدار 2.3.5
الإصدار 2.3.5
7 نيسان (أبريل) 2021
تم إصدار androidx.navigation:navigation-*:2.3.5
. يحتوي الإصدار 2.3.5 على هذه المراجعات.
الميزات الجديدة
- عند الانتقال باستخدام
NavDeepLinkRequest
أوUri
، يمكنك الآن الوصول إلىUri
والإجراء ونوع mime في الوجهة الناتجة من خلال الحصول على النية من الوسيطات من خلالKEY_DEEP_LINK_INTENT
، ما يعكس الوظيفة المتاحة حاليًا للربط العميق الخارجي. (I975c3، b/181521877)
إصلاح الأخطاء
- تمت إضافة
OnBackPressedCallbacks
إلى أداة إرسال باستخدام الرمز المميّزNavBackStackEntry
لأنّ LifecycleOwner يتداخل الآن بشكل صحيح مع الرمز المميّز بعد أن تصبح مراحل النشاط هيSTOPPED
، ثمSTARTED
(Iff94f، b/182284739) - أصبح تحليل نطاق الرابط لصفحة معيّنة في التطبيق غير حساس لحالة الأحرف، ما يضمن تطابق
www.example.com
مع كل منwww.example.com
وwww.Example.com
. يُرجى العلم أنّ أسماء مَعلمات طلب البحث لا تزال حسّاسة لحالة الأحرف. (#144، b/153829033) - تم إصلاح
NullPointerException
يمكن أن يحدث عندما تحتوي الوجهة على عدة وسيطات تلقائية غير فارغة، وتنتقل إلى تلك الوجهة مع إلغاء مجموعة فرعية فقط من هذه الوسائط. (aosp/1644827)
تعديلات على التبعيات
- يعتمد الآن المكوّن الإضافي Navigation Safe Args Gradle على المكوّن الإضافي Kotlin Gradle Plugin 1.4.31. (aosp/1661058، b/181156413)
المساهمة الخارجية
- نشكرك
bentrengrove
على طلب سحب الرمز البرمجي الذي يجعل تحليل نطاق رابط الصفحة في التطبيق غير حساس لحالة الأحرف. (#144، b/153829033)
الإصدار 2.3.4
الإصدار 2.3.4
10 آذار (مارس) 2021
تم إصدار androidx.navigation:navigation-*:2.3.4
. يحتوي الإصدار 2.3.4 على هذه المراجعات.
الميزات الجديدة
- يمكن الآن تحليل وسيطات
ReferenceType
بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم لرابط لصفحة في التطبيق. يتيح هذا الخيار استخدام القيمة الصحيحة الأوّلية بالإضافة إلى القيم الست عشرية التي تسبقها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
بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم لرابط لصفحة في التطبيق. (#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 بالإضافة إلى عمليات التحقّق الحالية من التسلسل الهرمي للجزء وتسلسل عرض الجزء. يتيح لك ذلك اختبار أجزاء مربّعات الحوار التي تستخدم رمزَي التنقّلFragmentScenario
وNavigation.setViewNavController()
. (I69e0d)
الإصدار 2.3.1
الإصدار 2.3.1
14 تشرين الأول (أكتوبر) 2020
تم إصدار androidx.navigation:navigation-*:2.3.1
. يحتوي الإصدار 2.3.1 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة موارد Animator التلقائية إلى واجهة مستخدم التنقّل، ويُنصح باستخدامها بدلاً من موارد الرسوم المتحرّكة التلقائية. (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 الآن على KotlinPoet 1.6.0 (aosp/1435911).
- تعتمد حزمة Safe Args الآن على AGP 4.0.1 (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
. - إتاحة نوعَي البيانات Action و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) - يعرِض Navigation Graph Kotlin DSL الآن
defaultArguments
Map
للإجراءات، ما يعكس إمكانية ضبط القيم التلقائية لعناصر<action>
في ملفات XML للتنقّل. (b/150345605)
إصلاح الأخطاء
- من التنقّل 2.2.2: تمّ إصلاح
IllegalStateException
عند الربط بصفحة معيّنة في تطبيقك من خلال رابط لصفحة معيّنة في الرسم البياني عندما يكون لديك عدّة نُسخ منNavHostFragment
في نشاطك. (b/147378752)
تعديلات على التبعيات
- يعتمد التنقّل الآن على العنصر
1.2.4
. (aosp/1277325) - تعتمد ميزة "التنقّل الديناميكي" الآن على Play Core
1.7.2
. (aosp/1282257)
الإصدار 2.3.0-alpha04
18 آذار (مارس) 2020
تم إصدار androidx.navigation:navigation-*:2.3.0-alpha04
. يحتوي الإصدار 2.3.0-alpha04 على هذه المراجعات.
الميزات الجديدة
- تمّت إضافة دعم لنشاط وحدة الميزات ووجهات الأجزاء في لغة Kotlin DSL للتنقّل. (b/148969800)
تغييرات واجهة برمجة التطبيقات
- لم تعُد فئة
DynamicExtras
تستخدم نمطًا لإنشاء العناصر، ويمكن الآن إنشاؤها مباشرةً. (aosp/1253671) - يأخذ
DynamicActivityNavigator
الآنContext
في طريقة وضع التصميم بدلاً منActivity
. (aosp/1250252)
إصلاح الأخطاء
- لم يعُد
NavigationUI
يتجاهل التصنيفات الفارغة (أي الوجهة التي تحتوي علىandroid:label=””
)، وأصبح الآن يضبط العنوان بشكل صحيح على سلسلة فارغة. (b/148679860)
تعديلات على التبعيات
- تعتمد الآن عناصر ميزات التنقّل الديناميكية على 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)
تغييرات التبعيات
- تمّ إيقاف الاعتماد على Core
1.2.0
في Navigation وأصبح يعتمد الآن على Core1.1.0
لتجنُّب إجبار المطوّرين على الانتقال إلى عنصر اعتماد أحدث عندما لا يعتمد Navigation على أي واجهات برمجة تطبيقات جديدة في Core1.2.0
.
الإصدار 2.3.0-alpha02
19 شباط (فبراير) 2020
تم إصدار androidx.navigation:navigation-*:2.3.0-alpha02
. يحتوي الإصدار 2.3.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- يتيح لك الرمز
NavBackStackEntry
الآن الوصول إلىSavedStateHandle
مناسب لتخزين كميات صغيرة من الحالة المحفوظة التي يجب أن تكون مرتبطة بعنصر محدّد في تسلسل الاستدعاء للنشاطات السابقة. اطّلِع على عرض نتيجة للحصول على مثال على حالة استخدام. (b/79672220)
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقتَي تسهيل
getCurrentBackStackEntry()
وgetPreviousBackStackEntry()
لتسهيل استردادNavBackStackEntry
للوجهتَين الحالية والسابقة. (b/79672220)
إصلاح الأخطاء
- يُرسِل
navigateUp()
الآن مَعلمات الوجهة الحالية وKEY_DEEP_LINK_INTENT
إلى الوجهة السابقة عند تشغيل تطبيقك في حِزمة المهام الخاصة بك. (b/147456890)
تغييرات التبعية
- يعتمد التنقّل الآن على 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
وهمي عند اختبار التنقّل، ما يتيح لك ضبط الوجهة الحالية والتحقّق من الحزمة الخلفية بعد عمليات التنقّل. (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
والوحدة1.2.1
.
الإصدار 2.2.2
الإصدار 2.2.2
نيسان (أبريل) 2020
تم طرح androidx.navigation:navigation-*:2.2.2
. يحتوي الإصدار 2.2.2 على هذه المراجعات.
إصلاح الأخطاء
- تمّ إصلاح
IllegalStateException
عند إنشاء رابط لصفحة في التطبيق يؤدي إلى وجهة البدء في الرسم البياني عندما يكون لديك عدّة نُسخ منNavHostFragment
في نشاطك. (b/147378752) - لم يعُد
NavigationUI
يتجاهل التصنيفات الفارغة (أي الوجهة التي تحتوي علىandroid:label=””
)، وأصبح الآن يضبط العنوان بشكل صحيح على سلسلة فارغة. تم إصدار هذه الميزة سابقًا في Navigation 2.3.0-alpha04. (b/148679860) - تحافظ قواعد
navigation-common-ktx
ProGuard الآن بشكل صحيح على فئاتNavArgs
المستخدَمة فقط بدلاً من جميع نُسخNavArgs
. تم إصدار هذه الميزة سابقًا في Navigation 2.3.0-alpha03. (b/150213558
تعديلات على التبعيات
- يعتمد التنقّل الآن على العنصر
1.2.4
. (aosp/1277325)
الإصدار 2.2.1
الإصدار 2.2.1
5 شباط (فبراير) 2020
تم إصدار androidx.navigation:navigation-*:2.2.1
. يحتوي الإصدار 2.2.1 على هذه المراجعات.
إصلاح الأخطاء
- تتجاهل الروابط لصفحات في التطبيق التي لا تتضمّن مَعلمات طلب البحث الآن أي مَعلمات طلب بحث بشكلٍ صحيح بدلاً من إلحاقها بعناصر
{argument}
اللاحقة أو عدم مطابقتها مع الرابط لصفحة في التطبيق. (b/147447512) - تم تعديل قواعد
navigation-ui
ProGuard لتطبيقDrawerArrowDrawable
لضمان عدم اشتراطandroid.enableJetifier=true
. (b/147610424) - تحتوي وحدة
navigation-common-ktx
الآن على اسم حزمة بيان فريد بدلاً من مشاركة اسم حزمة البيان نفسه معnavigation-runtime-ktx
. (aosp/1141947)
تعديلات على التبعيات
- يعتمد التنقّل
2.2.1
الآن على Lifecycle ViewModel SavedState2.2.0
والوحدة1.2.1
.
الإصدار 2.2.0
الإصدار 2.2.0
22 كانون الثاني (يناير) 2020
تم إصدار androidx.navigation:navigation-*:2.2.0
. يحتوي الإصدار 2.2.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 2.1.0
- NavBackStackEntry: يمكنك الآن استدعاء
NavController.getBackStackEntry()
، مع إدخال رقم تعريف وجهة أو رسم بياني للتنقّل في الحزمة الخلفية. يقدّم العنصرNavBackStackEntry
الذي تم إرجاعهLifecycleOwner
وViewModelStoreOwner
(العنصرَين نفسهما اللذَين تم إرجاعهما بواسطةNavController.getViewModelStoreOwner()
) وSavedStateRegistryOwner
، بالإضافة إلى تقديم الوسيطات المستخدَمة لبدء هذه الوجهة. - دمج SavedState في Lifecycle ViewModel: أصبح
SavedStateViewModelFactory
هو المصنع التلقائي المستخدَم عند استخدامby navGraphViewModels()
أوViewModelProvider
معViewModelStoreOwner
الذي يعرضهNavController.getBackStackEntry()
أوNavController.getViewModelStoreOwner()
. - إتاحة مَعلمات طلب البحث للروابط لصفحات في التطبيق: تتيح الآن الروابط لصفحات في التطبيق التي تتضمّن مَعلمات طلب البحث استخدام مَعلمات طلب البحث التي تم إعادة ترتيبها. أصبحت الوسيطات التي لها قيمة تلقائية أو يمكن أن تكون فارغة اختيارية عند مطابقة الروابط لصفحات في التطبيق.
- تحسين إتاحة الصور المتحركة: يستخدم
NavHostFragment
الآنFragmentContainerView
من الإصدار 1.2.0 من Fragment، ما يؤدي إلى حلّ مشاكل ترتيب الصور المتحركة حسب المحور z ومشاكل إرسال المكوّنات المضمّنة للنوافذ إلى المقاطع.
الإصدار 2.2.0-rc04
18 كانون الأول (ديسمبر) 2019
تم إصدار androidx.navigation:navigation-*:2.2.0-rc04
. يحتوي الإصدار 2.2.0-rc04 على هذه المراجعات.
إصلاح الأخطاء
- تم تعديل الرسوم المتحركة التلقائية للاختفاء التي يستخدمها
navigation-ui
لتتطابق مع الرسوم المتحركة المعدَّلة للاختفاء في القسم1.2.0-rc04
. (b/145769814)
الإصدار 2.2.0-rc03
4 كانون الأول (ديسمبر) 2019
تم إصدار androidx.navigation:navigation-*:2.2.0-rc03
. يحتوي الإصدار 2.2.0-rc03 على هذه المساهمات.
إصلاح الأخطاء
- تمّ إصلاح مشكلة في تحليل الروابط لصفحات في التطبيق عند استخدام مَعلمات طلب البحث وسيطة كجزء آخر من المسار الذي منع تحليل أكثر من حرف واحد من وسيطة المسار النهائي. (b/144554689)
- تم إصلاح مشكلة في تحليل الروابط لصفحات في التطبيق حيث كانت المَعلمات الاختيارية تتلقّى
"@null"
بدلاً منnull
. (b/141613546) - يعيد
NavHostFragment
الآن الرسم البياني بشكل صحيح بعد تغيير الإعدادات عند استخدامه معFragmentContainerView
. (b/143752103)
تغييرات التبعية
- يعتمد التنقّل الآن على 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
المستندَين إلى التنقّل، بالإضافة إلى تقديم الوسيطات المستخدَمة لبدء هذه الوجهة. (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()
property delegate لمستخدمي Kotlin الذين يستخدمون مكتبات-ktx
أو باستخدام واجهة برمجة التطبيقاتgetViewModelStoreOwner()
التي تمت إضافتها إلىNavController
. اطّلِع على مشاركة البيانات المتعلّقة بواجهة المستخدم بين الوجهات للحصول على مزيد من المعلومات. - وجهات الحوار: يمكنك الآن إنشاء
<dialog>
وجهة ستعرضDialogFragment
عندnavigate
إليها. يتيحNavHostFragment
وجهات الحوار تلقائيًا. اطّلِع على إنشاء وجهة من DialogFragment للحصول على مزيد من المعلومات. - التنقّل باستخدام معرّف الموارد المنتظم (URI): يمكنك الآن
navigate
باستخدامUri
، الذي يستخدم<deepLink>
الذي أضفته إلى وجهة للتنقّل إليها. يمكنك الاطّلاع على التنقّل باستخدام عنوان URL للحصول على مزيد من المعلومات. - 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)
إصلاح الأخطاء
- تم إصلاح مشكلة في التوقيت عند استخدام عدة أقسام NavHostFragment مع الحاوية نفسها باستخدام
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>
. نتيجةً لذلك، تعرِض ميزة التنقّل الآن تلقائيًا<dialog>
وجهة عند الانتقال إلى وجهة ليست حوارًا أو نشاطًا، مثل وجهة<fragment>
. (b/134089818)
إصلاح الأخطاء
- يوقف التنقّل الآن الصورة المتحركة التي تحدث عند إعادة إنشاء النشاط عند معالجة رابط في التطبيق، ما يؤدي إلى إصلاح وميض مرئي. (b/130362979)
- تم إصلاح خطأ كان يؤدي إلى عدم مزامنة حزمة التنقّل الخلفية عند إخراج جزء أثناء إضافة الجزء الأولي. (b/133832218)
الإصدار 2.1.0-alpha05
5 حزيران (يونيو) 2019
تم إصدار androidx.navigation:*:2.1.0-alpha05
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
تغييرات واجهة برمجة التطبيقات
- تمت إعادة تسمية واجهات برمجة التطبيقات ذات الصلة بالمضيف على
NavController
ونقلها إلى فئة فرعية جديدة منNavController
، وهيNavHostController
. (aosp/966091) - تم استبدال طريقة
NavController
setHostOnBackPressedDispatcherOwner()
بطريقةsetOnBackPressedDispatcher()
فيNavHostController
، وتتطلّب الآن استدعاءsetLifecycleOwner()
قبل استدعائها. (aosp/965409) - يحتوي
NavHostController
الآن على طريقةenableOnBackPressed(boolean)
تستبدل فئةNavHostOnBackPressedManager
التي كانتsetHostOnBackPressedDispatcherOwner()
تعرِضها سابقًا. (aosp/966091)
إصلاح الأخطاء
- تم إصلاح مشكلة عدم صحة تسلسل الرجوع بعد التنقّل باستخدام عنوان URL. (b/132509387)
- يتم الآن تشغيل الروابط لصفحات في التطبيق التي يعالجها NavController تلقائيًا مرة واحدة فقط. (b/132754763)
الإصدار 2.1.0-alpha04
16 أيار (مايو) 2019
تم إصدار androidx.navigation:*:2.1.0-alpha04
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
إصلاح الأخطاء
- يراعي
NavHostFragment
app:defaultNavHost
بشكل صحيح عند اعتراض أحداث زر الرجوع في النظام، ما يؤدي إلى إصلاح مشكلة تراجع في التنقّل2.1.0-alpha03
. b/132077777 - يعالج
DialogFragmentNavigator
الآن عملياتpopBackStack()
وnavigateUp()
بشكل صحيح. b/132576764 - تم إصلاح مشكلة
IllegalStateException: unknown destination during restore
عند الانتقال بشكل متكرّر بين الرسومات البيانية المُدمجة. b/131733658
الإصدار 2.1.0-alpha03
7 أيار (مايو) 2019
تم إصدار androidx.navigation:*:2.1.0-alpha03
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
المشاكل المعروفة
- يواصل NavHostFragment اعتراض زر الرجوع في النظام على الرغم من استخدام
app:defaultNavHost="false"
b/132077777.
الميزات الجديدة
- يمكنك الآن إنشاء
<dialog>
وجهات ستظهر فيهاDialogFragment
عندnavigate
إليها. يتيحNavHostFragment
وجهات مربّعات الحوار تلقائيًا. b/80267254 - بالإضافة إلى استدعاء
navigate
باستخدام معرّف مورد أو مثيلNavDirections
، يمكنك الآن التنقّل من خلالUri
الذي يستخدم<deepLink>
الذي أضفته إلى وجهة للتنقّل إلى الوجهة الصحيحة. b/110412864
تغييرات السلوك
- تم تسريع الصور المتحركة التلقائية التي يوفّرها NavigationUI من 400 ملي ثانية إلى 220 ملي ثانية لمطابقة سرعة الصور المتحركة التلقائية للأنشطة والمقاطع. b/130055522
تغييرات واجهة برمجة التطبيقات
- تم إيقاف طريقة
createFragmentNavigator()
فيNavHostFragment
نهائيًا وتم نقل وظيفتها إلى الطريقة الجديدةonCreateNavController()
لجعل الأمر أكثر وضوحًا بأنّ هذه هي نقطة الدخول الصحيحة لإضافة "المتنقّلين" المخصّصين عند إنشاء فئة فرعية منNavHostFragment
. b/122802849 - تمت إضافة طريقة
hasDeepLink()
إلىNavDestination
للسماح لك بالتحقّق مما إذا كان بإمكان هذه الوجهة معالجةUri
معيّن أو أي وجهة في الرسم البياني للتنقّل في حالNavGraph
. b/117437718
إصلاح الأخطاء
- يتم الآن تمرير الوسيطات التلقائية بشكل صحيح إلى نُسخ
OnDestinationChangedListener
. b/130630686 - يرصد
NavHostFragment
الآن أحداث الرجوع في النظام باستخدامOnBackPressedDispatcher
، ما يؤدي إلى حلّ مشكلة عند إجراء التنقّل الشَرطي في طرق دورة حياة المقتطف عند العودة إلى مكوّن مقتطف. b/111598096 - بالنسبة إلى Safe Args، يتم الآن استنتاج أنّ
android:defaultValue=”@null”
معapp:argType
غير محدّد هو وسيطةstring
بشكل صحيح. b/129629192
الإصدار 2.1.0-alpha02
3 نيسان (أبريل) 2019
تم إصدار androidx.navigation:*:2.1.0-alpha02
. يمكن العثور على عمليات الربط المضمّنة في هذا الإصدار هنا.
الميزات الجديدة
- يمكنك الآن إنشاء نماذج ViewModel التي يتم تحديد نطاقها على مستوى مخطّط التنقّل من خلال
by navGraphViewModels()
property delegate لمستخدمي Kotlin أو باستخدام واجهة برمجة التطبيقاتgetViewModelStore()
التي تمت إضافتها إلىNavController
. b/111614463
تغييرات واجهة برمجة التطبيقات
- يمكنك الآن إضافة
app:targetPackage
إلى وجهة<activity>
لتقييد اسم الحزمة المطابق. تتيح هذه الميزة استخدامapp:targetPackage="${applicationId}"
لتقييد الحزمة بمعرّف تطبيقك. b/110975456
إصلاح الأخطاء
- لم يعُد يتم تحليل
android:name
لوجهات<activity>
إلى فئة في وقت التضخيم، ما يمنع حدوث ClassNotFoundExceptions عند استخدام الميزات الديناميكية. b/124538597
الإصدار 2.1.0-alpha01
19 آذار (مارس) 2019
هذا هو الإصدار الأول من الإصدار التجريبي من ميزة "التنقّل"2.1.0
.
تغييرات التبعيات
- يعتمد التنقّل الآن على
androidx.core:core:1.0.1
وandroidx.fragment:fragment:1.1.0-alpha05
. يزيل هذا الإصدار أيضًا الاعتماد علىandroidx.legacy:legacy-support-core-utils:1.0.0
. b/128632612
تغييرات واجهة برمجة التطبيقات
- تمت إضافة طريقة
Navigation.createNavigateOnClickListener(NavDirections)
جديدة كبديل لإنشاء مستمع نقرات باستخدام معرّف مورد وحِزمة. b/127631752 - تم إيقاف
FragmentNavigator.instantiateFragment
نهائيًا. يستخدم التنفيذ التلقائي الآنFragmentFactory
لإنشاء مثيل للفِرق. b/119054429
إصلاح الأخطاء
- لم تعُد ميزة التنقّل تُرسِل
Bundle
فارغًا عندما تكون هناك وسيطات مرفقة بوجهة، ما يحلّ مشكلة عند استخدامandroid:defaultValue="@null"
. b/128531879 - تعتمد Safe Args الآن على KotlinPoet 1.1.0، ما يحلّ مشكلة متعلقة بأسماء الحِزم الطويلة جدًا. b/123654948
الإصدار 2.0.0
الإصدار 2.0.0
14 آذار (مارس) 2019
تم طرح الإصدار 2.0.0
من التنقّل بدون أي تغييرات عن الإصدار 2.0.0-rc02
.
الإصدار 2.0.0-rc02
6 آذار (مارس) 2019
يقدّم الإصدار 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. سيكون الإصدار الثابت من Navigation 1.0 هو الإصدار الأخير الذي يستخدم تبعيات مكتبة Support ، وسيتم الاعتماد على IDE AndroidX في جميع عمليات التطوير المستقبلية التي تتجاوز الإصدار 1.0، وسيتم الاعتماد على الإصدار الثابت 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، أضِف classpath التالي في ملف build.gradle
الدرجة العليا.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
الإصدار 1.0.0
الإصدار 1.0.0
14 آذار (مارس) 2019
تم طرح الإصدار 1.0.0
من التنقّل بدون أي تغييرات عن الإصدار 1.0.0-rc02
.
الإصدار 1.0.0-rc02
26 شباط (فبراير) 2019
هذا هو الإصدار الثاني من الإصدار التجريبي للإصدار الثابت 1.0.0 من ميزة "التنقّل". يتضمّن هذا الإصدار عددًا من إصلاحات الأخطاء.
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل
popBackStack()
إذا لم يكن للرسم البياني الجذر معرّفًا b/126251695. - يعالج
navigateUp()
الآن بشكل صحيح الانتقال إلى مهمة تطبيقك مجددًا عند استدعائه بعد معالجة رابط لصفحة في التطبيق بدونFLAG_ACTIVITY_NEW_TASK
b/126082008 - تم إصلاح مشكلة
ActivityNavigator.applyPopAnimationsToPendingTransition
عدم تطبيق الحركة الصحيحة عند الخروج من النافذة المنبثقة b/126237567 - يُلغي الآن رمز Kotlin الذي يتم إنشاؤه بواسطة Safe Args كلمات Kotlin الرئيسية بشكلٍ صحيح،
مثل
in
وfun
في اسم الحزمة المرتبط بفئةR
. b/126020455
الإصدار 1.0.0-rc01
21 شباط (فبراير) 2019
هذا إصدار محتمل للإصدار الثابت 1.0.0 من 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 - يضبط التنقّل الآن
ClassLoader
بشكلٍ صحيح أثناء استعادة حالة العنصر المحفوظ، ما يتجنّب حدوث مشاكل عند استخدام فئات مخصّصة فيNavigator
الحالة المحفوظة أو في الوسيطات المُرسَلة إلىNavDestination
. b/123893858 - لم تعُد فئات NavArgs التي تم إنشاؤها باستخدام Safe Args تتعطل عند استعادة وسيطة
Parcelable[]
من حالة العنصر المحفوظ. b/123963545 - تعمل الآن ميزة Safe Args على تنظيف فئات Kotlin التي تم إنشاؤها بشكل غير ضروري بشكل صحيح. b/124120883
الإصدار 1.0.0-beta01
4 شباط (فبراير) 2019
هذا هو أول إصدار تجريبي من Navigation API. ومن المفترض أن يظلّ واجهة برمجة التطبيقات هذه مستقرة من الآن فصاعدًا إلى أن يتم طرح الإصدار التالي، ما لم تحدث مشكلة خطيرة. يتضمّن هذا الإصدار بعض الإصلاحات للأخطاء وتغييرات في السلوك.
تغييرات السلوك
- تضمن عملية التنقّل الآن معاملة القيم التلقائية للوسيطات بشكلٍ متطابق
أثناء التشغيل ومن خلال 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 في مكتبة ووحدات الميزات على جميع إصدارات المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/121304903
- تم إصلاح مشكلة تراجعية كانت تؤدي إلى أن تؤدي عملية
popBackStack()
واحدة إلى إزالة جميع نُسخ الوجهة من أعلى الحزمة الخلفية، بدلاً من إزالة وجهة واحدة فقط في كل مرة. b/123552990 - تم إصلاح مشكلة تؤدي إلى إيقاف مزامنة حالة
FragmentNavigator
مع حالةNavController
، ما يؤدي إلى حدوثIllegalStateException
عند محاولة memulihkan الحزمة الخلفية. 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 والتي تكون مرتبطة بالإجراءات الشاملة b/123307342
الإصدار 1.0.0-alpha10
23 كانون الثاني (يناير) 2019
المشاكل المعروفة
- يتعذّر على Safe Args استيراد فئة Directions المرتبطة بالإجراءات الشاملة. b/123307342
يتضمّن هذا الإصدار تغييرات في واجهة برمجة التطبيقات قد تؤدي إلى حدوث أعطال. يُرجى الاطّلاع على قسم التغييرات التي قد تؤدي إلى حدوث أعطال أدناه.
الميزات الجديدة
- يمكن لمستخدمي Kotlin الآن استخدام
by navArgs()
property delegate للحصول على مرجع لصفNavArgs
تم إنشاؤه باستخدام Safe Args بشكل كسول فيActivity
أوFragment
. b/122603367 - تتيح لك الآن أداة Safe Args إنشاء رمز Kotlin من خلال تطبيق المكوّن الإضافي
androidx.navigation.safeargs.kotlin
. تم إنشاء رمز Kotlin خصيصًا للوحدات التي تستخدم Kotlin فقط، باستخدام الوسيطات التلقائية والklassen الثابتة بدلاً من نمط المُنشئ الذي لا يزال متاحًا من خلال مكوّنandroidx.navigation.safeargs
الإضافي السابق. b/110263087
التغييرات في السلوك
- يتم الآن منح الأولوية للروابط لصفحات في التطبيق المطابقة التي تحتوي على أكبر عدد من الوسيطات المطابقة. b/118393029
- سيؤدي الآن الاتصال بـ
setGraph()
علىNavController
إلى إعادة ضبط الحزمة الخلفية. b/111450672 - لم تعُد الروابط لصفحات في التطبيق غير المعروفة تؤدي إلى ظهور خطأ
IllegalStateException
، بل يتم تجاهلها، ما يؤدي إلى حلّ المشاكل المتعلّقة بالروابط لصفحات في التطبيق المُدمجة أو المتعددة. b/121340440NavHostFragment
التغييرات التي قد تؤدي إلى حدوث أعطال
- تم نقل طريقة
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 - تعالج الآن فئات "الاتجاهات" التي تم إنشاؤها باستخدام Safe Args الإجراءات الشاملة بشكل صحيح التي لها المعرّف نفسه كإجراء على وجهة. b/122962504
- تحتوي فئات
NavDirections
التي تم إنشاؤها باستخدام Safe Args الآن على قيمhashCode()
متساوية بشكل صحيح عندما تعرضequals()
القيمة true. b/123043662 - يعرض
FragmentNavigator
الآن رسالة خطأ أفضل إذا حاولت إجراءFragmentTransactions
مخصّص علىFragmentManager
NavHostFragment
. يجب استخدامgetChildFragmentManager()
في كل الأوقات. b/112927148
الإصدار 1.0.0-alpha09
18 كانون الأول (ديسمبر) 2018
يتضمّن هذا الإصدار تغييرات في واجهة برمجة التطبيقات قد تؤدي إلى حدوث أعطال. يُرجى الاطّلاع على قسم التغييرات التي قد تؤدي إلى حدوث أعطال أدناه.
لقد اخترنا عدم مواصلة تطوير العنصر
android.arch.navigation:navigation-testing
. على الرغم من أنّه ثبت أنّه
مفيد للاختبار الداخلي لتطبيق NavController
، ننصحك بشدة
باستخدام استراتيجيات اختبار بديلة، مثل محاكاة مثيل NavController
للتحقّق من إجراء طلبات navigate()
الصحيحة. تتم مناقشة هذه المعالجة بالتفصيل في محادثة النشاط الفردي في AndroidDevSummit 2018، وسنعمل على توفير مستندات إضافية حول اختبار التنقّل على وجه التحديد.
الميزات الجديدة
- لن تؤدي
MenuItem
التي تحتوي علىmenuCategory="secondary"
إلى عرض الصف العلوي من السجلّ عند استخدامها مع طرقNavigationUI
. b/120104424 - يتيح لك
AppBarConfiguration
الآن ضبط مثيل احتياطيOnNavigateUpListener
سيتم استدعاؤه عندما يعرضnavController.navigateUp()
قيمةfalse
. b/79993862 b/120690961
التغييرات التي قد تؤدي إلى حدوث أعطال
- عند استخدام
<argument>
معargType="reference"
، يتوقف عن تحليل المرجع، ويقدّم بدلاً من ذلك رقم تعريف المورد الأوّلي نفسه. b/111736515 onNavDestinationSelected()
يعود الآن تلقائيًا إلى وجهة البدء في الرسم البياني للتنقّل، مما يجعله متوافقًا مع طرقsetup
. أضِفmenuCategory="secondary"
إلىMenuItem
لتجنُّب إزالة الحزمة من الحزمة الخلفية. aosp/852869- تأخذ طُرق
fromBundle()
لفئاتArgs
التي تم إنشاؤها الآن قيمةBundle
غير فارغة بدلاً من قيمةBundle
nullable aosp/845616
إصلاح الأخطاء
- يتم الآن تحليل الوسيطات بشكل صحيح من الروابط لصفحات في التطبيق على أنّها
argType
الصحيحة بدلاً من استخدام سلاسل رمزية دائمًا b/110273284 - يتم الآن تصدير موارد Navigation المتاحة للجميع بشكل صحيح b/121059552
- أصبحت حِزم Safe Args متوافقة الآن مع الإصدار 3.4 Canary 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
و methods المرتبطَين بها. استخدِم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 مع العناصر القابلة للتسلسل، بما في ذلك قيم 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 args الآن تعتمد بشكل ثابت على الإصدار 3.2.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/113167627
- يمكن الآن إنشاء الاتجاهات للفصول الداخلية. b/117407555
- تم إصلاح مشكلة في إنشاء الاتجاهات إلى رسم بياني <include>. b/116542123
الإصدار 1.0.0-alpha06
20 أيلول (سبتمبر) 2018
الميزات الجديدة
- تتوفّر الآن انتقالات العناصر المشتركة لوجهتَي "الوحدة" و"النشاط" b/79665225. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تنفيذ التنقّل باستخدام مكوّن بنية التنقّل.
- سيؤدي اختيار عنصر في
NavigationView
إلى إغلاق أي ورقة سفلية تحتوي على b/112158843.
تغييرات واجهة برمجة التطبيقات
- تغيير جذري: تأخذ طريقة Navigator
navigate()
الآن مَعلمةNavigator.Extras
. - أصبحت طريقة
getGraph()
في NavController هيNonNull
b/112243286.
إصلاح الأخطاء
- لم يعُد
NavigationUI.setupWithNavController()
يُظهر عدد المشاهدات إذا تم استخدامه مع مشاهدات من وجهات فردية b/111961977 - يتم الآن استدعاء الملاح
onSaveState()
مرة واحدة فقط b/112627079
Safe Args
- تمديد فئات "اتّجاهات" لوجهة التنقّل الآن إلى فئة "اتّجاهات" الأصل إذا كانت متوفّرة b/79871405
- تتضمّن الآن صفتا Directions وArgs تنفيذًا مفيدًا
toString()
b/111843389
الإصدار 1.0.0-alpha05
10 آب (أغسطس) 2018
إصلاح الأخطاء
- تم إصلاح خطأ كان يتسبب في سلوك غير صحيح لسجلّ "التنقّل للخلف". b/111907708
- إصلاح خطأ في
equals()
من فئات Args التي تم إنشاؤها b/111450897 - حلّ مشكلة تعذُّر إنشاء حزمة في Safe Args b/109409713
- إصلاح عملية تحويل من معرّفات الموارد إلى أسماء Java b/111602491
- إصلاح رسائل الخطأ المتعلّقة بقيمة العدم في المكوّن الإضافي Safe Args
- أضِف التعليقات التوضيحية المفقودة حول إمكانية تحديد قيمة صفرية للسمة.
الإصدار 1.0.0-alpha04
July 19, 2018
يحتوي Navigation 1.0.0-alpha04
والمكوّن الإضافي المرتبط به 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
يحتوي Navigation 1.0.0-alpha03
والمكوّن الإضافي المرتبط به Safe Args gradle على عدد من التغييرات في واجهة برمجة التطبيقات وتغييرات في السلوك وإصلاحات للأخطاء.
تغييرات واجهة برمجة التطبيقات / السلوك
- تمت إضافة طريقة NavigationUI.setupWithNavController لـ Toolbar b/109868820
- تمت إضافة طريقة NavigationUI.setupWithNavController لـ CollapsingToolbarLayout b/110887183
- تعرض الدالة popBackStack() الآن القيمة false عندما تكون الحزمة الخلفية فارغة أو عندما لا يكون معرّف الوجهة المحدّد في الحزمة الخلفية 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.
إصلاح الأخطاء
- تم إصلاح المشاكل التي تحدث عند التنقّل أثناء طرق دورة حياة "القطعة" b/109916080
- تم إصلاح المشاكل المتعلّقة بالتنقّل في الرسومات البيانية المُدمجة عدّة مرّات b/110178671
- تم إصلاح المشاكل عند استخدام
setPopUpTo
مع الوجهة الأولى في الرسم البياني b/109909461. - تم حلّ المشكلة التي كانت تؤدي إلى تمرير جميع قيم
app:defaultValue
كسلسلة b/110710788. - يضيف الآن aapt2 المُضمّن في الإصدار التجريبي 01 من الإصدار 3.2 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" قواعد الاحتفاظ بكل سمة
android:name
في ملفات XML الخاصة بالتنقّل b/79874119. - تم إصلاح تسرب الذاكرة عند استبدال FragmentNavigator التلقائي b/110900142
الإصدار 1.0.0-alpha02
7 حزيران (يونيو) 2018
التغييرات في السلوك
يستخدم
FragmentNavigator
الآنsetReorderingAllowed(true)
. b/109826220تُفكّك ميزة التنقّل الآن ترميز عناوين URL للمَعلمات التي تم تحليلها من عناوين URL لالروابط لصفحات معيّنة في التطبيق. b/79982454
إصلاح الأخطاء
تم إصلاح
IllegalStateException
عند استدعاء التنقّل من طرق دورة حياة "القطعة". b/79632233يعتمد التنقّل الآن على مكتبة الدعم 27.1.1 لحلّ مشكلة الوميض عند استخدام الرسومات المتحركة. 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
.