التنقّل
التعديل الأخير | الإصدار المستقر | سحب المرشح | الإصدار التجريبي | إصدار أولي |
---|---|---|---|---|
21 آب (أغسطس) 2024 | 2.7.7 | 2.8.0-rc01 | - | - |
إعلان التبعيات
لإضافة اعتمادية على ميزة "التنقل"، يجب إضافة مستودع Google Maven إلى مشروعك. الاطّلاع على مستودع Maven من Google لمزيد من المعلومات.
أضِف الملحقات التابعة للعناصر التي تحتاجها في ملف build.gradle
لـ
لتطبيقك أو الوحدة التي تستخدمها:
Groovy
dependencies { def nav_version = "2.7.7" // 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" }
Kotlin
dependencies { val nav_version = "2.7.7" // 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") }
Safe Args
لإضافة الوسيطات الآمنة
إلى مشروعك، عليك تضمين classpath
التالي في ملف build.gradle
ذي المستوى الأعلى:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.7.7" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.7.7" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
ويجب أيضًا تطبيق أحد المكوّنات الإضافية المتاحة.
لإنشاء رمز لغة Java بشكل مناسب لوحدات Java أو وحدات Java أو Kotlin المختلطة، أضف
هذا السطر إلى ملف build.gradle
الخاص بالتطبيق أو الوحدة:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
وبدلاً من ذلك، يمكنك إضافة ما يلي لإنشاء رمز Kotlin المناسب للوحدات التي تعمل بلغة Kotlin فقط:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
يجب أن يكون لديك android.useAndroidX=true
في
ملف واحد (gradle.properties
) وفقًا لما ورد في
نقل البيانات إلى AndroidX
لمزيد من المعلومات حول استخدام إضافات Kotlin، يُرجى الاطّلاع على وثائق ktx.
لمزيد من المعلومات عن العناصر التابعة، يُرجى الاطّلاع على إضافة تبعيات الإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى إلقاء نظرة على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة تصويتك إلى مشكلة حالية عن طريق بالنقر فوق زر النجمة.
يُرجى الاطّلاع على مستندات أداة تتبُّع المشاكل. لمزيد من المعلومات.
الإصدار 2.8
الإصدار 2.8.0-rc01
21 آب (أغسطس) 2024
تم طرح androidx.navigation:navigation-*:2.8.0-rc01
. يحتوي الإصدار 2.8.0-rc01 على عمليات التنفيذ هذه.
إصلاح الأخطاء
- إصلاح عطل التنقل عند تمرير فئات التعداد ذات المستوى الأعلى كوسيطات آمنة للنوع. (I0ba76، b/358137294)
- يعمل التنقل 2.8 الآن بشكل صحيح مع 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، لا يتم دعم سوى التعدادات المدمجة في فئة أخرى في كل مرة. سيتم توفير تعدادات المستوى الأعلى في الإصدار التالي.
إصلاح الأخطاء
- عند الانتقال إلى وجهات مكرّرة أو مشتركة، سيعطي التنقّل الأولوية للانتقال إلى أقرب وجهة مطابقة من الموقع الجغرافي الحالي في الرسم البياني. (Ic89a4، b/352006850)
- تمت الآن إضافة
NavType.EnumType
جديدة من خلال ميزة التنقّل في الوسيطات الآمنة. وهذا يعني أنّ أنواع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 على عمليات التنفيذ هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم فحص أداة Lint لـ
WrongStartDestinationType
بحثًا عن عناصر 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
لتوضيح أنّ النتائج النهائية يجب أن تكون بترميز Uri. (Ida6bd، b/344943214) - تم إصلاح التعطُّل عند استدعاء
toRoute<T>
مع استخدام وسيطةCollectionNavType
فارغة. عند التنقّل باستخدام قيمةCollectionNavType
فارغة، ستكون وسيطة الإخراج هي القيمة التلقائية المُعلَنة في الفئة القابلة للتسلسل، أو القيمة المعروضة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 Serial. (Id4867، b/339080702)
إصلاح الأخطاء
- تمت إضافة مستندات المعلمات المفقودة لدوال التنقل Kotlin DSL. (I26a36)
الإصدار 2.8.0-alpha08
1 مايو 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha08
. تحتوي الإصدار 2.8.0-alpha08 على عمليات التنفيذ هذه.
الوسيطات الآمنة في ميزة "إنشاء التنقل"
- لقد اكتمل العمل على توفير الأمان من نوع وقت التجميع في ميزة Navigation Compose ومستخدمي Navigation Kotlin DSL المستنِد إلى تسلسل Kotlin، وأصبحت واجهات برمجة التطبيقات التجريبية في السابق مستقرة.
تستخدم هذه الوظيفة تسلسل Kotlin للسماح لك بتحديد الوجهات في الرسم البياني للتنقّل من خلال الكائنات الآمنة وفئات البيانات:
// 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-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" />
التغييرات في واجهة برمجة التطبيقات
- تابعنا دعم الوسيطات الآمنة في ميزة "إنشاء التنقل" باستخدام منهج يستند إلى تسلسل Kotlin. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه وتم وضع علامة عليها بالتعليق التوضيحي
ExperimentalSafeArgsApi
. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة عرض واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي. (Iefd95، وI409c8، I5b5ac وI7e753 وI960f8 وI3eabd وI8ed5a وIed2c9 وI9b73c وI9b73c وI554db02I3eabd وI8ed5a
الإصدار 2.8.0-alpha06
3 أبريل 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha06
. يحتوي الإصدار 2.8.0-alpha06 على عمليات التنفيذ هذه.
التغييرات في واجهة برمجة التطبيقات
- بدأ دعم "العمليات الآمنه" في ميزة "إنشاء التنقل" باستخدام نهج يستند إلى تسلسل Kotlin. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه وتم وضع علامة عليها بالتعليق التوضيحي
ExperimentalSafeArgsApi
. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة عرض واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي.
إصلاح الأخطاء
- يستخدم
NavHost
الآنAlignment.TopStart
كوسيطة contentAlignment التلقائية. وهذا يجعله متوافقًا مع الإعداد التلقائي لـ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
ViewModels ليصبحDESTROYED
في وقت قريب جدًا، لأنّViewModel
للإدخال المرتبط لم يكن جزءًا من الحالة المحفوظة. (Ib6bb7، b/317581849)
تعديل بشأن التبعية
- تعتمد ميزة إنشاء التنقل الآن على Compose 1.7.0-alpha03.
الإصدار 2.8.0-alpha02
7 فبراير 2024
تم طرح androidx.navigation:navigation-*:2.8.0-alpha02
. يحتوي الإصدار 2.8.0-alpha02 على هذه عمليات التنفيذ.
الميزات الجديدة
- توفِّر ميزة "إنشاء التنقل" الآن إمكانية عرض الإعلانات القائمة على التوقّعات داخل التطبيق من خلال واجهات برمجة تطبيقات
SeekableTransitionState
الجديدة من إنشاء الصور المتحركة. يتيح لك ذلك استخدام إيماءة الرجوع للاطّلاع على الوجهة السابقة مع النقل المخصص قبل اتخاذ قرار بتنفيذ المعاملة عبر الإيماءة المكتملة أو الإلغاء. (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)
تعديل بشأن التبعية
- تعتمد ميزة "إنشاء التنقل" الآن على إنشاء
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 على هذه الالتزامات.
إصلاح الأخطاء
- تراعي الدالة
equals()
NavGraph
الآن عُقد الرسم البياني الآخر بشكل صحيح بدلاً من العُقد المستدعية فقط. سيضمن ذلك أن الرسومات البيانية التي تحتوي على عُقد بمعرّفات مختلفة لن تُعتبر متساوية بعد الآن (I401cb، b/311414915)
الإصدار 2.7.5
الإصدار 2.7.5
1 تشرين الثاني (نوفمبر) 2023
تم طرح androidx.navigation:navigation-*:2.7.5
. يحتوي الإصدار 2.7.5 على هذه الالتزامات.
تحسينات الأداء
- أدخلتَ تحسينات كبيرة على الأداء (من حيث الوقت وعدد عمليات التخصيص) عند المقارنة بين رسمين بيانيين. وهذا يعني أنّ الطلبات مثل
setGraph
التي تقارن داخليًا الرسم البياني الجديد بالرسم البياني الحالي تكون أسرع بكثير وتؤدي إلى تخطي عدد أقلّ من اللقطات. شكرًا لك مايكل زد على التحليل الشامل الذي أدّى إلى هذا التحسين. (I6ad62) - سيعرض تطبيق "
NavHost
" الآن وجهة البدء على المقطوعة الموسيقية الأولى بدلاً من الانتظار حتى تتم قراءة الحالة المعدَّلة للبطاقة الثانية. (I439a7، b/304852206)
إصلاح الأخطاء
- تم إصلاح مشكلة ظهور حزمة الخلفية عند الاتصال بـ
setGraph
أكثر من مرة باستخدام الرسم البياني نفسه إلا إذا كانت هناك وجهة في الرسم البياني تحتوي على إجراء يربط بين وجهتين. (Ieaed7) - لن يتم نقل مربّعات الحوار التي تم الانتقال إليها وإغلاقها بتتابع سريع إلى قائمة
NavController.visibleEntries
بعد الآن. (I67586، b/287969970) - عند ظهور إدخال متبوعًا بتغيير في الإعدادات، سيتم الآن محو
ViewModel
للإدخال بشكل صحيح إذا كانsaveState
غير صحيح. (Idf242، b/298164648) - تم إصلاح مشكلة كانت تتسبب في معالجة
NavController
للرابط نفسه لصفحة في التطبيق أكثر من مرة إذا كانت حزمة الخلفية فارغة بالكامل قبل تغيير الإعدادات أو الاتصال بـsetGraph
فقط عند ضبط علامةFLAG_ACTIVITY_NEW_TASK
في كائن Intent الوارد. (I73c7f)
التحديثات المتعلقة بالاعتمادية
- يعتمد التنقل باستخدام أجزاء الآن على Fragment 1.6.2، ما يؤدي إلى إصلاح مشكلة عدم محو مثيلات
ViewModel
من الأجزاء المتداخلة عند استدعاءclearBackStack
.
الإصدار 2.7.4
الإصدار 2.7.4
4 أكتوبر 2023
تم طرح androidx.navigation:navigation-*:2.7.4
. يحتوي الإصدار 2.7.4 على عمليات الالتزام هذه.
الميزات الجديدة
- تمت إضافة إتاحة استخدام الدالة
popUpTo
لاستخدام المسارات مع الوسيطات للسماح بالرجوع إلى إدخال محدَّد يستخدم هذه الوسيطات الدقيقة، ما يؤدي إلى مطابقة البيانات المتوفّرة فيpopBackStack
. (I731f4، b/299255572)
إصلاح الأخطاء
- حلّ المشكلة التي تؤدي فيها مقاطعة عملية تنقُّل باستخدام
popUpTo
إلى تعطُّلFragmentNavigator
. (I3c848، b/301887045) - تم إصلاح المشكلة المتمثلة في تسبب ضغطة النظام على رجوع النظام في تحديث
currentDestination
بشكل صحيح لمطابقة الجزء المعروض. (Id0d6c، b/289877514) - ستنتقل الآن دورة حياة
DialogFragment
بشكل صحيح إلى الحالةRESUMED
عند إغلاق مربع الحوار الذي يظهر فوقها. (I88f0d، b/301811387)
الإصدار 2.7.3
الإصدار 2.7.3
20 أيلول (سبتمبر) 2023
تم طرح androidx.navigation:navigation-*:2.7.3
. يحتوي الإصدار 2.7.3 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح مشكلة في ميزة التنقل التي تتضمن أجزاءً تسبّبت في احتواء قائمة
visibleEntries
على إدخالات غير صحيحة. (I5caa9، b/288520638) - تم إصلاح مشكلة تسبّبت في عدم تلقّي معاودة الاتصال خلال مراحل نشاط
RESUMED
مع وجهة النافذة العائمة (مثلDialogs
وBottomsheets
وما إلى ذلك). (I3b866، b/287505132)
الإصدار 2.7.2
الإصدار 2.7.2
6 أيلول (سبتمبر) 2023
تم طرح androidx.navigation:navigation-*:2.7.2
. يحتوي الإصدار 2.7.2 على عمليات الالتزام هذه.
إصلاح الأخطاء
- يعتمد التنقّل الآن على دورة الحياة
2.6.2
، ما يؤدي إلى إصلاح التفاعل بينrememberSaveable
والميزةNavHost
في ميزة "إنشاء التنقل" التي قد تؤدي إلى استعادة حالةrememberSaveable
للوجهات وأي مثيلات لنظام التشغيلSavedStateHandle
يملكهاViewModel
بشكل صحيح بعد إيقاف العملية وإعادة تشغيلها. (b/298059596، b/289436035) - تم إصلاح مشكلة كانت تظهر عند عرض عدة مربّعات حوار ضمن ميزة "إنشاء التنقل" في آنٍ واحد، حيث تظهر مربّعات الحوار المحجوبة جزئيًا (على سبيل المثال، ليست في أعلى مربّع الحوار) في حالة مراحل نشاط
CREATED
بدلاً من حالةSTARTED
. (aosp/2728520، b/289257213) - تم إصلاح مشكلة كانت تظهر عند عرض عدة مربّعات حوار ضمن ميزة "إنشاء التنقل" في آنٍ واحد، حيث سيؤدي إغلاق مربّع الحوار العلوي في الوقت نفسه إلى توقُّف مربّع الحوار الجديد العلوي في حالة مراحل نشاط
STARTED
بدلاً من نقله بشكل صحيح إلىRESUMED
. (aosp/2629401، b/286371387) - لم تعد ميزة "التنقل الآمن" تنشئ مثيلاً لمهمتها بلهفة إذا لم يتم تنفيذها فعلاً. (I0e385، b/260322841)
تعديل بشأن التبعية
- تعتمد ميزة "إنشاء التنقل" الآن على الإصدار 1.5.1 من ميزة "إنشاء".
الإصدار 2.7.1
الإصدار 2.7.1
23 آب (أغسطس) 2023
تم طرح androidx.navigation:navigation-*:2.7.1
. يحتوي الإصدار 2.7.1 على عمليات الالتزام هذه.
إصلاح الأخطاء
- تم إصلاح مشاكل التنقل باستخدام ميزة Compose التي كان من الممكن فيها ظهور خطأ عند محاولة الوصول إلى
ViewModel
Lifecycle.State.DESTROYED
عند استخدامScaffold
. (I1dc11، b/268422136)
الإصدار
الإصدار
9 آب (أغسطس) 2023
تم طرح androidx.navigation:navigation-*:2.7.0
. يحتوي الإصدار 2.7.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 2.6.0
صور متحركة من Accompanist
والآن بعد أن أصبحت ميزة AnimatedContent
مستقرة، تمكّنا من نقل الرمز من Accompanist Navigation Animation إلى Navigation Compose نفسه.
وهذا يعني أنّ كل الدعم المتعلّق بإعداد عمليات النقل المخصّصة التي كانت متوفّرة في AnimatedNavHost
متاح مباشرةً في NavHost
.
لن يتمّ إجراء أيّ تغييرات إضافية على Accompanist Navigation Animation وسنتوقّف نهائيًا قريبًا، إلى جانب إرشادات حول كيفية العودة إلى ميزة Navigation Compose نفسها، ولكن ستكون عكس دليل نقل البيانات بدون الحاجة إلى إجراء أيّ تغييرات أخرى في واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار من Accompanist (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- يعترض NavHost الآن في ميزة "إنشاء التنقل" بشكل صحيح طلبات الرد على النظام حتى بعد "إيقاف النشاط" و"استئنافه". (Icb6de، b/279118447)
التحديثات المتعلقة بالاعتمادية
- يعتمد التنقل الآن على إنشاء
1.5.0
من1.1.0
.
الإصدار 2.7.0-rc01
26 تموز (يوليو) 2023
تم طرح androidx.navigation:navigation-*:2.7.0-rc01
. يحتوي الإصدار 2.7.0-rc01 على هذه عمليات التنفيذ.
إصلاح الأخطاء
- تم إصلاح مشكلة يُحتمل أن تظل حملا "
EnterTransition
" و"ExitTransition
" اللتان تم إنشاؤهما كجزء منNavHost
في الذاكرة حتى بعد إزالةNavHost
من التركيبة. (I893d0)
المشاكل المعروفة
- هناك مشكلة في الإصدار 2.6.x من ميزة التنقل، والتي من الممكن أن تؤدي إلى ظهور
IllegalArgumentException
عند التنقل باستخدام POPUpTo. ومن الممكن تجنب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على نحو مشابه للنصيحة المقترحة هنا. (b/287133013)
الإصدار 2.7.0-beta02
28 حزيران (يونيو) 2023
تم طرح androidx.navigation:navigation-*:2.7.0-beta02
. يحتوي الإصدار 2.7.0-beta02 على هذه الالتزامات.
إصلاح الأخطاء
- تحصل ميزة "إنشاء التنقل" الآن على الترتيب z المناسب للانتقالات المخصصة التي تستخدم التنقل مع الخيار
popUpTo
.(/Ib1c3a، b/285153947)
الإصدار 2.7.0-beta01
7 حزيران (يونيو) 2023
تم طرح androidx.navigation:navigation-*:2.7.0-beta01
. يحتوي الإصدار 2.7.0-beta01 على هذه الالتزامات.
إصلاح الأخطاء
- تعمل ميزة
NavHost
في ميزة "إنشاء التنقل" الآن على اعتراض طلبات معاودة النظام بشكل صحيح حتى بعد إجراءActivity
STOPPED
وRESUMED
. (Icb6de، b/279118447)
الإصدار 2.7.0-alpha01
24 أيار (مايو) 2023
تم طرح androidx.navigation:navigation-*:2.7.0-alpha01
. يحتوي الإصدار 2.7.0-alpha01 على هذه عمليات التنفيذ.
صور متحركة من Accompanist
والآن بعد أن أصبحت ميزة AnimatedContent
مستقرة، تمكّنا من نقل الرمز من Accompanist Navigation Animation إلى Navigation Compose نفسه.
وهذا يعني أنّ كل الدعم المتعلّق بإعداد عمليات النقل المخصّصة التي كانت متوفّرة في AnimatedNavHost
متاح مباشرةً في NavHost
.
لن يتمّ إجراء أيّ تغييرات إضافية على Accompanist Navigation Animation وسنتوقّف نهائيًا قريبًا، إلى جانب إرشادات حول كيفية العودة إلى ميزة Navigation Compose نفسها، ولكن ستكون عكس دليل نقل البيانات بدون الحاجة إلى إجراء أيّ تغييرات أخرى في واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار من Accompanist (0.31.2-alpha
). (b/197140101)
إصلاح الأخطاء
- من التنقل
2.6.0-rc02
: تم إصلاح مشكلة التنقل في الأجزاء حيث يؤدي التنقل باستخدامpopUpTo
وإخراج جزء من الحزمة الخلفية بدون إعادة إنشاء طريقة العرض إلى توقف النظام عن العمل مرة أخرى. (Ieb8d4، وb/281726455)
التحديثات المتعلقة بالاعتمادية
- يعتمد التنقّل الآن على "إنشاء"
1.5.0-beta01
.
الإصدار
الإصدار
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) و/أو إجراء و/أو نوع MIME ليكون صالحًا.
تغييرات مهمة على ميزة "التنقل" منذ الإصدار 2.5.0
- لم يعُد
NavHostFragment
يعترض زر الرجوع في النظام نفسه. يسمح هذا الإجراء لملفFragmentManager
الأساسي باستعادة النظام. يسمح ذلك لميزة Fragment1.7.0-alpha01
والإصدارات الأحدث بتوفير صورة متحركة لظهر قائم على التوقّعات داخل التطبيق على أجهزة Android U. - عند استخدام ميزة "التنقل" مع "الأجزاء"، ستؤدي محاولة تنفيذ
FragmentTransaction
يدويًا لإضافة جزء إلى حزمةFragmentManager
الخلفية إلى طرحIllegalArgumentException
. وبالتالي، عليك دائمًا إضافة الأجزاء عبر واجهة برمجة تطبيقاتnavigate()
. - عند استخدام السلسلة
${applicationId}
بالضبط كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط لملف XML للتنقّل، سيتم تلقائيًا ملء العنصر النائب تلقائيًا بـpackageName
للسياق عند تضخيم البيانات. - يستخدم
FragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وإبرازه. ويعني هذا أنّLifecycle
فيNavBackStackEntry
سينتظر الآن اكتمال التأثيرات الخاصة للجزء المُدخل والخروج قبل نقلLifecycle.State
الأخير. - يستخدم
DialogFragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وإبرازه. وهذا يعني أنّLifecycle
فيNavBackStackEntry
تنتظر الآن انتقالLifecycle
DialogFragment
إلىDESTROYED
قبل نقلها إلىDESTROYED
نفسها. - يتيح لك
NavHostFragment
الآن استردادNavController
فور إرفاقNavHostFragment
بـFragmentManager
، بدلاً منonCreate()
فقط. - يعتمد دعم التنقل لوحدات الميزات الديناميكية الآن على مكتبة عرض الميزات الدقيقة في Play.
- تعتمد ميزة "الوسيطات الآمنة أثناء التنقّل" الآن على الإصدار 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 على هذه عمليات التنفيذ.
إصلاح الأخطاء
- تم إصلاح مشكلة في ميزة التنقّل تتضمّن أجزاءً تؤدي إلى حدوث
IllegalStateException
في حال إزالة جزء من خلال التنقّل باستخدامpopUpTo
في عملية معاودة الاتصال فيonResume()
. (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
بدون حفظ الحالة في سياسة ComposeAllowed. يؤدي ذلك أيضًا إلى إصلاح الخطأ الذي يؤدي فيه الانتقال إلى الوجهات المرتبطة بإصدار الرسم البياني الجذري وحزمة الخلفية غير الصحيحة. (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) - عند استخدام ميزة "التنقل" مع "الأجزاء"، بعد استعادة الحالة، لن يحصل
Lifecycle
NavBackStackEntry
علىDESTROYED
عندما يكون الجزءDESTROYED
. (b/270610768)
الإصدار 2.6.0-alpha05
8 شباط (فبراير) 2023
تم طرح androidx.navigation:navigation-*:2.6.0-alpha05
. يحتوي الإصدار 2.6.0-alpha05 على هذه عمليات التنفيذ.
الميزات الجديدة
- أصبحت كل المسارات المتاحة في
NavController.popBackStack(route)
وNavController.getBackStackEntry(route)
وNavController.clearBackStack(route)
متوافقة مع جميع الوسيطات التي تم ملؤها جزئيًا أو كليًا. وتجدر الإشارة إلى أنّ الوسيطات يجب أن تكون مطابقة تمامًا لوسيطات الإدخال. (Iebd28 وIc678c وI3b37b وb/257514373) - يستخدم
FragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وإبرازه. ويعني هذا أنّLifecycle
فيNavBackStackEntry
سينتظر الآن اكتمال التأثيرات الخاصة للجزء المُدخل والخروج قبل نقلLifecycle.State
الأخير. (I3cb19، b/238686802) - يستخدم
DialogFragmentNavigator
الآن واجهات برمجة تطبيقات النقل عند التنقل فيNavBackStackEntries
وإبرازه. وهذا يعني أنّLifecycle
فيNavBackStackEntry
تنتظر الآن انتقالLifecycle
DialogFragment
إلىDESTROYED
قبل نقلها إلىDESTROYED
نفسها. (I53ee5، b/261213893)
التغييرات في واجهة برمجة التطبيقات
- توفّر
NavigatorState
الآن واجهة برمجة تطبيقاتprepareForTransition
للسماح لـNavigator
بنقلNavBackStackEntries
إلىLifecycle.State
المتوسطة. (I42c21، b/238686802) - يمكنك الآن الوصول إلى حزمة الخلفية المرتبطة بـ
NavGraphNavigator
أوComposeNavigator
من خلال الموقع الإلكتروني علىbackstack
. تعرضComposeNavigator
أيضًا الآن استدعاءonTransitionComplete()
لوضع علامة علىNavBackStackEntry
التي تم تنفيذ عملية التنقل أوpopBackStack
باعتبارها مكتملة. (I02062 وI718db وb/257519195)
إصلاح الأخطاء
- لن تعمل حالة المستكشف الآن عند استخدام واجهات برمجة تطبيقات
push/popWithTransition
، ويجري التعامل مع الإدخال حاليًا. (Iadbfa، b/261213893) - عند استخدام
launchSingleTop
معNavGraph
مدمَج، لن تتم إضافة جميع الوجهات التي تبدأ من الوجهة الأصلية إلىstartDestination
إلا بشكل صحيح إلى أعلى الحزمة. (Id4bea، b/253256629) - ستحلّ ميزة التنقّل الآن محلّ مثيل
DialogFragment
بشكلٍ صحيح عند الانتقال إلى الوجهة نفسها مع ضبط علامةlaunchSingleTop
على "صحيح". (I45b5a، b/149572817) - لن تتسبب ميزة التنقل SafeArgs بعد الآن في حدوث خطأ في التجميع عند استخدام وسيطات يبلغ طولها 19 حرفًا بالضبط. (Id60bc، b/257110095)
الإصدار 2.6.0-alpha04
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)
- تعتمد ميزة "الوسيطات الآمنة أثناء التنقّل" الآن على الإصدار 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
الآن على إصدار الجزء1.5.2
. (I00ba4) - لن يتم بعد الآن تعديل عنصر القائمة المحدّد عند الانتقال إلى وجهة
FloatingWindow
، مثل مربّع حوار. (I4cde8، b/240308330)
الإصدار 2.6.0-alpha01
7 أيلول (سبتمبر) 2022
تم طرح androidx.navigation:navigation-*:2.6.0-alpha01
. يحتوي الإصدار 2.6.0-alpha01 على هذه عمليات التنفيذ.
الميزات الجديدة
- إنّ عمليات دمج
setupWithNavController
فيNavigationUI
للعمل مع شريط التطبيق العلوي ستحلّل الآن القيمR.string
لوسيطاتReferenceType
المتوفّرة فيandroid:label
إلى قيم السلسلة بدلاً من إخراج العدد الصحيح للمورد الذي يتم إنشاؤه تلقائيًا. (I5f803، b/167959935) - تتيح
NavDeepLink
الآن القيم التلقائية للصفائف، ما يتيح إمكانية استخدام مَعلمات طلب البحث المتكرّرة التي سيتم ربطها بنوع مصفوفة الوسيطة. تتضمّنNavType
أيضًا طريقة تلقائية يمكن تجاوزها لدمج قيمتَين تم تحليلهما. (Id68c3، b/209977108) - عند استخدام السلسلة
${applicationId}
بالضبط كعنصر نائب في السمتَينapp:data
وapp:dataPattern
في عنصر النشاط لملف XML للتنقّل، سيتم تلقائيًا ملء العنصر النائب تلقائيًا بـpackageName
للسياق عند تضخيم البيانات. (إيابدي، b/234223561) - ستؤدي محاولة إنشاء
NavDeepLink
فارغة باستخدامnavDeepLink
Kotlin DSL إلى ظهور تحذير Lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى معرّف موارد منتظم (URI) و/أو إجراء و/أو نوع MIME ليكون صالحًا. (I08d2f، b/154038883)
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة دالة الإضافة
NavDestination
الجديدة لتحليل التصنيفات الديناميكية باستخدام الوسيطات على شكلandroid:label="{arg}"
إلى سلسلة. توفّر هذه السياسةReferenceType
وسيطات من خلال تحليل قيمR.string
إلى قيم السلسلة. (I07d89، b/236269380)
تغييرات السلوك
- إنّ
arguments
وarguments
الذي تم تمريره إلىOnDestinationChangedListener
هما الآن مجرد نسخة من الوسيطات غير القابلة للتغيير التي تم إنشاؤها عند الانتقال إلى الوجهة. وهذا يعني أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلىarguments
أو أمثلةOnDestinationChangedListener
الأخرى. (I676f5)
إصلاح الأخطاء
- من التنقل
2.5.2
: يحاول الانتقال الديناميكي الآن تثبيت وجهات الأنشطة من الوحدات الأخرى بشكل صحيح قبل الانتقال إليها. (Ia2c16، b/240292838) - من التنقل
2.5.2
: سيحل التنقل الآن محل مثيل الجزء بشكل صحيح عند الانتقال إلى الوجهة نفسها وتعيين علامةlaunchSingleTop
على "صحيح". (I5a2f1، b/237374580) - من التنقل
2.5.2
: تم إصلاحIllegalStateException
الناتج عن الانتقال إلى رسم بياني مُدمَج مزدوج يتشارك أحد الوالدَين مع وجهة بدء منبثقة جديدة. (I9f7cb، b/243778589)
الإصدار 2.5
الإصدار 2.5.3
24 تشرين الأول (أكتوبر) 2022
تم طرح androidx.navigation:navigation-*:2.5.3
. يحتوي الإصدار 2.5.3 على هذه الالتزامات.
إصلاح الأخطاء
- لن تتسبب
NavHost
بعد الآن في حدوثNoSuchElementException
في حال عدم توفّر وجهة يمكن إنشاءCrossfade
من خلالها. والآن، ستتخطّى المقطوعة الموسيقية فقط. (Ieb46e، b/253299416) - تم إصلاح مشكلة عدم حذف حالة Compose المحفوظة (على سبيل المثال، استخدامات
rememberSaveable
) وإزالتها عند ظهور وجهة من الحزمة الخلفية. (I64949)
الإصدار 2.5.2
7 أيلول (سبتمبر) 2022
تم طرح androidx.navigation:navigation-*:2.5.2
. يحتوي الإصدار 2.5.2 على عمليات الالتزام هذه.
إصلاح الأخطاء
- يحاول الانتقال الديناميكي الآن تثبيت وجهات الأنشطة من الوحدات الأخرى بشكل صحيح قبل الانتقال إليها. (Ia2c16، b/240292838)
- ستحلّ ميزة التنقّل الآن محلّ مثيل الجزء بشكل صحيح عند الانتقال إلى الوجهة نفسها وضبط علامة
launchSingleTop
على "صحيح". (I5a2f1، b/237374580) - تم إصلاح
IllegalStateException
نتيجة الانتقال إلى رسم بياني مزدوج متداخل يتشارك أحد الوالدين مع وجهة بدء بارزة جديدة. (I9f7cb، b/243778589)
تعديل بشأن التبعية
- يعتمد التنقّل
2.5.2
الآن على القسم1.5.2
. (aosp/2178734)
الإصدار 2.5.1
27 تموز (يوليو) 2022
تم طرح androidx.navigation:navigation-*:2.5.1
. يحتوي الإصدار 2.5.1 على هذه الالتزامات.
إصلاح الأخطاء
- لن تتسبب الدالة
Navigation Safe Args
بعد الآن في ظهور تحذيرات بشأن الإيقاف النهائي في الصفوف التي تم إنشاؤها، وذلك عند استخدام أنواع الوسيطات المخصّصة المحفوظة فيBundle
. (Id86ed، b/237725966)
التحديثات المتعلقة بالاعتمادية
- تعتمد مكتبة التنقّل الآن على رحلة المستخدِم
2.5.1
. (Ib4451) - تعتمد مكتبة التنقّل الآن على النشاط
1.5.1
. (I3efe8) - تعتمد مكتبة التنقّل الآن على القسم
1.5.1
. (I56177)
الإصدار 2.5.0
29 حزيران (يونيو) 2022
تم طرح androidx.navigation:navigation-*:2.5.0
. يحتوي الإصدار 2.5.0 على هذه الالتزامات.
تغييرات مهمة منذ الإصدار 2.4.0
- CreationExtras Integration: أصبح بإمكان
Navigation
الآن توفيرViewModelProvider.Factory
بدون حالة عبرCreationExtras
في دورة الحياة2.5.0
.
السجلات الآمنة أثناء التنقّل
- تمت ترقية الاعتمادية "
Android Gradle Plugin
" من قِبل "Navigation Safe Args
" للاعتماد على "7.0.4
"، ما أدّى إلى انخفاض التوافق مع إصدارات AGP قبل7.0
. - تمت إضافة معلومات عن سمة مساحة الاسم Builder.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 على هذه عمليات التنفيذ.
الميزات الجديدة
- تمت إضافة قاعدة Lint جديدة للتحذير من وضع عناصر
<deeplink>
داخل عناصر<activity>
في ملفnavigation.xml
.(Ic15a5، b/178403185)
إصلاح الأخطاء
- يتم الآن التخلص من النطاقات القابلة للإنشاء في
NavHost
وDialogHost
بالترتيب المتوقَّع، أي أنّه يتم التخلص من النطاقات الداخلية القابلة للإنشاء قبل الواجهة الخارجية. عناصر قابلة للإنشاء. (I157e6) - تستخدم ميزة التنقّل SafeArgs الآن
PathSensitivity.RELATIVE
فيArgumentsGenerationTask
للسماح بإمكانية تغيير موقع ذاكرة التخزين المؤقت. وهذا يعني أنّه يمكن إعادة استخدام إدخال ذاكرة التخزين المؤقت الآن من إصدار CI إلى إصدار محلي. (I5f67c، b/173420454) - تم تعديل قاعدة أداة Lint
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
بشكل صحيح. (I4ba2b، b/225394514) - تستند الآن قيمة
StateFlow
visibleEntries
التي يوفّرها "NavController
" إلى الحدّ الأقصى لمراحل نشاط الإدخال بدلاً من حالة "رحلة المستخدِم" الحالية. وهذا يعني أنّه حتى إذا انخفضت دورة حياة المضيف فيnavController
إلى أقل من STARTED، ستظل قائمة العناصر المرئية بالكامل كما هي. (I9e2a8، b/225394514) - يتيح
SavedStateViewFactory
الآن استخدامCreationExtras
حتى عند إعداده باستخدامSavedStateRegistryOwner
. وفي حال توفير إضافات، يتم تجاهل الوسيطات التي تم إعدادها. (I6c43b، b/224844583) - بإمكان
NavDeepLink
الآن تحليل Uris باستخدام معلَمة طلب بحث واحدة بدون قيمة. (I0efe8، b/148905489) - تُعتبر السلسلة الفارغة الآن وسيطات صالحة في الروابط لصفحات في التطبيق. (I70a0d، b/217399862)
- لن يتعطّل
Navigation Safe Args
بعد استخدام مساحات الاسم ولا يتوفّرAndroidManifest.xml
. (I17ccf، b/227229815)
الإصدار 2.5.0-alpha03
23 شباط (فبراير) 2022
تم طرح androidx.navigation:navigation-*:2.5.0-alpha03
. يحتوي الإصدار 2.5.0-alpha03 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- يمكنك الآن التنقّل بعد
CreationExtras
إلىby navGraphViewModels
لإنشاءViewModel
. (I29217، b/217618359)
إصلاح الأخطاء
- تتيح
NavDeepLinks
الآن بشكل صحيح أحرف الأسطر الجديدة المشفرة في معرّفات الموارد المنتظمة (URI) للمسارات/الروابط لصفحات في التطبيق. (I513d1، b/217815060) - سيعمل
CreationExtras
الآن بشكل صحيح عند استخدامه معNavBackStackEntries
لإنشاء ViewModels. (I69161، b/217617710) - توفّر ميزة "الوسيطات الآمنة أثناء التنقّل" الآن استخدام مساحة الاسم المحدَّدة
في
build.gradle
بدلاً من الحزمة في AndroidManifest. (I659ef، b/217414933)
الإصدار 2.5.0-alpha02
9 شباط (فبراير) 2022
تم طرح androidx.navigation:navigation-*:2.5.0-alpha02
. يحتوي الإصدار 2.5.0-alpha02 على هذه عمليات التنفيذ.
إصلاح الأخطاء
- من التنقل
2.4.1
: سيضبطNavHostFragment
الآن بشكلٍ صحيحOnBackPressedDispatcher
عند استخدام ربط العرض مع الرسوم البيانية المدمجة. (Ifbb51 ، b/214577959) - من التنقل
2.4.1
: عند الربط بصفحة معيّنة من خلالNavGraph
مدمَجة متعدّدة، ستتضمّن حزمة الخلفية الآن وجهات البدء المتوسطة بشكل صحيح. (I504c0، b/214383060)
الإصدار 2.5.0-alpha01
26 يناير 2022
تم طرح androidx.navigation:navigation-*:2.5.0-alpha01
. يحتوي الإصدار 2.5.0-alpha01 على هذه عمليات التنفيذ.
الميزات الجديدة
- يمكن دمج "
NavBackStackEntry
" الآن مع ViewModel CreationExtras، والذي تم تقديمه كجزء من رحلة المستخدِم2.5.0-alpha01
. (Ib9fe2، b/207012490)
إصلاح الأخطاء
- تم إصلاح مشكلة تتعلّق بإمكانية الوصول إلى
ViewModel
التي تم إنشاؤها. عبرby navGraphViewModels()
منonCreate()
للجزء ستفشل باستخدامIllegalStateException
. (I8a14d) - لن فكّ ترميز
NavDeepLink
الوسيطات مرّتين بعد الآن بدون داعٍ، مما يعني أنه يتم تمرير الوسيطات المناسبة الآن إلى وجهتك النهائية. (I31b0a، b/210711399)
الوسيطات الآمنة
- تعتمد ميزة "الوسيطات الآمنة" الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. يعني هذا أنّ منصات التنقّل الآمنة لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 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
" الآن بشكل صحيح استخدام أحرف أسطر جديدة مُشفَّرة مُضمَّنة في معرّفات الموارد المنتظمة (URI) للمسارات/الروابط لصفحات في التطبيق. (I513d1، b/217815060) - تم الرجوع إلى الصفحة السابقة من التنقّل
2.5.0-alpha03
: تتيح أداة Navigation SafeArgs الآن استخدام مساحة الاسم المحدَّدة. فيbuild.gradle
بدلاً من الحزمة في بيان AndroidManifest. (I659ef، b/217414933) - تم الرجوع إلى الخطوة السابقة من التنقل
2.5.0-alpha04
: لن يتعطّلNavigation Safe Args
بعد ذلك عند استخدام. مساحات الاسم ولا توجدAndroidManifest.xml
. (I17ccf، b/227229815) - تم الرجوع من خلال التنقل
2.5.0-alpha04
: تُعتبر السلسلة الفارغة الآن وسيطات صالحة في صفحة في التطبيق. . (I70a0d، b/217399862)
الإصدار 2.4.1
الإصدار 2.4.1
9 شباط (فبراير) 2022
تم طرح androidx.navigation:navigation-*:2.4.1
. يحتوي الإصدار 2.4.1 على عمليات الالتزام هذه.
إصلاح الأخطاء
- سيضبط
NavHostFragment
الآنOnBackPressedDispatcher
بشكل صحيح عند استخدام ربط العرض مع الرسوم البيانية المدمجة. (Ifbb51 ، b/214577959) - عند إنشاء روابط لصفحات في التطبيق من خلال عدة عناصر
NavGraph
مدمَجة، ستتضمّن حزمة الخلفية وجهات البدء المتوسطة بشكل صحيح. (I504c0، b/214383060) - الرجوع إلى الإصدار السابق من التنقل
2.5.0-alpha01
: تم إصلاح مشكلة تم فيها إنشاء الوصول إلى نموذج عرض. عبرby navGraphViewModels()
منonCreate()
الخاص بـ Fragment سيفشل باستخدامIllegalStateException
. (I8a14d) - تم الرجوع من خلال التنقل
2.5.0-alpha01
:NavDeepLink
لم يعُد فك ترميز الوسيطات غير ضروري مرتين، مما يعني أنه يتم تمرير الوسيطات التي تم فك ترميزها بشكل صحيح إلى وجهتك النهائية. (I31b0a، b/210711399) - تم الرجوع إلى إصدار سابق من التنقّل
2.5.0-alpha01
: تعتمد الوسيطات الآمنة الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. ويعني هذا أنّ منصات التنقّل الآمنة لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنّها متوافقة الآن مع المكوّن الإضافي "7.1.0" لنظام Gradle المتوافق مع Android والإصدارات الأحدث. (I41c88، b/213086135، b/207670704)
الإصدار
الإصدار
26 يناير 2022
تم طرح androidx.navigation:navigation-*:2.4.0
. يحتوي الإصدار 2.4.0 على عمليات الالتزام هذه.
تغييرات مهمة منذ الإصدار 2.3.0
- تمت إعادة كتابة جميع عناصر التنقل بلغة Kotlin. وقد أدّى ذلك إلى تحسين قابلية القيم الفارغة للفئات التي تستخدم الأنواع العامة (مثل
NavType
فئة فرعية). تم نقل جميع وظائف إضافة Kotlin التي كانت جزءًا من عناصر-ktx
إلى العناصر الرئيسية الخاصة بها. سيستمر نشر العنصرَين (-ktx
)، ولكنّهما فارغان تمامًا. - تحتوي عناصر
navigation-fragment
الآن على تنفيذ مُعَدّ مسبقًا لتنسيق من جزأين من خلالAbstractListDetailFragment
الجديد. يستخدم هذا الجزءSlidingPaneLayout
لإدارة لوحة القوائم (التي توفِّرها فئتك الفرعية) وجزء التفاصيل الذي يستخدمNavHostFragment
لتنفيذه، كما هو موضّح في مثال التنفيذ. - توفّر طريقة
currentBackStackEntryAsFlow()
علىNavController
طريقةFlow
تنبعث منها كلما تغيّرت قيمةNavBackStackEntry
الحالية. يمكن استخدام هذا المسار كبديل لإدارةOnDestinationChangedListener
يدويًا. - توفّر NavController الآن القدرة على استرداد قائمة بجميع مثيلات
NavBackStackEntry
المرئية باعتبارهاStateFlow
من خلال سمةvisibleEntries
التجريبية. - يمكن الآن توسيع فئة
NavType
لإنشاء أنواع NavTypes المخصصة. لا يتم اعتماد الأنواع المخصصة إلا عند إنشاء الرسم البياني للتنقل آليًا، على سبيل المثال عبر التنقُّل في الرسم البياني بلغة Kotlin DSL. توفّر ميزة التنقّل الآن واجهتَي برمجة تطبيقات
findStartDestination()
وgetHierarchy()
يمكن استخدامهما للمساعدة في تنفيذ واجهة NavigationUI المخصّصة.findStartDestination()
هي دالة إضافة علىNavGraph
تحدّد وجهة البدء الفعلية التي سيتم عرضها عند الانتقال إلى الرسم البياني، حتى إذا كانتstartDestination
في حد ذاتهاNavGraph
مدمجة.getHierarchy()
هي دالة فيNavDestination
يمكن استخدامها للتحقق مما إذا كانت وجهة معينة ضمن التسلسل الهرمي لجهة أخرى.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل
NavigationUI
طريقة لاستخدامBottomNavigationView
لتستخدم درجتها الفائقة ضِمن المادة1.4.0
NavigationBarView
. ويتيح ذلك استخدام هذه الطرق معNavigationRailView
.عند تضخيم عنصر
<action>
عبر XML، يمكن أن تستخدم سمات الصور المتحركة سمات تم استخلاصها من المظهر باستخدام بنيةapp:enterAnim="?attr/transitionEnter"
.تُنشئ أداة "الوسيطات الآمنة" الآن طريقة
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
التي تم إنشاؤها تلقائيًا أو "الوسيطات الآمنة" (التي تستخدم هذه الثوابت لإنشاء رمز برمجي في وقت الإصدار)، إلا أنّ هذا النظام المكوّن من الأعداد الصحيحة الفريدة لم يلتقط المعنى الدلالي والقدرة على التعبير المطلوبَين لتوفير الرسوم البيانية الديناميكية بالكامل التي تم إنشاؤها آليًا في وقت التشغيل عبر التنقل Kotlin DSL.
يقدّم هذا الإصدار خيارًا جديدًا لتحديد وجهة بشكل فريد في الرسم البياني للتنقل من خلال مسارها. المسار هو String
الذي يحدد المسار الفريد إلى وجهة. تم إيقاف جميع طرق Kotlin DSL التي استخدمت رقم تعريف وجهة نهائيًا واستبدالها بواجهة برمجة تطبيقات مكافئة توجِّه مسارًا.
يجب التعامل مع كل مسار على أنّه جزء "المسار" في Uri
الذي يحدّد هذه الوجهة. home
وprofile/{userId}
وprofile/{userId}/friends
وغير ذلك. عندما تكون هوية الوجهة مرتبطة بجزء معيّن من المحتوى، يجب أن تكون هذه الوسيطات الديناميكية جزءًا من المسار، تتّبع القواعد نفسها المتّبعة في الروابط الضمنية لصفحات معيّنة في التطبيق.
تتضمن جميع واجهات برمجة التطبيقات التي تستخدم "NavController
" والتي كانت تستقبل رقم تعريف فقط الآن حملاً زائدًا يستغرق مسارًا String
. ويشمل ذلك navigate()
وpopBackStack()
وpopUpTo()
وgetBackStackEntry()
.
وينتج عن ذلك بعض الآثار المترتبة على واجهة برمجة التطبيقات:
- تم إيقاف موقع
popUpTo
Kotlin على Kotlin DSL نهائيًا لصالحpopUpToId
- تم إيقاف
getStartDestination()
API لصالح الخدمة. منgetStartDestinationId()
.
على عكس التنقّل باستخدام رقم التعريف، تتّبع التنقّل بالمسار القواعد نفسها المتّبعة في الروابط الضمنية لصفحات معيّنة في التطبيق، إذ يمكنك الانتقال مباشرةً إلى أي وجهة في أي رسم بياني مدمج، ما يضمن إمكانية استخدام هذه المسارات في مشاريع متعددة الوحدات بدون إضافة رابط لصفحة معيّنة يظهر خارجيًا بشكلٍ صريح إلى كل وجهة.
إنشاء التنقل
توفّر عناصر navigation-compose
التكامل بين مكوِّن التنقّل وJetpack Compose. وهو يستخدم وظائف @Composable
كوجهات في تطبيقك.
يوفّر هذا الإصدار ما يلي:
- عنصر
NavHost
قابل للإنشاء يتيح لك إنشاء رسم بياني للتنقّل من خلال لغة Kotlin DSL، باستخدام وجهتَيcomposable
وdialog
، بالإضافة إلى إتاحة استخدام برامج التنقّل الاختيارية، مثل مواد التنقّل المصاحبة. - دعم إلزامي للتداخل بين الوجهات يمكن استخدام حركة التنقل المصاحب للتحكم في انتقالات الدخول والخروج باستخدام واجهات برمجة تطبيقات Compose التجريبية.
- نطاق
Lifecycle
لكل وجهة قابلة للإنشاء لا تصل كل وجهة إلى الحالةRESUMED
إلا عند انتهاء أي انتقالات دخول وتنخفض فورًا إلىSTARTED
عند بدء أي عمليات انتقال تؤدّي إلى الخروج، ما يسمح لك بتجنُّب جميع مشاكلIllegalStateException
واللمس المتعدد من خلال بدء استدعاءnavigate
فقط عندما يكونLifecycle
هوRESUMED
. - نطاق
ViewModel
(عبر واجهة برمجة تطبيقاتviewModel()
لـ Lifecycle ViewModel Compose2.4.0
أوhiltViewModel()
من ميزة إنشاء التنقّل في Hilt1.0.0
على مستوى الوجهة، ما يوفّر نطاقًا يبقى يحافظ على التغييرات في الإعدادات ويظهر في الحزمة الخلفية (عندما يتم التخلص من المحتوى القابل للإنشاء بطريقة أخرى) وإشارة في نموذج ViewonCleared()
تشير إلى التخلص الدائم وتنظيف الحالة المرتبطة بهذاNavBackStackEntry
. - تحديد نطاق
rememberSaveable
على مستوى الوجهة، مع ضمان حفظ جميع الحالات القابلة للإنشاء واستعادتها تلقائيًا عند العودة إلى الوجهة - الدعم الكامل لحفظ واستعادة حالة
NavController
وحالة الوجهة بعد وفاة العملية وإعادة إنشائها - الدمج التلقائي مع زر الرجوع للنظام
دعم تمرير الوسيطات، وإرفاق روابط لصفحات في التطبيق بالوجهات، وعرض نتيجة إلى وجهات سابقة.
يمكنك إنشاء عناصر مساعدة محدَّدة في
rememberNavController()
وcurrentBackStackEntryAsState()
للسماح بحالة الرفع وربطNavController
بالعناصر القابلة للإنشاء خارجNavHost
(مثل شريط التنقّل السفلي).
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
راجع إنشاء دليل التنقل للحصول على مزيد من المعلومات.
عدة حزم إضافية
تكون NavController مسؤولة عن إدارة الحزمة الخلفية للوجهات وإضافة الوجهات إلى الحزمة الخلفية عند navigate()
إليها وإزالتها عند طلب popBackStack()
أو تشغيل زر الرجوع في النظام. تم توسيع فئة NavOptions
الحالية ودمجها في عناصر <action>
في ملف XML للرسم البياني للتنقّل لإتاحة حفظ الحزمة الخلفية واستعادتها.
وفي إطار هذا التغيير، تعمل الآن الطُرق NavigationUI
في onNavDestinationSelected()
وBottomNavigationView.setupWithNavController()
وNavigationView.setupWithNavController()
على حفظ حالة الوجهات المنبثقة واستعادتها تلقائيًا، ما يتيح دعم حزم البيانات الخلفية المتعددة بدون إجراء أي تغييرات على الرموز. عند استخدام ميزة التنقل مع الأجزاء، تكون هذه هي الطريقة الموصى بها للدمج مع حزم خلفية متعددة.
تظهر واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:
في ملف XML الخاص بالتنقل، يمكن لعنصر
<action>
الآن استخدام السمتين المنطقيتينapp:popUpToSaveState
وapp:restoreState
لحفظ حالة أي وجهات تم تمييزها عبرapp:popUpTo
واستعادة الحالة المرتبطة بالوجهة التي تم تمريرها كـapp:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
في
navOptions
Kotlin DSL، يمكنك إضافة السمة المنطقيةrestoreState
والسمة المنطقيةsaveState
في أداة إنشاءpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
عند إنشاء عنصر
NavOptions
يدويًا من خلالNavOptions.Builder
، يمكنك استخدامsetRestoreState()
والتحميل الزائد الجديد إلىsetPopUpTo()
والذي يتطلب مَعلمةsaveState
إضافية.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
يمكن أن تتضمّن المكالمات الآلية إلى
popBackStack()
الآن مَعلمةsaveState
إضافية.يمكنك استخدام الطريقة
clearBackStack()
لمحو أي حالة تم حفظها باستخدامpopBackStack()
أوpopUpToSaveState
.
في جميع الحالات، ستحفظ NavController
حالة كل NavBackStackEntry
وتستعيدها، بما في ذلك أي حالات ViewModel
على مستوى وجهة التنقّل. تم تحديث واجهات برمجة التطبيقات في Navigator
للسماح لكل Navigator
بإتاحة حفظ حالتها الخاصة واستعادتها.
تغيّرات السلوك
- تتم الآن إضافة "
NavDeepLinkBuilder
"PendingIntent.FLAG_IMMUTABLE
للوصول إلىPendingIntent
التي تم إرجاعها بواسطةcreatePendingIntent()
، مع ضمان تعمل واجهة برمجة التطبيقات هذه على النحو المتوقَّع عند استهداف الإصدار 12 من نظام التشغيل Android. - يعتمد التنقل الآن على
دورة الحياة
2.3.1
وأصبحت الآنsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، الطرق التي تعمل على تحديثNavBackStackEntry
Lifecycle
، كـ@MainThread
، محاذاة التنقل مع سلسلة المحادثات الرئيسية تم إدخال إجراء التنفيذ في دورة الحياة2.3.0
. - إنّ الروابط المؤدية إلى صفحات في التطبيق تتحقّق الآن من أنّ جميع الوسيطات المطلوبة (التي لا تتضمّن قيمًا تلقائية) متوفّرة في
Uri
. - تراعي الوسيطات التحليلية في
NavDeepLink
الآن علامات الجنيه بالطريقة نفسها التي تستخدمها علامات الاستفهام باعتبارها فاصلاً بين أجزاء المسار، ما يمنع امتداد الوسيطة عبر علامة الجنيه. - عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من "الوسيطات الآمنة" الآن وسيطات بدون القيم الافتراضية قبل تلك التي تحتوي على القيم الافتراضية كمعلمات.
- عند إنشاء الوسيطات، تضع "الوسيطات الآمنة" الآن المعلَمات بدون القيم الافتراضية قبل تلك ذات القيم الافتراضية.
- تعتمد ميزة "المتوسطات الآمنة" الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. هذا يعني أنّه من المفترض ألا يصلك تحذير
applicationIdTextResource
باستخدام هذا التحذير.
المشاكل المعروفة
- تم الإصلاح في التنقل
2.5.0-alpha01
: جارٍ الوصول إلىViewModel
تم إنشاؤه عبرby navGraphViewModels()
منonCreate()
الخاص بـ Fragment وسيتعذّر تنفيذ الإجراء باستخدامIllegalStateException
. (b/213504272) - تم الإصلاح في التنقل
2.5.0-alpha01
: الإصدار 2.4.0 من الوسيطات الآمنة غير متوافق مع الإصدار 7.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث. (b/213086135) - لا يؤدي الربط لموضع معيّن مع العديد من الرسوم البيانية المتداخلة للتنقل بشكل صحيح إلى إنشاء .backstack. (b/214383060)
الإصدار 2.4.0-rc01
15 كانون الأول (ديسمبر) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-rc01
. يحتوي الإصدار 2.4.0-rc01 على هذه عمليات التنفيذ.
تغيّرات السلوك
- تعتبر الوسيطات التحليلية في
NavDeepLink
الآن علامات الجنيه بنفس طريقة استخدام علامات الاستفهام كفاصل بين الوسيطات. (I21309، b/180042703)
إصلاح الأخطاء
- لن تتجاهل الروابط لصفحات في التطبيق الوسيطات التي تحتوي على قيم مماثلة لاسم العنصر النائب. (If8017، وb/207389470)
- لن يتعطّل
NavController
بعد الآن عند ظهور وجهة مدمَجة باستخدام الانتقالات بعد استعادةNavController
. (I0f7c9، b/205021623) - سيتم الآن ضبط رسالة الخطأ عند استخدام
startDestination
غير صالح على مسار وجهة البدء في حال توفّر مسار. (I86b9d، b/208041894)
إصلاح الأخطاء في إنشاء التنقل
- تم إصلاح التعطُّل المحتمل الناتج عن التبديل السريع بين وجهة البدء ووجهة أخرى باستخدام عناصر قائمة التنقّل السفلية. (Ic8976، b/208887901)
- تتم الآن استعادة وجهة مربّع الحوار بشكل صحيح في أعلى الشاشة بعد تغيير الإعدادات أو انتهاء العملية. (I4c0dc، b/207386169)
- تم إصلاح مشكلة تعذُّر محاولة استرداد
ViewModel
منNavBackStackEntry
في مربّع الحوار عند إغلاق مربّع الحوار. (I6b96d، b/206465487) - تم إصلاح مشكلة عند استخدام وجهات
activity
معNavHost
في ميزة "إنشاء التنقل" والتي كانت تؤدي إلى عمليات إعادة تركيب غير محدودة. (I8f64c) - تم إصلاح تسرُّب في ميزة "إنشاء التنقل" حيث كان محتفظًا بمرجع للنشاط القديم بعد تغيير في الإعدادات أو توقُّف العملية. (I4efcb، b/204905432)
إصلاح أخطاء الوسيطات الآمنة
- لم يعد
SafeArgs
يتعطّل عند محاولة استعادة المصفوفات القابلة لنقل البيانات المخصّصة بعد انتهاء العملية. (I618e8، b/207315994) - تم إصلاح خطأ في الوسيطات الآمنة التي لا تسمح بأن تحتوي الصفائف المنطقية على قيمة
null
. (I8c396، b/174787525)
الإصدار 2.4.0-beta02
3 تشرين الثاني (نوفمبر) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-beta02
. يحتوي الإصدار 2.4.0-beta02 على عمليات التنفيذ هذه.
التغييرات في واجهة برمجة التطبيقات
- معالجة كل من المحتوى الفاضح والضمني
الروابط المؤدية إلى صفحات في التطبيق تضيف الآن علامة
saveState
تلقائيًا عند الانتقال إلى رسم بياني آخر، فإن التأكد من أن هذا الرمز مثلNavigationUI.setupWithNavController
الرمز باستخدام حزم خلفية متعددة كما هو متوقع. (Ic8807)
تغييرات السلوك
- يتم الآن تجميع أنماط الروابط المؤدية إلى صفحات في التطبيق بشكل بطيء في NavDeepLink بدلاً من تجميعهما أثناء التضخم. من المفترض أن يؤدي ذلك إلى تحسين وقت التضخم في الرسوم البيانية للتنقل التي تتضمّن روابط لصفحات في التطبيق. (b8d257، b/184149935)
إصلاح الأخطاء
- تم إصلاح مشكلة دفع NavBackStackEntries إلى
Lifecycle.State.CREATED
بعد الانتقال إلىLifecycle.State.STARTED
عند تتم إضافةNavHost
مباشرةً إلىsetContent()
الخاص بالنشاط. (Ia5ac1، b/203536683) - تم إصلاح شرط سباق حيث
إزالة وجهة
DialogFragment
من حزمة الرجوع قبل ظهور مربع الحوار فعليًا عدم إغلاق مربع الحوار في الواقع، مما يؤدي إلى تعطُّل عند إدخال مربّع حوار الخطأ يدويًا رفضها المستخدم. (I687e5) - تم إصلاح المشكلة المتمثلة في
ستبدأ واجهة برمجة تطبيقات
onNavDestinationSelected
علىNavigationUI
إرجاعtrue
حتى لو لم تقم بالفعل بـnavigate()
إلى مخطط التنقل هذا. إنه يستخدم الآن نفس المنطق يتم استخدامه داخليًا من قِبلsetupWithNavController
من أجل فقط اختَر قيمةMenuItem
المرتبطة بالحساب الحالي الوجهة باستخدامhierarchy
للوجهة. (I2b053)
الإصدار 2.4.0-beta01
27 تشرين الأول (أكتوبر) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-beta01
. يحتوي الإصدار 2.4.0-beta01 على هذه الالتزامات.
الميزات الجديدة
- يمكنك الآن استخدام
by navGraphViewModel
مع مسار كبديل لاستخدام رقم تعريف معيّن للاستفادة بشكل أفضل من استخدام ميزة Navigation Kotlin DSL التي تتضمّن أجزاءً. (I901e3، b/201446416)
التغييرات في واجهة برمجة التطبيقات
- لا تزال واجهة برمجة التطبيقات
visibleEntries
في مرحلة تجريبية. (I93f6f)
إصلاح الأخطاء
- لن يتم تلف عرض النماذج بعد ذلك عند إيقاف عمليات النقل تتم مقاطعتك من خلال التنقل ذهابًا وإيابًا بين الشاشات نفسها (Id52d8، وb/200817333)
- لم تعد وسيطات
NavDeepLink
فارغة. تتطلب قيمة تلقائية عند إضافة روابط لصفحات في التطبيق إلىNavDestination
(I5aad4، b/201320030) - ما مِن دورات حياة مختلفة في NavBackStackEntries تعد متساوية. وهذا يعني أن NavHost سيعيد ابتكار جميع الوجهات عند إجراء التنقل باستخدام oneTop وعند إعادة الاختيار عناصر القائمة السفلية. (I1b351، b/196997433)
- تم إصلاح مشكلة في "
AbstractListDetailFragment
" التي تسبّبت في السمتَينlayout_width
وlayout_weight
في جزء القائمة الذي يعرضهonCreateListPaneView()
إلى يتم التعامل معها أو تجاهلها بشكل غير صحيح. (f5fbf3) - الحالة المرئية لوجهات مربّعات الحوار الآن
يبقى متزامنًا بشكلٍ صحيح مع إعدادات "
DialogFragmentNavigator
" الولاية. وهذا يعني أن استدعاء النماذج غير المتزامنة يدويًا تمحو الآن واجهة برمجة التطبيقاتdismiss()
لـDialogFragment
جميع المهام بشكل صحيح وجهات مربّعات الحوار فوق مربّع الحوار الذي تم إغلاقه الآن. هذا النمط لا تؤثّر في الحالات التي تستخدم فيهاpopUpTo
أوpopBackStack()
لإغلاق مربع الحوار. (I77ba2) AbstractAppBarOnDestinationChangedListener
الآن رسائل خطأ أوضح بخصوصonDestinationChanged()
. (Ie742d)
الإصدار 2.4.0-alpha10
29 أيلول (سبتمبر) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha10
. يحتوي الإصدار 2.4.0-alpha10 على هذه عمليات التنفيذ.
الميزات الجديدة
- توفّر NavController الآن القدرة على استرداد قائمة بجميع
NavBackStackEntry
مثيلات عبرvisibleEntries
StateFlow (Ia964e) - على
rememberNavController()
إجراء خطوة اختيارية الآن مجموعة منNavigator
مثيل ستتم إضافتها إلى تم إرجاعNavController
للحصول على دعم أفضل بشكل اختياري المتنقلون مثل أولئك الذين يجرون مواد التنقّل المصاحبة: (I4619e)
إصلاح الأخطاء
- لن يتعطل الانتقال الديناميكي بعد الآن عندما يكون النشاط إعادة إنشائه. (Ifa6a3 وb/197942869)
- تم إصلاح مشكلة متعلقة بزر الرجوع في النظام لا تحدث إلا بعد الرجوع إلى وجهة قابلة للإنشاء تحتوي على
NavHost
. (3ed148، b/195668143) - تنشئ SafeArgs الآن وسيطات
fromBundle()
وfromSavedStateHandle()
بترتيب المعلمة الصحيح. (I824a8، b/200059831)
الإصدار 2.4.0-alpha09
15 أيلول (سبتمبر) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha09
. يحتوي الإصدار 2.4.0-alpha09 على هذه عمليات التنفيذ.
الميزات الجديدة
- يمكنك الآن استخدام طريقة
clearBackStack()
لمحو أي حالة تم حفظها باستخدام "popBackStack()
" أوpopUpToSaveState
. (I80a0f) - يمكنك الآن تمرير قائمة بالوسيطات و/أو روابط لمواضع معينة إلى أداة إنشاء الرسم البياني للتنقل المتداخل وستتم إضافتها تلقائيًا إلى الرسم البياني الناتج. (I8a470، b/182545357)
التغييرات في واجهة برمجة التطبيقات
- أصبحت دالة
navArgument
Kotlin DSL الآن جزءًا منnavigation-common
بدلاً منnavigation-compose
سيتطلب ذلك وتحديث عمليات الاستيراد لمواصلة استخدام هذه الدالة. (I1d095)
تغييرات السلوك
- عند إنشاء الوسيطات، تضع "الوسيطات الآمنة" الآن المعلَمات بدون القيم الافتراضية قبل تلك ذات القيم الافتراضية. (I89709، b/198493585)
إصلاح الأخطاء
- عند استخدام ميزة "إنشاء التنقل"، ستصبح NavGraphs
DESTROYED
بعد بلوغ كل أطفالهمDESTROYED
. (I86552، b/198741720) - لم تعد وسيطات
NavDeepLink
فارغة. تتطلب قيمة افتراضية. (Ia14ef، b/198689811) - الاتصال بالرقم
setGraph()
باستخدام رسم بياني جديد سنمحو الآن أيضًا أي حزم خلفية محفوظة بالإضافة إلى إلى سلوكه السابق المتمثل في تمييز المكدس الخلفي. (I97f96) - تم إصلاح المشكلة المتمثلة في
OnDestinationChangedListener
مثيل و لم يتم إشعارcurrentBackStackEntryFlow
عندما باستخدامlaunchSingleTop
. (Iaaebc)
التحديثات المتعلقة بالاعتمادية
- تعتمد ميزة إنشاء التنقل الآن على إنشاء النشاط 1.3.1: (I05829)
- تعتمد ميزة إنشاء التنقل الآن على
إنشاء نموذج العرض لدورة الحياة
2.4.0-beta01
: (Ib86a3)
الإصدار 2.4.0-alpha08
1 أيلول (سبتمبر) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha08
. يحتوي الإصدار 2.4.0-alpha08 على هذه عمليات التنفيذ.
الميزات الجديدة
- يمكن الآن توسيع فئة
NavType
لإنشاء أنواع NavTypes المخصصة. لا يتم اعتماد الأنواع المخصصة إلا عند إنشاء الرسم البياني للتنقل آليًا، على سبيل المثال عبر التنقُّل في الرسم البياني بلغة Kotlin DSL. (I78440، b/196871885)
تغييرات السلوك
- عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من "الوسيطات الآمنة" الآن وسيطات بدون القيم الافتراضية قبل تلك التي تحتوي على القيم الافتراضية كمعلمات. (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) - لم يعد منشئ جافا 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)- تم إصلاح مشكلة تتمثل في إغلاق
لن يقوم
DialogFragment
بتحديث بشكل صحيح حالةNavController
بعد إعادة إنشاء نشاطك (أي بعد تغيير الإعدادات). (Icd72b) - تم إصلاح مشكلة ظهور لن تؤدي وجهة مربع الحوار هذه إلى تحديث إلى أن تصبح معالجة زر الرجوع في النظام NavController لاعتراض زر الرجوع على الرغم من عدم احتوائه على أي حزمة خلفية لفصله. (If3b34)
- تعمل الوسيطات الآمنة الآن على إنشاء
toSavedStateHandle
تلقائيًا للوسيطات التي يمكن استخدامها لاختبار رمزViewModel
. (If1e2d، وb/193353880)
الإصدار 2.4.0-alpha06
4 آب (أغسطس) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha06
. يحتوي الإصدار 2.4.0-alpha06 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- تمت إعادة تسمية الطريقتَين
requireSlidingPaneLayout()
وrequireDetailPaneNavHostFragment()
فيAbstractListDetailFragment
إلىgetSlidingPaneLayout()
وgetDetailPaneNavHostFragment()
على التوالي. (I34a08)
تغييرات السلوك
- عند التنقّل باستخدام الصور المتحركة (مثل
Crossfade
)، لن تصل الآنLifecycle
في الوجهة الجديدة إلىRESUMED
إلا عند اكتمال الحركة. (If0543 وb/172112072 وb/194301889) - يضبط
NavHost
في ميزة "إنشاء التنقل" الآن الرسم البياني كجزء من المقطوعة الأولى. (Ieb7be)
إصلاح الأخطاء
- لم يعد دفع الوجهة الأخيرة من الرسم البياني للتنقل يؤدي إلى ظهور
ClassCastException
. (If0543 وb/172112072 وb/194301889) - تم إصلاح
NullPointerException
الذي يحدث عند إضافة رابط لصفحة في التطبيق بدونUri
والتنقل عبر مسار أو رابط لصفحة في التطبيق. (938a0c، b/193805425) - تم إصلاح مشكلة في ميزة "إنشاء التنقل" حيث
لن تصل قيمة
NavBackStackEntry
المرتبطة بصفحات في التطبيق إلى ولايةRESUMED
. (I192c5) - تم إصلاح المشكلة المتمثلة في عدم ازدياد ظهور وجهة مربّع الحوار في طريقة التعامل مع زر الرجوع في نظام NavController، ما قد يتسبّب في اعتراض 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
. (I0b8db، b/175392262)
إصلاح الأخطاء
- تم إصلاح
NoSuchElementException
عندما جارٍ الاتصال بـpopBackStack()
من داخلLifecycleObserver
مرفقة بـNavBackStackEntry
بسبب إعادة المشاركة في حالة NavController. (I64621) - يسمح
AbstractListDetailFragment
الآن باستخدام التطبيق. سيتم نزعSlidingPaneLayout
تمامًا من حزمة APK عند عدم استخدامAbstractListDetailFragment
. (I611ad) - يلغي
NavGraph
وNavDestination
الآن طريقة يساوي لذا سيتم اعتبار كائنين لهما نفس القيم متساويين. (I166eb، b/175392262)
الإصدار 2.4.0-alpha04
1 تموز (يوليو) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha04
. يحتوي الإصدار 2.4.0-alpha04 على هذه عمليات التنفيذ.
الميزات الجديدة
- تحتوي عناصر
navigation-fragment
الآن على تنفيذ مُعَدّ مسبقًا لتنسيق من جزأين من خلالAbstractListDetailFragment
الجديد. يستخدم هذا الجزءSlidingPaneLayout
لإدارة لوحة القوائم (التي توفِّرها فئتك الفرعية) وجزء التفاصيل الذي يستخدمNavHostFragment
لتنفيذه، كما هو موضّح في مثال التنفيذ. (Iac4be، b/191276636) - يتيح
NavHost
من العناصرnavigation-compose
الآن استخدام الوجهاتdialog
بالإضافة إلى وجهاتcomposable
. سيتم عرض وجهات مربّعات الحوار هذه ضمنDialog
قابل للإنشاء، عائمًا فوق وجهةcomposable
الحالية. (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
التغييرات في واجهة برمجة التطبيقات
- تمت إعادة تسمية الدالة
add
فيNavigatorState
لتصبحpush
يجب تغيير جميع المكالمات الحالية إلىadd()
إلى Push(). (Ie89fc, b/172112072) - يمكن لمثيلات
Navigator
المخصّصة الآن استخدام واجهتَي برمجة التطبيقاتpushWithTransaction
وpopWithTransition
علىNavigatorState
لإرسال وجهة أو فرقتها بشكل غير متزامن. تجدر الإشارة إلى أنّ واجهات برمجة التطبيقات هذه لم تستخدِمها إلى الآن أيّ من أدوات التنقّل المضمّنة. (Ic4d7c، b/172112072)
تغييرات السلوك
- تتم الآن إضافة "
NavDeepLinkBuilder
"PendingIntent.FLAG_IMMUTABLE
للوصول إلىPendingIntent
التي تم إرجاعها بواسطةcreatePendingIntent()
، مع ضمان تعمل واجهة برمجة التطبيقات هذه على النحو المتوقَّع عند استهداف الإصدار 12 من نظام التشغيل Android. (If8c52)
إصلاح الأخطاء
- تم إصلاح مشكلة في
<include-dynamic>
حيث لن يتم تمرير الوسيطات التي تم تمريرها إلى الرسم البياني بشكل صحيح إلى الرسم البياني المضمّن ديناميكيًا. (I3e115) - تم إصلاح
NullPointerException
عند الانتقال إلى وجهة باستخدام وسيطةstring[]
مع القيمة التلقائية@null
. (I1fbe8) - إضافة قواعد ProGuard لـ
@Navigator.Name
لحل المشاكل عند استخدام الوضع الكامل R8 3.1. (I2add9، b/191654433) - لن يتعذّر استخدام SafeArgs بعد الآن عند إنشاء تطبيقك باستخدام
Kotlin
نسخة قبل1.5.0
(Icd1ff، b/190739257)
الإصدار 2.4.0-alpha03
16 حزيران (يونيو) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha03
. يحتوي الإصدار 2.4.0-alpha03 على هذه عمليات التنفيذ.
إصلاح الأخطاء
- تم إصلاح المشكلة المتمثِّلة في الحاجة إلى مكالمتَين
navigate()
للانتقال إلى رسم بياني ديناميكي مضمَّن. (I7785c، b/188859835) - تم إصلاح الانحدار الذي تم تقديمه في
التنقل
2.4.0-alpha01
حيث لن يفعلsetupActionBarWithNavController()
تقوم بإزالة الأيقونة لأعلى بشكل صحيح عندما تكون في وجهة ذات مستوى أعلى. (I5d443، b/189868637) - تم إصلاح
IllegalStateException
عندما الاتصال بـpopBackStack()
بعد فرقعة سابقة الرسم البياني الجذري لـ NavController. (I2a330، b/190265699) - قواعد ProGuard للنطاق
by navArgs()
الآن بشكل صحيح التطبيق عند استخدامnavigation-common
أو أي عناصر التي تعتمد عليها. (I68800، b/190082521) OnDestinationChangedListener
الذي يتصل بكnavigate()
في المرة الأولى التي يتلقّى فيها معاودة الاتصال الآن الحصول على معاودة اتصال ثانية بشكلٍ صحيح مع الوجهة الانتقال إليها. (Ie5f9e، b/190228815)- لم تعد ميزة "الوسيطات الآمنة" تتعطّل عند استخدامها مع ميزة ديناميكية والإصدار AGP 7.0 أو الإصدارات الأحدث (I69518، b/189966576)
مشكلة معروفة
- لن تعمل الوسيطات الآمنة مع ظهور خطأ
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
عند استخدام Gradle6.7.0
بسبب التبعية إلى إصدار قديم من Kotlin. ويمكن حل ذلك من خلال التحديث لاستخدام Gradle 7.0. (b/190739257)
الإصدار 2.4.0-alpha02
2 حزيران (يونيو) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha02
. يحتوي الإصدار 2.4.0-alpha02 على هذه عمليات التنفيذ.
الميزات الجديدة
- أصبحت المسارات متاحة الآن لوجهات "النشاط" و"الجزء" و"مربّع الحوار"، وكذلك في جميع صفحات Dynamic Navigation Kotlin DSL. (Ib5544 وIa617b وI22f96 وb/188914648 وb/188901565)
- تمت إضافة واجهات برمجة تطبيقات تجريبية في
NavigationUI
مؤقتًا للسماح بإيقاف حفظ حالتك. على الرغم من أنّ حفظ الحالة هو السلوك الصحيح، لا تزال هناك استخدامات للمكتبات المتوقّفة نهائيًا (أي الأجزاء التي تم الاحتفاظ بها)، والتي لا يمكن دعمها عند حفظ الحالة، ما يمنح التطبيقات فرصة للتحوّل ببطء من أي واجهات برمجة تطبيقات غير متوافقة. (Idf93c) توفّر ميزة التنقّل الآن واجهتَي برمجة تطبيقات
findDestination()
وgetHierarchy()
يمكن استخدامهما للمساعدة في تنفيذ واجهة NavigationUI المخصّصة.findDestination()
هي دالة الإضافة فيNavGraph
التي ستحدد وجهة ضمن الرسم البياني.getHierarchy()
هي دالة فيNavDestination
يمكن استخدامها للتحقق مما إذا كانت وجهة معينة ضمن التسلسل الهرمي لجهة أخرى.(I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
تم تعديل طرق NavigationUI التي تتطلّب
BottomNavigationView
لاستخدام فئتها الفائقة التي تم تقديمها في المادة1.4.0
NavigationBarView
بدلاً من ذلك. ويتيح ذلك استخدام هذه الطرق معNavigationRailView
. (Ib0b36، b/182938895)عند تضخيم عنصر
<action>
باستخدام XML، يمكن أن تساعد سمات الصور المتحركة في استخدام السمات المستخلصة من مظهرك باستخدام بنيةapp:enterAnim="?attr/transitionEnter"
. (I07bc1، b/178291654)
التغييرات في واجهة برمجة التطبيقات
- تم إيقاف أدوات إنشاء لغة Kotlin DSL التي تستخدم معرِّفًا نهائيًا. يجب استبدالها بالمنصات التي تستخدم المسارات (I85b42، b/188816479) (I9f58f، b/188816479)
إصلاح الأخطاء
- يستخدم تطبيق "
DialogFragmentNavigator
" الآنNavigatorState.pop()
API لإعلامNavController
عند إغلاق مربع حوار عن طريق إعادته إلى النظام الزر أو النقر خارجه، مما يضمن تكون حالةNavController
متزامنة دائمًا مع حالة المستكشف. (I2ead9) لن تقدّم ميزة "التنقل"
ConcurrentModificationException
عند باستخدام معالجة قائمةOnDestinationChangedListeners
من باستخدام معاودة الاتصالonDestinationChanged
. (Ib1707، b/188860458)لم تعد تتعطّل ميزة "الوسيطات الآمنة" عند محاولة إنشاء وخصائص الاتجاه في Kotlin. (Id2416، b/188564435)
إضافة تعليقات توضيحية إلى طريقة setId في NavDestination مع
@IdRes
، لذا فإنها تقبل معرّفات الموارد فقط. (I69b80)أصبحت المعلَمة int للسمة
findNode
الآنresId
بدلاً منresid
(I7711d)
تعديل بشأن التبعية
- تعتمد ميزة "المتوسطات الآمنة" الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. هذا يعني أنّه من المفترض ألا يصلك تحذير
applicationIdTextResource
باستخدام هذا التحذير. (I6d67b، b/172824579)
الإصدار 2.4.0-alpha01
18 أيار (مايو) 2021
تم طرح androidx.navigation:navigation-*:2.4.0-alpha01
. يحتوي الإصدار 2.4.0-alpha01 على هذه عمليات التنفيذ.
الميزات الجديدة
- توفّر طريقة
currentBackStackEntryAsFlow()
علىNavController
طريقةFlow
تنبعث منها كلما تغيّرت قيمةNavBackStackEntry
الحالية. يمكن استخدام هذا المسار كبديل لإدارةOnDestinationChangedListener
يدويًا. (I19c4a و#89 وb/163947280)
عدة حزم إضافية
تكون NavController مسؤولة عن إدارة الحزمة الخلفية للوجهات وإضافة الوجهات إلى الحزمة الخلفية عند navigate()
إليها وإزالتها عند طلب popBackStack()
أو تشغيل زر الرجوع في النظام. تم توسيع فئة NavOptions
الحالية ودمجها في إدخالات <action>
في ملف XML للرسم البياني للتنقّل لإتاحة حفظ الحزمة الخلفية واستعادتها. (b/80029773)
وفي إطار هذا التغيير، تعمل الآن الطُرق NavigationUI
في onNavDestinationSelected()
وBottomNavigationView.setupWithNavController()
وNavigationView.setupWithNavController()
على حفظ حالة الوجهات المنبثقة واستعادتها تلقائيًا، ما يتيح دعم حزم البيانات الخلفية المتعددة بدون إجراء أي تغييرات على الرموز. عند استخدام ميزة التنقل مع الأجزاء، تكون هذه هي الطريقة الموصى بها للدمج مع حزم خلفية متعددة. (Ie07ca)
تظهر واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:
في ملف XML الخاص بالتنقل، يمكن لعنصر
<action>
الآن استخدام السمتين المنطقيتينapp:popUpToSaveState
وapp:restoreState
لحفظ حالة أي وجهات تم تمييزها عبرapp:popUpTo
واستعادة الحالة المرتبطة بالوجهة التي تم تمريرها كـapp:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
في
navOptions
Kotlin DSL، يمكنك إضافة السمة المنطقيةrestoreState
والسمة المنطقيةsaveState
في أداة إنشاءpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
عند إنشاء عنصر
NavOptions
يدويًا من خلالNavOptions.Builder
، يمكنك استخدامsetRestoreState()
والتحميل الزائد الجديد إلىsetPopUpTo()
والذي يتطلب مَعلمةsaveState
إضافية.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
يمكن أن تتضمّن المكالمات الآلية إلى
popBackStack()
الآن مَعلمةsaveState
إضافية.
في جميع الحالات، ستحفظ NavController
حالة كل NavBackStackEntry
وتستعيدها، بما في ذلك أي حالات ViewModel
على مستوى وجهة التنقّل. تم تحديث واجهات برمجة التطبيقات في Navigator
للسماح لكل Navigator
بإتاحة حفظ حالتها الخاصة واستعادتها.
تم تعديل ComposeNavigator
المستخدَم لوجهات composable
في ميزة "إنشاء التنقل" وFragmentNavigator
وDynamicFragmentNavigator
لوجهات <fragment>
في ميزة "التنقل باستخدام أجزاء" لاستخدام واجهات برمجة تطبيقات Navigator الجديدة وتوفير حالة الحفظ والاستعادة.
مسارات التنقل
المسار عبارة عن String
يعرِّف الوجهة بشكل فريد. وعلى الرغم من استخدامه سابقًا في ميزة إنشاء التنقل فقط، فقد تطوَّر هذا المفهوم الآن ليصبح جزءًا من واجهات برمجة التطبيقات الأساسية للتنقل. ويوفر ذلك بديلاً لاستخدام معرّفات الأعداد الصحيحة عند إنشاء الرسم البياني من خلال Navigation Kotlin DSL. (b/172823546)
تضم جميع واجهات برمجة التطبيقات التي كانت تستقبل معرّفًا فقط الآن حملاً زائدًا يتطلب المسار String
. ويشمل ذلك navigate()
وpopBackStack()
وpopUpTo()
وgetBackStackEntry()
.
وينتج عن ذلك بعض الآثار المترتبة على واجهة برمجة التطبيقات:
- تم إيقاف موقع kotlin
popUpTo
على Kotlin DSL نهائيًا لصالحpopUpToId
(I59c73، b/172823546) - تم إيقاف
getStartDestination()
API لصالح الخدمة. منgetStartDestinationId()
. (I0887f، b/172823546)
بالنسبة إلى المطوّرين الذين يختارون الترقية من الإصدارات السابقة من ميزة "إنشاء التنقل" إلى "إنشاء التنقل" 2.4.0-alpha01
، يعني هذا أنّ عمليات الاستيراد التالية على طرق الإضافات لم تعُد ضرورية ويجب إزالتها:
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
تم استبدال الوسيطة KEY_ROUTE
بالسمة route
في NavDestination
، ما يسمح لك بطلب navBackStackEntry.destination.route
مباشرةً.
التغييرات في واجهة برمجة التطبيقات
- تمت إعادة كتابة جميع عناصر التنقل بلغة Kotlin. وقد أدّى ذلك إلى تحسين قابلية القيم الفارغة للفئات التي تستخدم الأنواع العامة (مثل
NavType
فئة فرعية). تم نقل جميع وظائف إضافة Kotlin التي كانت جزءًا من عناصر-ktx
إلى العناصر الرئيسية الخاصة بها. سيستمر نشر العنصرَين (-ktx
)، ولكنّهما فارغان تمامًا. (b/184292145) - تتيح الإضافة
NavDeepLinkBuilder
الآن إضافة وجهات متعددة مختلفة للصفحة التي تم إنشاؤها حزمة الرجوع. (I3ee0d، b/147913689) - إضافة وظائف المصنع لـ
DynamicNavHostFragment
(Icd515، b/175222619) - المعرّف الفريد للسمة
NavBackStackEntry
مجموعة البيانات متاحة الآن كجزء من واجهة برمجة التطبيقات العامة الخاصة بها. (Ie033a) - أصبح الحقلان
name
وargument
ودالتا الإتلاف فيNamedNavArgument
متاحة للجميع الآن. (#174، b/181320559) - تم تقديم إضافة
NavBackStackEntry#provideToCompositionLocals
جديدة توفّرNavBackStackEntry
للمقطوعة الموسيقية المحلية ذات الصلة. (#175، b/187229439)
الوسيطات الآمنة
تُنشئ أداة "الوسيطات الآمنة" الآن طريقة
fromSavedStateHandle()
لكل فئةNavArgs
. (#122، b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
تم تعديل الوسيطات الآمنة لاعتمادها على
1.8.0
الخاصة بلغة KotlinPoet. (#172، b/183990444)
تغييرات السلوك
- يعتمد التنقل الآن على
دورة الحياة
2.3.1
وأصبحت الآنsetGraph()
وpopBackStack()
وnavigateUp()
وnavigate()
، الطرق التي تعمل على تحديثNavBackStackEntry
Lifecycle
، كـ@MainThread
، محاذاة التنقل مع سلسلة المحادثات الرئيسية تم إدخال إجراء التنفيذ في دورة الحياة2.3.0
. (b/171125856) - إنّ تحليل وسيطات التعداد من الروابط المؤدية إلى صفحات في التطبيق غير حسّاس لحالة الأحرف، ما يسمح لرابط لصفحة معيّنة في التطبيق، مثل
http://www.example.com/red
، بمطابقة رابط لصفحة في التطبيقwww.example.com/{color}
حتى عندما يكون قيمة التعدادRED
. (#152، b/135857840)
التوافق مع إنشاء الرسائل
- يتوافق "
androidx.navigation:navigation-compose:2.4.0-alpha01
" فقط مع الإصدار1.0.0-beta07
والإصدارات الأحدث من ميزة إنشاء الرسائل.
إصلاح الأخطاء
- تم إصلاح مشكلة إعطاء الأولوية للعناصر النائبة للوسيطات اللاحقة على الروابط لصفحات في التطبيق التي تحتوي على لاحقة مطابقة تامة. (#153، b/184072811)
- إعدادات "
NavHostFragment
" متاحة الآن المتنقّلون الذين يستخدمون@Navigator.Name("dialog")
نفسه باعتبارهDialogFragmentNavigator
التلقائي. (Ib1c2c، b/175979140) - تم تحسين سلوك "
NavigatorProvider#addNavigator
" لضمان أنّ طلبه بشكل متكرّر باستخدام المثيل نفسه لا يتسبب في حدوث مشاكل. (#176، b/187443146)
المساهمات الخارجية
- نشكرك simonschiller على تقديم الدعم الخاص بأداة Safe Args التي أنشأَت طريقة
fromSavedStateHandle()
لكل فئة من فئاتNavArgs
. (#122، b/136967621) - شكرًا لك 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 من ميزة إنشاء التنقل
الإصدار 1.0.0-alpha10
7 نيسان (أبريل) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha10
. يحتوي الإصدار 1.0.0-alpha10 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- يقبل
NavHost
الآنModifier
، والذي يتم تمريره إلى الحاوية القابلة للإنشاء والتي تلف العناصر بالوجهة. (I85aca، b/175125483)
إصلاح الأخطاء
- أصبح تطبيق "
NavHost
" متاحًا الآن حتى عند عدم العثور علىOnBackPressedDispatcherOwner
، هكذا عند معاينةNavHost
. (I7d8b4) - تعتمد ميزة إنشاء التنقّل الآن على التنقل
2.3.5
، ما يؤدي إلى إصلاح مشكلة عند استخدامBackHandler
داخل وجهةNavHost
. (I7e63b، b/182284739)
الإصدار 1.0.0-alpha09
10 آذار (مارس) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha09
. يحتوي الإصدار 1.0.0-alpha09 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- تُرجع الدالة
LocalViewModelStoreOwner.current
الآن قيمةViewModelStoreOwner
القابلة للقيم الفارغة لتحديد ما إذا كانViewModelStoreOwner
متاحًا في الوقت الحالي المقطوعة الموسيقية. واجهات برمجة التطبيقات التي تتطلّب السمةViewModelStoreOwner
، مثل كـviewModel()
وNavHost
، لا تزال تطرح استثناء إذا لم يتم ضبطViewModelStoreOwner
. (Idf39a)
إصلاح الأخطاء
- تعتمد ميزة "إنشاء التنقل" الآن على التنقل 2.3.4 والذي يتضمن الإصلاح لمحاولة تعيين نفس واجهة ViewModelStore بعد تعيين الرسم البياني. (I65c24، b/177825470)
الإصدار 1.0.0-alpha08
24 شباط (فبراير) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha08
. يحتوي الإصدار 1.0.0-alpha08 على هذه عمليات التنفيذ.
الميزات الجديدة
- يملأ
NavHost
الآنLocalSavedStateRegistryOwner
SubscriptionLocal بالعنوانNavBackStackEntry
لهذه الوجهة، ما يضمن حفظ أي ولاية محفوظة مباشرةً فيSavedStateRegistry
واستعادتها إلى جانب الوجهة. (I435d7، b/179469431)
الإصدار 1.0.0-alpha07
10 شباط (فبراير) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha07
. يحتوي الإصدار 1.0.0-alpha07 على هذه عمليات التنفيذ.
التحديثات المتعلقة بالاعتمادية
- تعتمد ميزة "إنشاء التنقل" الآن على Lifecycle ViewModel Compose 1.0.0-alpha01 لإتاحة
viewModel()
لوجهاتcomposable
. (I7a374) - يستخدم تطبيق "
NavHost
" الآن الميزة الجديدةLocalOnBackPressedDispatcherOwner
من ميزة Activity-Compose 1.3.0-alpha01 للحصول علىOnBackPressedDispatcher
التي تم ضبطها فيNavController
. (I65b12)
الإصدار 1.0.0-alpha06
28 يناير 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha06
. يحتوي الإصدار 1.0.0-alpha06 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة طريقة الإضافة
getBackStackEntry(route: String)
فيNavController
والتي تعرض طريقةNavBackStackEntry
المرتبطة. (If8931)
الإصدار 1.0.0-alpha05
13 كانون الثاني (يناير) 2021
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha05
. يحتوي الإصدار 1.0.0-alpha05 على هذه عمليات التنفيذ.
تم التعديل لكي يعتمد على الإصدار 1.0.0-alpha10 من Compose.
الإصدار 1.0.0-alpha04
16 كانون الأول (ديسمبر) 2020
تم طرح androidx.navigation:navigation-compose:1.0.0-alpha04
. يحتوي الإصدار 1.0.0-alpha04 على عمليات التنفيذ هذه.
- تم التحديث للتوافق مع ميزة "إنشاء"
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 لاستخدام المنبثقات وLaunchsingleTop (If96c3 وb/171468994)
- تمت إضافة دالة تنقل تأخذ مسارًا بدلاً من رقم تعريف يسمح لك بإنشاء رسوم بيانية متداخلة في ميزة "إنشاء التنقل" DSL. (I1661d)
- تبدأ الوجهة الآن قبل المسار في قائمة مَعلمات NavHost (Ie620e)
- يمكنك الآن إنشاء رسم بياني باستخدام المسار كبداية وجهة خارج NavHost قابل للإنشاء. (Iceb75)
الإصدار 1.0.0-alpha01
28 تشرين الأول (أكتوبر) 2020
تم طرح android.navigation:navigation-compose:1.0.0-alpha01
. يحتوي الإصدار 1.0.0-alpha01 على عمليات التنفيذ هذه.
الميزات الجديدة
توفّر عناصر navigation-compose
التكامل بين مكوِّن التنقّل وJetpack Compose. وهو يستخدم وظائف @Composable
كوجهات في تطبيقك.
يوفّر هذا الإصدار الأولي ما يلي:
- عنصر
NavHost
قابل للإنشاء يتيح لك إنشاء رسم بياني للتنقّل من خلال لغة Kotlin DSL. - تحديد نطاق دورة الحياة،
ViewModel
والحالة المحفوظة على مستوى الوجهة. - الدمج التلقائي مع زر الرجوع للنظام
- دعم تمرير الوسيطات، وإرفاق روابط لصفحات في التطبيق بالوجهات، وعرض نتيجة إلى وجهات سابقة.
- يمكنك إنشاء عناصر مساعدة محدَّدة في
rememberNavController()
وcurrentBackStackEntryAsState()
للسماح بحالة الرفع وربطNavController
بالعناصر القابلة للإنشاء خارجNavHost
(مثل شريط التنقّل السفلي).
راجع إنشاء دليل التنقل للحصول على مزيد من المعلومات.
الإصدار 2.3.5
الإصدار 2.3.5
7 نيسان (أبريل) 2021
تم طرح androidx.navigation:navigation-*:2.3.5
. يحتوي الإصدار 2.3.5 على هذه الالتزامات.
الميزات الجديدة
- عند التنقّل باستخدام
NavDeepLinkRequest
أوUri
، يمكنك الآن الوصول إلىUri
والإجراء ونوع MIME في الوجهة الناتجة عن طريق الحصول على الغرض من الوسيطات من خلالKEY_DEEP_LINK_INTENT
، مما ينسخ الوظائف المتاحة حاليًا للربط الخارجي لصفحة معيّنة. (I975c3، b/181521877)
إصلاح الأخطاء
- تمت إضافة
OnBackPressedCallbacks
إلى جهة الإرسال باستخدام اعتراض "NavBackStackEntry
" كصاحب LifecycleOwner الآن بشكل صحيح بعد أن تكون "دورة حياة النشاط"STOPPED
، يتم تحصيلSTARTED
(Iff94f, b/182284739) - أصبح تحليل نطاقات الروابط المؤدية إلى صفحات في التطبيق غير حسّاس لحالة الأحرف، ما يضمن تطابق
www.example.com
مع كلٍّ منwww.example.com
وwww.Example.com
. يُرجى العلم أنّ أسماء مَعلمات طلب البحث لا تزال حسّاسة لحالة الأحرف. (#144، b/153829033) - تم إصلاح
NullPointerException
الذي قد يحدث عندما تحتوي الوجهة على عدة وسيطات تلقائية غير قابلة للقيم الفارغة ويتم الانتقال إلى تلك الوجهة مع إلغاء مجموعة فرعية فقط من هذه الوسيطات. (aosp/1644827)
التحديثات المتعلقة بالاعتمادية
- يعتمد المكوّن الإضافي "التنقل الآمن" لـ Gradle المتوافق مع نظام Gradle المتوافق مع Kotlin على الإصدار 1.4.31 من المكوّن الإضافي Kotlin Gradle. (aosp/1661058، b/181156413)
مساهمة خارجية
- نشكرك
bentrengrove
على طلب السحب الذي يجعل تحليل نطاق الرابط لصفحة في التطبيق غير حسّاس لحالة الأحرف. (#144، b/153829033)
الإصدار 2.3.4
الإصدار 2.3.4
10 آذار (مارس) 2021
تم طرح androidx.navigation:navigation-*:2.3.4
. يحتوي الإصدار 2.3.4 على عمليات الالتزام هذه.
الميزات الجديدة
- يمكن الآن تحليل وسيطات
ReferenceType
بشكل صحيح عند إرسالها كجزء من معرّف موارد منتظم (URI) لرابط لصفحة معيّنة. يتيح ذلك كلاً من قيمة العدد الصحيح الأولي والقيم السداسية العشرية التي تبدأ بـ0x
. (#127، b/179166693) - تتيح
android:defaultValue
للوسيطة التي تتضمنapp:argType="float"
الآن القيم التلقائية للأعداد الصحيحة، ما يتيح لك استخدامandroid:defaultValue="0"
بدلاً من طلب استخدام0.0
. (#117، b/173766247)
إصلاح الأخطاء
- إصلاح تقدم التثبيت المتوقفة عند استخدام دعم ميزة التنقل للميزات الديناميكية. (Ib27a7، b/169636207)
- الاتصال بالرقم
setViewModelStore
أوsetLifecycleOwner
باستخدام الرقم نفسه الكائن الذي سبق تعيينه سيصبح noop (Idf491، b/177825470) - تضيف ميزة "المتوسطات الآمنة" (Safe-Args) الآن تعليقات توضيحية لمنع التعليقات التوضيحية في الطرق المناسبة عند استخدام جافا. (I8fbc5، وb/179463137)
المساهمات الخارجية
- نشكرك
JvmName
على طلب السحب للتأكّد من أنّه يمكن الآن تحليل وسيطاتReferenceType
بشكل صحيح عند إرسالها كجزء من معرّف موارد منتظم (URI) لرابط لصفحة معيّنة. (#127، b/179166693) - نشكرك
tatocaster
على طلب السحب للسماح للوسيطةdefaultValue
للوسيطة معapp:argType=”float”
بأن تتيح الآن القيم التلقائية للأعداد الصحيحة. (#117، b/173766247)
الإصدار 2.3.3
الإصدار 2.3.3
27 كانون الثاني (يناير) 2021
تم طرح androidx.navigation:navigation-*:2.3.3
. يحتوي الإصدار 2.3.3 على هذه الالتزامات.
إصلاح الأخطاء
- لم يعد هناك عطل عند تمييز
NavBackStackEntry
قبل نقلLifecycle
إلىCREATED
. (Ie3ba3) - تم إصلاح الانحدار الناتج عن b/171364502 حيث إن الانتقال إلى
تسبب نشاط بقيمة مورد الرسوم المتحركة
0
فيResourceNotFoundException
(I7aedb، b/176819931)
الإصدار 2.3.2
الإصدار 2.3.2
2 كانون الأول (ديسمبر) 2020
تم طرح androidx.navigation:navigation-*:2.3.2
. يحتوي الإصدار 2.3.2 على هذه الالتزامات.
إصلاح الأخطاء
- تم إصلاح الانحدار في
NavigationUI
حيث يؤدي استخدام وجهة<activity>
معonNavDestinationSelected
إلى تعذّر الانتقال إلى النشاط. (I22e34، b/171364502) - تم إصلاح المشكلة المتمثلة في أن
navigation-dynamic-features-fragment
قد يؤدي إلى الانتقال إلى الوجهة التي تم تثبيتها حديثًا عدة مرات. (aosp/1486056 وb/169636207) - تم إصلاح مشكلة عدم إرسال الوسيطات التلقائية إلى مثيلات عددها
OnDestinationChangedListener
عند استخدامlaunchSingleTop
. (I2c5cb) - تم إصلاح مشكلة عدم أن يؤدي الانتقال إلى رسم بياني للتنقّل المتداخل إلى إنشاء مثيل رسم بياني جديد على الحزمة الخلفية. (Ifc831)
- تم إصلاح مشكلة عدم تدمير الرسم البياني للتنقّل نفسه من الحزمة الخلفية عند استخدام
navigate()
معpopUpTo
الذي أزال الوجهة الأخيرة في الرسم البياني للتنقّل. (I910a3) - تستخدم ميزة Navigation SafeArgs الآن الإصدار 1.7.2 من KotlinPoet الذي يتيح استخدام وضع واجهة برمجة التطبيقات الصريح في Kotlin. (I918b5)
- يتحقّق
NavHostFragment.findNavController(Fragment)
الآن أيضًا من عرض الديكور الجذري لـ DialogFragment بالإضافة إلى عمليات التحقق الحالية للتسلسل الهرمي للأجزاء والمخطط الهرمي لعرض الجزء. ويسمح لك هذا باختبار أجزاء مربّعات الحوار التي تستخدم ميزة التنقّل مع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 الآن طريقتي رمز التجزئة ويساوي (b/161586466)
- تتضمّن عملية التنقّل الآن الوجهة الحالية في الحقل "No Destination with ID" (لا توجد وجهة ذات رقم التعريف) UnknownArgumentException، مما من شأنه تحسين تجربة تصحيح أخطاء مطوّري البرامج. (b/168311416)
إصلاح الأخطاء
- لن تؤدي الوسيطات الآمنة إلى التفاف سطر الإرجاع بعد الآن، حتى إذا كان اسم فئة الوسيطة الذي تم إنشاؤه أطول من 100 حرف. (b/168584987)
التغييرات في التبعية
- يعتمد
navigation-ui
الآن على DrawerLayout 1.1.1، ضمان قدرة "NavigationUI
" على فتح الدرج حتى عند استخدامLOCK_MODE_LOCKED_CLOSED
أوLOCK_MODE_LOCKED_OPEN
(b/162253907) - تعتمد ميزة "الوسيطات الآمنة" الآن على الإصدار 1.6.0 من KotlinPoet بتنسيق aosp/1435911.
- تعتمد الوسيطات الآمنة الآن على 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
في تنسيق الدرج1.1.0
. - إتاحة الإجراءات ونوع Mime في الروابط المؤدية إلى صفحات في التطبيق: تم توسيع نطاق الروابط المؤدية إلى صفحات في التطبيق لتشمل
app:action
وapp:mimeType
بالإضافة إلىapp:uri
التي كانت متوفّرة سابقًا. تتيح ميزة "NavController
" الآن التنقّل باستخدام أي مجموعة من هذه الحقول عبر فئةNavDeepLinkRequest
الجديدة. راجِع التنقّل باستخدام NavDeepLinkRequest للحصول على مزيد من المعلومات.
المشاكل المعروفة
- لا يمكن تنفيذ إجراءات الروابط المؤدية إلى صفحات في التطبيق وأنواع Mime بعد في دمج البيان. وإلى حين اكتمال هذا الإجراء، لن يتم تضمين نوع mime في عنصر
<data>
أو<action>
المخصّص في أي عناصر<intent-filter>
يتم إنشاؤها من العنصر<nav-graph>
في ملف البيان. عليك إضافة سمة<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
وتنسيق الدرج1.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)
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل عناصر Intent لرابط صفحة معيّنة في التطبيق عند استخدام وجهة بدء مدمجة. (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 على هذه عمليات التنفيذ.
الميزات الجديدة
- تمت إضافة دعم لأنشطة وحدة الميزات ووجهات الأجزاء في Navigation Kotlin DSL. (b/148969800)
التغييرات في واجهة برمجة التطبيقات
- لم تعُد الفئة
DynamicExtras
تستخدم نمطًا أداة إنشاء ويمكن إنشاؤها مباشرةً. (aosp/1253671) - تستخدم
DynamicActivityNavigator
الآنContext
في الدالة الإنشائية بدلاً منActivity
. (aosp/1250252)
إصلاح الأخطاء
- لم يعد
NavigationUI
يتجاهل التصنيفات الفارغة (أي الوجهة التي تتضمنandroid:label=””
)، والآن يضبط العنوان على سلسلة فارغة بشكلٍ صحيح. (b/148679860)
التحديثات المتعلقة بالاعتمادية
- تعتمد عناصر "الميزات الديناميكية للتنقل" الآن على إصدار "
1.6.5
" الأساسي في Play. (b/149556401)
الإصدار 2.3.0-alpha03
4 آذار (مارس) 2020
تم طرح androidx.navigation:navigation-*:2.3.0-alpha03
. يحتوي الإصدار 2.3.0-alpha03 على هذه عمليات التنفيذ.
التغييرات في واجهة برمجة التطبيقات
- فبدلاً من الاعتماد على فئة
DrawerLayout
الملموسة، تستخدمAppBarConfiguration
الآن واجهةOpenable
التي تم تقديمها في CustomView1.1.0-alpha02
(والتي يتم تنفيذDrawerLayout
اعتبارًا من تخطيط الدرج1.1.0-alpha04
)، ما يسمح لك باستخدام عمليات تنفيذ مخصّصة لـOpenable
معNavigationUI
. (b/129030452)
إصلاح الأخطاء
- تحتفظ قواعد ProGuard
navigation-common-ktx
الآن بشكل صحيح بفئاتNavArgs
المستخدمة فقط بدلاً من جميع مثيلاتNavArgs
. (b/150213558)
التغييرات في التبعية
- أعاد التنقّل اعتماده على Core
1.2.0
وأصبح يعتمد الآن على Core1.1.0
لتجنُّب إجبار المطوّرين على الانتقال إلى استخدام تبعية أحدث عندما لا يعتمد التنقّل على أيّ واجهات برمجة تطبيقات جديدة في Core1.2.0
.
الإصدار 2.3.0-alpha02
19 شباط (فبراير) 2020
تم طرح androidx.navigation:navigation-*:2.3.0-alpha02
. يحتوي الإصدار 2.3.0-alpha02 على هذه عمليات التنفيذ.
الميزات الجديدة
- يتيح لك
NavBackStackEntry
الآن الوصول إلىSavedStateHandle
مناسب لتخزين كميات صغيرة من الحالات المحفوظة التي يجب ربطها بإدخال محدّد في الحزمة الخلفية. راجِع عرض نتيجة للاطّلاع على مثال عن حالة استخدام. (b/79672220)
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة طرق ملائمة لـ
getCurrentBackStackEntry()
وgetPreviousBackStackEntry()
لتسهيل استردادNavBackStackEntry
للوجهات الحالية والسابقة. (b/79672220)
إصلاح الأخطاء
- يمرّر
navigateUp()
الآن وسيطات الوجهة الحالية وKEY_DEEP_LINK_INTENT
إلى الوجهة السابقة عند تشغيل تطبيقك في حزمة المهام الخاصة بك. (b/147456890)
التغييرات في التبعية
- يعتمد التنقّل الآن على
1.2.0
الأساسية.
الإصدار 2.3.0-alpha01
5 شباط (فبراير) 2020
تم طرح androidx.navigation:navigation-*:2.3.0-alpha01
. يحتوي الإصدار 2.3.0-alpha01 على عمليات التنفيذ هذه.
الميزات الجديدة
- توفّر عناصر "
navigation-testing
" الجديدة فئةTestNavHostController
. توفر هذه الفئة بديلاً لاستخدامNavController
وهمي عند اختبار التنقل الذي يتيح لك تعيين الوجهة الحالية والتحقق من الحزمة الخلفية بعد عمليات التنقل. (b/140884273) - يتيح لك
navigation-dynamic-features-fragment
الجديد (وتبعيته الانتقاليةnavigation-dynamic-features-runtime
) تضمين الوجهات أو الرسوم البيانية الكاملة للتنقل (عبر<include-dynamic>
) من وحدات الميزات، ما يوفّر إمكانية تثبيت وحدات الميزات عند الطلب بسلاسة عند الانتقال إلى تلك الوجهات. راجع التنقل باستخدام وحدات الميزات للحصول على مزيد من المعلومات. (b/132170186)
إصلاح الأخطاء
- من التنقل
2.2.1
: تتجاهل الآن الروابط لصفحات في التطبيق التي لا تحتوي على مَعلمات طلب بحث أي مَعلمات طلب بحث بشكلٍ صحيح بدلاً من إلحاقها بعناصر{argument}
اللاحقة أو لا تتطابق مع الرابط لصفحة في التطبيق. (b/147447512) - من التنقل
2.2.1
: تم تعديل قواعد ProGuardnavigation-ui
فيDrawerArrowDrawable
لضمان أنandroid.enableJetifier=true
ليس مطلوبًا. (b/147610424) - من التنقل
2.2.1
: تحتوي وحدةnavigation-common-ktx
الآن على اسم فريد لحزمة البيان بدلاً من مشاركة اسم حزمة البيان نفسه مثلnavigation-runtime-ktx
. (aosp/1141947)
التعديلات المتعلقة بالاعتمادية
- من التنقّل
2.2.1
: يعتمد التنقّل2.2.1
الآن على حالة حفظ نموذج عرض دورة الحياة2.2.0
والتصنيف1.2.1
.
الإصدار 2.2.2
الإصدار 2.2.2
نيسان (أبريل) 2020
تم طرح androidx.navigation:navigation-*:2.2.2
. يحتوي الإصدار 2.2.2 على عمليات الالتزام هذه.
إصلاح الأخطاء
- تم إصلاح
IllegalStateException
عند الربط بصفحة في التطبيق بوجهة بدء الرسم البياني عند وجود عدة مثيلات منNavHostFragment
في نشاطك. (b/147378752) - لم يعد
NavigationUI
يتجاهل التصنيفات الفارغة (أي الوجهة التي تتضمنandroid:label=””
)، والآن يضبط العنوان على سلسلة فارغة بشكلٍ صحيح. وقد تم إصدار هذا سابقًا في التنقّل 2.3.0-alpha04. (b/148679860) - تحتفظ قواعد ProGuard
navigation-common-ktx
الآن بشكل صحيح بفئاتNavArgs
المستخدمة فقط بدلاً من جميع مثيلاتNavArgs
. وقد تم إصدار هذا سابقًا في التنقّل 2.3.0-alpha03. (b/150213558)
التعديلات المتعلقة بالاعتمادية
- يعتمد التنقّل الآن على القسم
1.2.4
. (aosp/1277325)
الإصدار 2.2.1
الإصدار 2.2.1
5 شباط (فبراير) 2020
تم طرح androidx.navigation:navigation-*:2.2.1
. يحتوي الإصدار 2.2.1 على عمليات الالتزام هذه.
إصلاح الأخطاء
- إنّ الروابط لصفحات معيّنة التي لا تتضمّن معلَمات طلب بحث تتجاهل الآن أي معلَمات طلب بحث بشكل صحيح بدلاً من إلحاقها بعناصر
{argument}
اللاحقة أو لا تتطابق مع الرابط لصفحة في التطبيق. (b/147447512) - تم تعديل قواعد ProGuard
navigation-ui
فيDrawerArrowDrawable
لضمان عدم احتياجandroid.enableJetifier=true
. (b/147610424) - أصبح للوحدة
navigation-common-ktx
الآن اسم فريد لحزمة البيان بدلاً من مشاركة اسم حزمة البيان نفسه مثلnavigation-runtime-ktx
. (aosp/1141947)
التعديلات المتعلقة بالاعتمادية
- يعتمد التنقّل
2.2.1
الآن على Lifecycle ViewModelState2.2.0
وFragment1.2.1
.
الإصدار 2.2.0
الإصدار 2.2.0
22 كانون الثاني (يناير) 2020
تم طرح androidx.navigation:navigation-*:2.2.0
. يحتوي الإصدار 2.2.0 على عمليات الالتزام هذه.
تغييرات مهمة منذ الإصدار 2.1.0
- NavBackStackEntry: يمكنك الآن الاتصال بـ
NavController.getBackStackEntry()
، وإدخال رقم تعريف الوجهة أو الرسم البياني للتنقّل في الحزمة الخلفية. توفّرNavBackStackEntry
المعروضةLifecycleOwner
وViewModelStoreOwner
(التي يتم عرضها من خلالNavController.getViewModelStoreOwner()
) وSavedStateRegistryOwner
، بالإضافة إلى توفير الوسيطات المستخدمة لبدء تلك الوجهة. - تكامل Lifecycle ViewModel SaveState:
SavedStateViewModelFactory
هو الآن المصنع التلقائي المستخدَم عند استخدامby navGraphViewModels()
أو الدالة الإنشائيةViewModelProvider
معViewModelStoreOwner
الذي يعرضهNavController.getBackStackEntry()
أوNavController.getViewModelStoreOwner()
. - دعم مَعلمات طلب البحث للروابط لصفحات معيّنة في التطبيق: أصبحت الروابط لصفحات معيّنة التي تتضمّن مَعلمات طلب البحث تتيح الآن مَعلمات طلبات البحث المُعاد ترتيبها. الوسيطات التي تحتوي على قيمة تلقائية أو قابلة للقيم الفارغة هي الآن اختيارية عند مطابقة الروابط لصفحات في التطبيق.
- دعم محسّن للصور المتحركة: يستخدم تطبيق "
NavHostFragment
" الآنFragmentContainerView
من Fragment 1.2.0، ما يؤدي إلى إصلاح مشاكل ترتيب الصور المتحركة بطريقة "z" وإدخالات النوافذ على "أجزاء".
الإصدار 2.2.0-rc04
18 كانون الأول (ديسمبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-rc04
. يحتوي الإصدار 2.2.0-rc04 على عمليات الالتزام هذه.
إصلاح الأخطاء
- تم تعديل الصور المتحركة التلقائية للتلاشي باستخدام
navigation-ui
لمطابقة صور التلاشي المعدَّلة في القسم1.2.0-rc04
. (b/145769814)
الإصدار 2.2.0-rc03
4 كانون الأول (ديسمبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-rc03
. يحتوي الإصدار 2.2.0-rc03 على هذه عمليات التنفيذ.
إصلاح الأخطاء
- تم إصلاح مشكلة في تحليل الروابط المؤدية إلى صفحات في التطبيق عند استخدام مَعلمات طلب البحث ووسيطة باعتبارها الجزء الأخير من المسار الذي منعت تحليل أكثر من حرف واحد من وسيطة المسار النهائي. (b/144554689)
- تم إصلاح مشكلة تحليل الروابط المؤدية إلى صفحات في التطبيق والتي كانت تتلقّى فيها المَعلمات الاختيارية
"@null"
بدلاً منnull
. (b/141613546) - يستعيد
NavHostFragment
الآن الرسم البياني بشكل صحيح بعد تغيير الإعدادات عند استخدامه معFragmentContainerView
. (b/143752103)
التغييرات في التبعية
- يعتمد التنقّل الآن على "رحلة المستخدِم"
2.2.0-rc03
و"حفظ النموذج على مراحل النشاط"1.0.0-rc03
و"النشاط1.1.0-rc03
" و"الجزء1.2.0-rc03
" عندما يكون ذلك مناسبًا.
الإصدار 2.2.0-rc02
7 تشرين الثاني (نوفمبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-rc02
. يحتوي الإصدار 2.2.0-rc02 على هذه عمليات التنفيذ.
التغييرات في التبعية
- يعتمد التنقّل الآن على androidx.lifecycle
2.2.0-rc02
.
الإصدار 2.2.0-rc01
23 تشرين الأول (أكتوبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-rc01
بدون أي تغييرات منذ 2.2.0-beta01
. يحتوي الإصدار 2.2.0-rc01 على هذه عمليات التنفيذ.
الإصدار 2.2.0-beta01
9 تشرين الأول (أكتوبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-beta01
. يحتوي الإصدار 2.2.0-beta01 على هذه الالتزامات.
الميزات الجديدة
- تلغي
NavDestination
وفئاتها الفرعية الآنtoString()
لتقديم معلومات أكثر فائدة عند تصحيح الأخطاء. (b/141264986)
تغيّرات السلوك
- ويتم الآن تجاهل مَعلمات طلب البحث الإضافية عند مطابقة الروابط لصفحات في التطبيق بدلاً من التسبب في تعذُّر المطابقة. (b/141482822)
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل الوسيطات في مسار رابط لصفحة في التطبيق إذا تم أيضًا تحديد مَعلمات طلب البحث. (b/141505755)
- تحتوي إضافة
navArgs()
Kotlin علىActivity
الآن على رسالة خطأ أفضل عند عدم توفر عناصر إضافية. (b/141408999) - تم إنشاء
Directions
صفوف Java باستخدام أداة Safe Args التي تحتوي الآن على قيم تلقائية. (b/141099045) - تم إنشاء
Args
صفوف Java باستخدام أداة Safe Args التي تحتوي الآن على قيم تلقائية. (b/140123727) - عند استخدام
Toolbar
، يتوقفNavigationUI
عن تحريك تغيير النص عند التنقل بين وجهتين من المستوى الأعلى. (b/140848160)
الإصدار 2.2.0-alpha03
18 أيلول (سبتمبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-alpha03
. يحتوي الإصدار 2.2.0-alpha03 على عمليات التنفيذ هذه.
تغيّرات السلوك
- سيؤدي الاتصال بالرقم
setViewModelStore()
بعد الاتصال بـsetGraph
الآن إلى الحصول علىIllegalStateException
. يجب ضبط هذه الميزة دائمًا من خلالNavHost
كجزء من عملية الإعداد الأوّلية لضمان توفير مساحة تخزين ثابتة في جميع مثيلات "NavBackStackEntry
" لـViewModel
. (aosp/1111821)
إصلاح الأخطاء
- تم إصلاح
ConcurrentModificationException
عند استخدام مثيلات عددهاViewModel
مرفقة بعدة مثيلات للرسم البياني للتنقّلي المختلفة على مستوىViewModelStore
. (aosp/1112257)
الإصدار 2.2.0-alpha02
5 أيلول (سبتمبر) 2019
تم طرح androidx.navigation:navigation-*:2.2.0-alpha02
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
الميزات الجديدة
- أصبحت الروابط لصفحات معيّنة التي تتضمّن معلَمات طلب بحث متوافقة الآن مع مَعلمات طلب البحث المُعاد ترتيبها. الوسيطات التي تحتوي على قيمة تلقائية أو قابلة للقيم الفارغة هي الآن اختيارية عند مطابقة الروابط لصفحات في التطبيق. (b/133273839)
- يمكنك الآن الاتصال بالرقم
NavController.getBackStackEntry()
، وإدخال رقم تعريف وجهة أو رسم بياني للتنقّل في الحزمة الخلفية. توفّرNavBackStackEntry
المعروضةLifecycleOwner
وViewModelStoreOwner
(التي يتم عرضها من خلالNavController.getViewModelStoreOwner()
) وSavedStateRegistryOwner
، بالإضافة إلى توفير الوسيطات المستخدمة لبدء تلك الوجهة. (aosp/1101691، aosp/1101710)
إصلاح الأخطاء
- تم إصلاح مشكلة تعذُّر إضافة
NavHostFragment
إلىViewPager2
باستخدامIllegalArgumentException
. (b/133640271) - يتم الآن تجنُّب طلب
getResourceName()
بدون داعٍ من قِبلNavInflater
، ما يؤدي إلى تسريع وقت التضخم بنسبة تصل إلى %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)
الإصدار
الإصدار
5 أيلول (سبتمبر) 2019
تم طرح androidx.navigation:navigation-*:2.1.0
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
تغييرات مهمة منذ الإصدار 2.0.0
- تحديد نطاق ViewModels إلى رسم بياني للتنقّل: يمكنك الآن إنشاء ViewModels على مستوى الرسم البياني للتنقّل باستخدام سمة
by navGraphViewModels()
المفوَّضة لمستخدمي Kotlin الذين يستخدمون مكتبات-ktx
أو باستخدام واجهة برمجة التطبيقاتgetViewModelStoreOwner()
المُضافة إلىNavController
. يُرجى الاطّلاع على مشاركة البيانات المتعلقة بواجهة المستخدم بين الوجهات للحصول على مزيد من المعلومات. - وجهات مربّع الحوار: يمكنك الآن إنشاء وجهات
<dialog>
تعرضDialogFragment
عندnavigate
لها. يتيحNavHostFragment
وجهات مربّعات الحوار تلقائيًا. راجِع المقالة إنشاء وجهة من DialogFragment للحصول على مزيد من المعلومات. - التنقل عبر Uri: يمكنك الآن
navigate
باستخدامUri
، الذي يستخدم<deepLink>
الذي أضفته إلى وجهة للانتقال إلى هناك. راجع التنقل باستخدام معرف المستخدم للحصول على مزيد من المعلومات. - NavHostController: تم نقل واجهات برمجة التطبيقات المستخدمة تحديدًا لإنشاء
NavHost
مخصَّص إلىNavHostController
، ما يسمح بعمليات التنفيذ بربطNavController
بالمضيفLifecycleOwner
وOnBackPressedDispatcher
وViewModelStore
.
الإصدار 2.1.0-rc01
7 آب (أغسطس) 2019
تم طرح androidx.navigation:navigation-*:2.1.0-rc01
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
التغييرات في واجهة برمجة التطبيقات
- تمت إزالة واجهة برمجة تطبيقات
getViewModelStore()
المتوقفة نهائيًا فيNavController
والتي تم تقديمها في2.1.0-alpha02
. (aosp/1091021)
الإصدار 2.1.0-beta02
19 تموز (يوليو) 2019
تم طرح androidx.navigation:*:2.1.0-beta02
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
إصلاح الأخطاء
- تمت إزالة الاعتمادية غير المقصودة التي تم إجراؤها في
2.1.0-beta01
. (b/137782950)
الإصدار 2.1.0-beta01
17 تموز (يوليو) 2019
تم طرح androidx.navigation:*:2.1.0-beta01
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
الميزات الجديدة
- يحرّك
NavigationUI
الآن إزالة الزر "لأعلى" عند استخدامsetupWithNavController()
معToolbar
أوCollapsingToolbarLayout
. (b/131403621)
إصلاح الأخطاء
- تم إصلاح مشكلة في التوقيت عند استخدام عدة NavHostFragments مع الحاوية نفسها مع
findNavController()
. (b/136021571)
الإصدار 2.1.0-alpha06
2 تموز (يوليو) 2019
تم طرح androidx.navigation:*:2.1.0-alpha06
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
الميزات الجديدة
- تم الآن نقل السمة
app:navGraph
التي يستخدمها NavHostFragment إلى العنصرnavigation-runtime
. ويجب أن تستخدم أدوات التنقّل المخصّصة التي يمكن إضافتها عبر XML هذه السمة للتكامل مع لوحة مضيف "محرّر التنقّل". (b/133880955)
التغييرات في واجهة برمجة التطبيقات
- تم إيقاف واجهة برمجة التطبيقات
getViewModelStore()
على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) - تم استبدال طريقة
setHostOnBackPressedDispatcherOwner()
NavController
بطريقةsetOnBackPressedDispatcher()
منNavHostController
، ويتطلّب ذلك الآن الاتصال بـsetLifecycleOwner()
قبل طلبها. (aosp/965409) - تحتوي الدالة
NavHostController
الآن على طريقةenableOnBackPressed(boolean)
تحلّ محلّ الفئةNavHostOnBackPressedManager
التي تم إرجاعها سابقًا من خلالsetHostOnBackPressedDispatcherOwner()
. (aosp/966091)
إصلاح الأخطاء
- تم إصلاح مشكلة عدم صحة تسلسل استدعاء الدوال البرمجية بعد التنقّل باستخدام معرّف الموارد المنتظم (URI). (b/132509387)
- إنّ الروابط لصفحات معيّنة التي تعالجها NavController تلقائيًا لا تعمل سوى مرة واحدة. (b/132754763)
الإصدار 2.1.0-alpha04
16 أيار (مايو) 2019
تم طرح androidx.navigation:*:2.1.0-alpha04
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
إصلاح الأخطاء
- يلتزم
NavHostFragment
بشكل صحيح بـapp:defaultNavHost
عند اعتراض أحداث زر الرجوع للنظام، ما يؤدي إلى إصلاح تراجع في التنقل2.1.0-alpha03
. b/132077777 - يعالج تطبيق
DialogFragmentNavigator
الآن العمليتَينpopBackStack()
وnavigateUp()
بشكل صحيح. b/132576764 - تم إصلاح مشكلة
IllegalStateException: unknown destination during restore
عند التنقل المتكرّر بين الرسوم البيانية المدمجة. b/131733658
الإصدار 2.1.0-alpha03
7 أيار (مايو) 2019
تم طرح androidx.navigation:*:2.1.0-alpha03
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
المشاكل المعروفة
- يواصل NavHostFragment اعتراض زر "الرجوع" للنظام على الرغم من استخدام
app:defaultNavHost="false"
b/132077777.
الميزات الجديدة
- يمكنك الآن إنشاء
<dialog>
وجهة تعرضDialogFragment
عند إجراءnavigate
لها. يتيحNavHostFragment
وجهات مربّعات الحوار تلقائيًا. b/80267254 - بالإضافة إلى طلب
navigate
باستخدام معرّف مورد أوNavDirections
، يمكنك الآن التنقّل عبرUri
، الذي يستخدم<deepLink>
الذي أضفته إلى وجهة للانتقال إلى الوجهة الصحيحة. b/110412864
تغيّرات السلوك
- تم تسريع الرسوم المتحركة الافتراضية التي تقدمها NavigationUI من 400 ملي ثانية إلى 220 ملي ثانية لمطابقة سرعة الرسوم المتحركة الافتراضية للأنشطة والأجزاء. b/130055522
التغييرات في واجهة برمجة التطبيقات
- تم إيقاف طريقة
createFragmentNavigator()
فيNavHostFragment
نهائيًا وتم نقل وظائفها إلى طريقةonCreateNavController()
الجديدة لتوضيح أنّ هذه هي نقطة الدخول الصحيحة لإضافة المستكشفين المخصّصين عند التصنيفNavHostFragment
. b/122802849 - تمت إضافة طريقة
hasDeepLink()
إلىNavDestination
للسماح لك بالتحقّق مما إذا كان يمكن التعامل معUri
معيّن من خلال تلك الوجهة، أو أي وجهة في الرسم البياني للتنقّل في حال استخدامNavGraph
. b/117437718
إصلاح الأخطاء
- تم تمرير الوسيطات التلقائية الآن بشكل صحيح إلى مثيلين (
OnDestinationChangedListener
). b/130630686 - يعترض
NavHostFragment
الآن أحداث الرجوع للنظام باستخدامOnBackPressedDispatcher
، ما يؤدي إلى إصلاح مشكلة عند الانتقال المشروط في طرق مراحل نشاط "الأجزاء" عند الرجوع إلى جزء. b/111598096 - بالنسبة إلى الوسيطات الآمنة، يتم الآن استنتاج
android:defaultValue=”@null”
باستخدامapp:argType
غير محدّدة بشكل صحيح على أنها وسيطةstring
. b/129629192
الإصدار 2.1.0-alpha02
3 نيسان (أبريل) 2019
تم طرح androidx.navigation:*:2.1.0-alpha02
. يمكن الاطّلاع على صفقات الاشتراك المضمَّنة في هذا الإصدار هنا.
الميزات الجديدة
- يمكنك الآن إنشاء نماذج ViewModels التي يتم تحديدها على مستوى الرسم البياني للتنقّل من خلال تفويض السمة
by navGraphViewModels()
لمستخدمي Kotlin أو باستخدام واجهة برمجة التطبيقاتgetViewModelStore()
المُضافة إلىNavController
. b/111614463
التغييرات في واجهة برمجة التطبيقات
- يمكنك الآن إضافة
app:targetPackage
إلى وجهة<activity>
للحدّ من اسم الحزمة المطابق. يتوافق هذا البروتوكول معapp:targetPackage="${applicationId}"
لحظر الحزمة بمعرّف التطبيق الخاص بك. b/110975456
إصلاح الأخطاء
- لم يعد يتم تحليل
android:name
لوجهات<activity>
إلى فئة في وقت التضخم، ما يمنع ClassNotFoundExceptions عند استخدام الميزات الديناميكية. b/124538597
الإصدار 2.1.0-alpha01
19 آذار (مارس) 2019
هذا هو الإصدار الأولي الأول من ميزة التنقّل 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 - تعتمد ميزة "الوسيطات الآمنة" الآن على الإصدار 1.1.0 بلغة KotlinPoet، والتي يمكن من خلالها حلّ مشكلة في أسماء الحزم الطويلة جدًا. b/123654948
الإصدار 2.0.0
الإصدار 2.0.0
14 آذار (مارس) 2019
تم إصدار ميزة التنقل 2.0.0
بدون أي تغييرات من 2.0.0-rc02
.
الإصدار 2.0.0-rc02
6 آذار (مارس) 2019
يوفّر التنقّل 2.0.0-rc02 عناصر جديدة مع androidx.navigation
.
معرف المجموعة وتغيير اعتمادياته إلى مكافئاته في AndroidX.
سلوك الدالة 2.0.0-rc02 مماثل لسلوك ميزة التنقل 1.0.0-rc02 ولا يلزم إجراء أي تغييرات على التعليمات البرمجية للتحديث من 1.0.0-rc02 بالإضافة إلى تحديث تبعياتك لمطابقة التبعيات الجديدة.
يجب أن يتضمن مشروعك تم نقل البيانات إلى AndroidX لاستخدام إصدارات 2.X من التنقل. سيكون الإصدار 1.0 الثابت من التنقل هو الإصدار الأخير باستخدام طبقة الدعم تبعيات المكتبة إلا أن جميع عمليات التطوير المستقبلية من الإصدار 1.0 تعتمد على AndroidX وتبني على الإصدار 2.0 الثابت.
تبعيات ما قبل AndroidX
بالنسبة إلى إصدارات التنقل التي تسبق AndroidX، قم بتضمين هذه الاعتماديات:
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
بالنسبة إلى الوسيطات الآمنة، أضِف
اتباع classpath في ملف build.gradle
المستوى الأعلى
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
الإصدار 1.0.0
الإصدار 1.0.0
14 آذار (مارس) 2019
تم إصدار ميزة التنقل 1.0.0
بدون أي تغييرات من 1.0.0-rc02
.
الإصدار 1.0.0-rc02
26 شباط (فبراير) 2019
وهو الإصدار الثاني المرشح للإصدار 1.0.0 الثابت من ميزة التنقل. يحتوي هذا الإصدار على عدد من إصلاحات الأخطاء.
إصلاح الأخطاء
- تم إصلاح مشكلة تجاهل
popBackStack()
في حال كان الرسم البياني الجذري. لم يتم الحصول على معرّف b/126251695 - يعالج تطبيق "
navigateUp()
" الآن بشكل صحيح الرجوع إلى مهمة تطبيقك. عند طلب ذلك بعد التعامل مع رابط لصفحة في التطبيق بدونFLAG_ACTIVITY_NEW_TASK
b/126082008 - تم إصلاح مشكلة في "
ActivityNavigator.applyPopAnimationsToPendingTransition
" لا يتم تطبيق الرسوم المتحركة الصحيحة للخروج من النافذة المنبثقة b/126237567 - أصبحت رمز Kotlin الذي تم إنشاؤه باستخدام Safe Args يتخطى الآن بشكل صحيح كلمات Kotlin الرئيسية.
مثل
in
وfun
في اسم الحزمة المرتبط بالفئةR
. b/126020455
الإصدار 1.0.0-rc01
21 شباط (فبراير) 2019
وهو مرشح للإصدار الثابت 1.0.0 من ميزة التنقل. هذا النمط يحتوي الإصدار على إصلاح واحد للخطأ.
إصلاح الأخطاء
- تم إصلاح مشكلة عند استخدام عمليات التجزئة و
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 - أنشأت Safe Args فئات NavArgs لم تعد تتعطل عند استعادة
الوسيطة
Parcelable[]
من حالة المثيل المحفوظ. b/123963545 - تُظهر أداة Safe Args الآن بشكل صحيح فئات Kotlin غير الضرورية التي تم إنشاؤها. b/124120883
الإصدار 1.0.0-beta01
4 شباط (فبراير) 2019
هذا هو الإصدار التجريبي الأول من ميزة التنقل؛ من الآن فصاعدًا، تنقل من المتوقع أن تظل واجهة برمجة التطبيقات ثابتة إلى أن يتم إطلاق الإصدار التالي، ما لم تتوفر مشكلة حرجة. يحتوي هذا الإصدار على بعض إصلاحات الأخطاء والتغييرات في السلوك.
تغيّرات السلوك
- يضمن التنقل الآن التعامل مع القيم التلقائية للوسيطة بشكل متطابق.
في وقت التشغيل ومن خلال "الوسيطات الآمنة" ونتيجة لذلك، لا يتم الاحتفاظ إلا بالوسيطات التي تحتوي
يمكن أن يكون لدى
app:argType="reference"
إشارة قيمة تلقائية إلى مورد آخر (على سبيل المثال،@color/colorPrimary
). جارٍ محاولة استخدام مرجع تلقائي بقيمة مختلفة بـapp:argType
إلى الحصول على استثناء عند تحليل XML للتنقل. b/123551990 - تعتمد ميزة "الوسيطات الآمنة" الآن على الإصدار 3.3.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android aosp/888413
- تعتمد الوسيطات الآمنة الآن على الإصدار 1.3.20 من لغة Kotlin aosp/888414
إصلاح الأخطاء
- يمكن الآن استخدام Safe Args في المكتبة ووحدات الميزات في جميع الإصدارات. المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/121304903
- تم إصلاح الانحدار الذي يؤدي إلى تنفيذ عملية
popBackStack()
واحدة فصل جميع نسخ الوجهة من أعلى الحزمة الخلفية، بدلاً من وجهة واحدة فقط في كل مرة. b/123552990 - تم إصلاح مشكلة عدم مزامنة حالة "
FragmentNavigator
" مع حالةNavController
، ما يؤدي إلى ظهورIllegalStateException
عندما محاولة استعادة المكدس الخلفي. b/123803044 - تم إصلاح مشكلة عدم التعامل مع سهم الرجوع الذي تمت معالجته في
NavigationUI
عند استخدام ProGuard مع إخفاء مفاتيح فك التشفير. b/123449431 - أصبح الرمز الذي تنشئه أداة Safe Args يعالج بشكل صحيح الآن عند استخدام
app:argType
. تشير إلى فئة داخلية ثابتة بالتنسيق.OuterClass$InnerClass
. b/123736741 - يعالج رمز Java الذي تم إنشاؤه بواسطة Safe Args الآن الإجراءات العامة بشكل صحيح. ووجهات متداخلة بعمق. b/123347762
الإصدار 1.0.0-alpha11
23 كانون الثاني (يناير) 2019
هذا إصدار إصلاح عاجل من 1.0.0-alpha10
يعمل على إصلاح مشكلة "الوسيطات الآمنة".
إصلاح الأخطاء
- إصلاح مشكلة تعذُّر استيراد فئة "الاتجاهات" من خلال أداة "الوسيطات الآمنة" المرتبطة بالإجراءات العامة. b/123307342
الإصدار 1.0.0-alpha10
23 كانون الثاني (يناير) 2019
المشاكل المعروفة
- يتعذّر على "الوسيطات الآمنة" استيراد فئة الاتجاهات المرتبطة بالإجراءات العامة. b/123307342
يتضمّن هذا الإصدار تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم التغييرات التي قد تؤدي إلى أعطال أدناه.
الميزات الجديدة
- يمكن لمستخدمي Kotlin الآن استخدام ميزة تفويض السمة
by navArgs()
للتأهُّل الحصول على مرجع إلى فئة "NavArgs
" تم إنشاؤها باستخدام "الوسيطات الآمنة" فيActivity
أوFragment
. b/122603367 - تسمح لك أداة Safe Args الآن بإنشاء رمز Kotlin من خلال تطبيق
المكوّن الإضافي
androidx.navigation.safeargs.kotlin
. تم إنشاء كود Kotlin خصيصًا لوحدات Kotlin فقط، باستخدام الوسيطات الافتراضية غير قابلة للتغيير على نمط أداة الإنشاء الذي لا يزال متاحًا عبر المكوّن الإضافي السابقandroidx.navigation.safeargs
. b/110263087
تغييرات السلوك
- تكون الروابط المطابقة لصفحات في التطبيق منحازة الآن نحو الرابط لصفحة في التطبيق الذي يحتوي على أكثر الوسيطات تطابقًا. b/118393029
- سيؤدي الاتصال بالرقم
setGraph()
على جهازNavController
إلى إعادة ضبط الحزمة الخلفية. b/111450672 - لم تعُد الروابط غير المعروفة لصفحة معيّنة تعرض
IllegalStateException
، ولكنها سيتم تجاهلها، أي إصلاح المشاكل فيNavHostFragment
مدمَجة أو متعددة. b/121340440
تغييرات قد تؤدي إلى أعطال
- طريقة
NavOptions.applyPopAnimationsToPendingTransition()
تم نقل تطبيق الرسوم المتحركة المنبثقة على أحد الأنشطة إلىActivityNavigator
. b/122413117 - تتجنّب الوسيطات الآمنة الآن تكرار الفئات المتطابقة للإجراءات التي لا تتم
الوسيطة. نوع الإرجاع لعدم وجود طرق وسيطة في اتجاهات NavDirections التي تم إنشاؤها
الصفوف الآن هي
NavDirections
. b/123233147 - لم تعُد فئات الاتجاهات التي تم إنشاؤها في أداة Safe Args ذات إنشاء عام إنشاءات. فينبغي أن تتفاعل فقط مع الطرق الثابتة التي تم إنشاؤها. b/123031660
- أنشأت أداة الوسيطات الآمنة
NavDirections
صفًا لم يعُد متاحًا للجميع. الدالة الإنشائية - يجب إنشاؤها فقط عبر الطرق الثابتة في فئات "الاتجاهات" التي تم إنشاؤها. 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
- أنشأت أداة Safe Args
NavDirections
صفًا تتساوى الآن بشكل صحيحhashCode()
عندما تكون قيمةequals()
هي true. b/123043662 - تعرض الإضافة
FragmentNavigator
الآن رسالة خطأ أفضل إذا حاولت تطبيقFragmentTransactions
مخصص علىNavHostFragment
FragmentManager
عليك استخدام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
قابلة للقيم الفارغة aosp/845616
إصلاح الأخطاء
- تم تحليل الوسيطات الآن بشكل صحيح من الروابط المؤدية إلى صفحات في التطبيق على أنّها
argType
الصحيحة. بدلاً من أن تكون دائمًا كسلاسل b/110273284 - يعمل التنقل الآن على تصدير موارده العامة بشكل صحيح b/121059552
- إنّ أداة Safe Args متوافقة الآن مع المكوّن الإضافي Android Gradle Plugin 3.4 Canary 4 والإصدارات الأحدث b/119662045
الإصدار 1.0.0-alpha08
6 كانون الأول (ديسمبر) 2018
يتضمّن هذا الإصدار تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم التغييرات التي قد تؤدي إلى أعطال أدناه.
الميزات الجديدة
- عند استخدام تصنيفات الوجهات مع
NavigationUI
طريقة، سيتم الآن بشكلٍ تلقائي استبدِل{argName}
حالة فيandroid:label
بالوسيطة الصحيحة. b/80267266 - يعتمد التنقّل الآن على الإصدار 28.0.0 من "مكتبة الدعم". b/120293333
تغييرات قد تؤدي إلى أعطال
- تمت إعادة تسمية "
OnNavigatedListener
" إلى "OnDestinationChangedListener
". b/118670572 - تمرر
OnDestinationChangedListener
الآنBundle
من الوسيطات أيضًا aosp/837142 - السمتان
app:clearTask
وapp:launchDocument
والارتباطان تمت إزالة طرق مختلفة. استخدِمapp:popUpTo
مع جذر الرسم البياني من أجل إزالة جميع الوجهات من الحزمة الخلفية b/119628354 - يستخدم
ActivityNavigator.Extras
الآن النمطBuilder
ويضيف إمكانية ضبط أي علاماتIntent.FLAG_ACTIVITY_
aosp/828140 - تمت إعادة تسمية "
NavController.onHandleDeepLink
" إلى "handleDeepLink
". aosp/836063 - وهناك العديد من الفئات والطرق التي لا تهدف إلى التصنيف الفرعي، مثل
"
NavOptions
" و"NavInflater
" و"NavDeepLinkBuilder
" و"AppBarConfiguration
" تم إجراءfinal
aosp/835681 - تمت إزالة طريقة
NavHostFragment.setGraph()
المتوقّفة نهائيًا aosp/835684 - طريقة
NavigationUI.navigateUp(DrawerLayout, NavController)
المتوقّفة نهائيًا تمت إزالة. aosp/835684 - تم نقل عملية إنشاء الأجزاء إلى "
FragmentNavigator
"، ما يسهّل تفويض إنشاء جزء إلىFragmentFactory
. b/119054429 - لم تعُد الدالة الإنشائية لـ
NavGraphNavigator
بحاجة إلىContext
. aosp/835340 - NavigatorProvider أصبح الآن
فئة، بدلاً من واجهة. قيمة
NavigatorProvider
التي تم إرجاعها من قِبلgetNavigatorProvider()
لم يغيّر وظائفه. aosp/830660 - تمت إزالة
NavDestination.navigate()
. الاتصال بـ "navigate()
" على الرقمNavigator
بدلاً من ذلك. aosp/830663 - إعادة هيكلة مهمة لـ
Navigator
، ما يغنيك عن الحاجة إلىOnNavigatorNavigatedListener
وبدلاً من ذلك، جعلnavigate
تعرضNavDestination
الذي تم الانتقال إليه. - لم يعُد بإمكان
Navigator
جهاز افتراضي إرسال أحداث منبثقة إلىNavController
. ضع في اعتبارك استخدامOnBackPressedCallback
من أجل اعتراض ضغطات زر الرجوع واستدعاءnavController.popBackStack()
. aosp/833716
إصلاح الأخطاء
- تعمل
popUpTo
الآن بشكل متسق عندما تكون الوجهة عنصر<navigation>
b/116831650 - تم إصلاح عدد من الأخطاء التي أدّت إلى حدوث
IllegalArgumentException
عند استخدام الرسوم البيانية المتداخلة b/118713731 b/113611083 b/113346925 b/113305559 - ستتم الآن تعبئة السمة
dataPattern
لوجهات<activity>
وسيطات من وسيطات ليست سلسلة من خلال استدعاءtoString()
b/120161365
الوسيطات الآمنة
- تتوافق الوسيطات الآمنة مع العناصر التسلسلية، بما في ذلك قيم التعداد. أنواع التعداد
يمكنك ضبط قيمة تلقائية باستخدام التعداد الحرفي بدون اسم الفئة
(مثال:
app:defaultValue="READ"
) b/111316353 - تتوافق ميزة "الوسيطات الآمنة" مع الصفائف من جميع الأنواع المتوافقة b/111487504
- تتجاهل "الإعدادات الآمنة" الآن المجلدات الفرعية لأدلة الموارد b/117893516
- تضيف ميزة "الوسيطات الآمنة" تعليقات
@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
الوسيطات الآمنة
- أصبحت الوسيطات الآمنة الآن لها تبعية ثابتة للمكوّن الإضافي لنظام Gradle المتوافق مع Android 3.2.1. b/113167627
- يمكن الآن إنشاء اتجاهات للصفوف الداخلية. b/117407555
- تم إصلاح مشكلة إنشاء الاتجاهات إلى عنصر <include> الرسم البياني. b/116542123
الإصدار 1.0.0-alpha06
20 أيلول (سبتمبر) 2018
الميزات الجديدة
- تتوفّر الآن عمليات نقل العناصر المشتركة لوجهتَي "الأجزاء" و"النشاط" على b/79665225. لمزيد من المعلومات، يُرجى الاطّلاع على تنفيذ ميزة التنقل باستخدام مكوّن بنية التنقّل.
- سيؤدي اختيار عنصر في
NavigationView
إلى إغلاق أي بطاقة سفلية تتضمّن b/112158843.
التغييرات في واجهة برمجة التطبيقات
- تغيير قد يؤدي إلى عطل: تستخدم طريقة المستكشف
navigate()
الآن مَعلمةNavigator.Extras
. - طريقة
getGraph()
في NavController هي الآنNonNull
b/112243286
إصلاح الأخطاء
- لم تعُد ميزة "
NavigationUI.setupWithNavController()
" تسريب على المشاهدات في حال استخدامها مع مشاهدات من وجهات فردية b/111961977. - يتم الآن تسمية المستكشف
onSaveState()
مرة واحدة فقط b/112627079
الوسيطات الآمنة
- تعمل فئات الاتجاهات الخاصة بوجهة التنقل الآن على توسيع فئة الاتجاهات الرئيسية إذا كانت موجودة b/79871405
- تحتوي فئات الاتجاهات والوسيطات الآن على تنفيذ
toString()
مفيد b/111843389
الإصدار 1.0.0-alpha05
10 آب (أغسطس) 2018
إصلاح الأخطاء
- إصلاح الخطأ الذي يتسبب في سلوك غير صحيح في تسلسل استدعاء الدوال البرمجية b/111907708
- إصلاح خطأ في
equals()
من صفوف Args التي تم إنشاؤها. b/111450897 - إصلاح تعذُّر الإصدار في "الوسيطات الآمنة" b/109409713
- إصلاح إحالة ناجحة من معرّفات الموارد إلى أسماء JavaScript b/111602491
- إصلاح رسائل الخطأ الخاصة بقابلية القيم الفارغة في المكوّن الإضافي "الوسيطات الآمنة"
- أضِف التعليقات التوضيحية التي لا تشير إلى إمكانية قبول القيم الفارغة.
الإصدار 1.0.0-alpha04
July 19, 2018
يحتوي قسم التنقّل 1.0.0-alpha04
والمكوّن الإضافي Safe Args gradle المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات وتغييرات السلوك وإصلاحات الأخطاء.
تغييرات واجهة برمجة التطبيقات / السلوك
- يضبط NavHostFragment الجزء الحالي دائمًا كجزء التنقّل الأساسي، مع ضمان تمييز مدراء الأجزاء الفرعية قبل تمييز NavHostFragment b/111345778
الوسيطات الآمنة
- تغيير قد يؤدي إلى عطل: تم تغيير
app:type
إلىapp:argType
لتجنُّب التضارب مع المكتبات الأخرى مثل ConstraintLayout 2.0.0-alpha1 b/111110548 - يمكن الآن النقر على رسائل الخطأ الواردة من "الوسيطات الآمنة" b/111534438.
- تؤكد فئات الوسيطات الآن أن سمات
NonNull
ليست فارغة في الواقع b/111451769 - تمت إضافة تعليقات
NonNull
توضيحية إضافية إلى الفئات التي تم إنشاؤها بواسطة NavDirections وAgs b/111455455 b/111455456
إصلاح الأخطاء
- تم إصلاح مشكلة زر الرجوع في النظام بعد الربط لموضع معيّن بوجهة مجزأة b/111515685
الإصدار 1.0.0-alpha03
12 تموز (يوليو) 2018
يحتوي قسم التنقّل 1.0.0-alpha03
والمكوّن الإضافي Safe Args gradle المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات وتغييرات السلوك وإصلاحات الأخطاء.
تغييرات واجهة برمجة التطبيقات / السلوك
- تمت إضافة طريقة NavigationUI.setupWithNavController لشريط الأدوات b/109868820.
- تمت إضافة طريقة NavigationUI.setupWithNavController لـ CollapsingToolbarLayout b/110887183.
- الآن تُرجع POPBackStack() القيمة false عندما تكون الحزمة الخلفية فارغة أو عندما لا يكون معرّف الوجهة المحدد في الحزمة الخلفية b/110893637.
- يتجاهل الآن FragmentNavigator عمليات التنقل بعد حفظ FragmentManager الحالة، مع تجنب استثناءات "لا يمكن تنفيذ هذا الإجراء بعد onSaveInstanceState" b/110987825
الوسيطات الآمنة
- كسر التغيير: سيتم استبدال الأحرف غير الأبجدية الرقمية في الإجراءات وأسماء الوسيطات بغلاف الجمل في أسماء طرق NavDirections المعنية.
- مثلاً: سيصبح
DemoController.index
setDemoControllerIndex
b/79995048. - مثلاً: سيصبح
action_show_settings
actionShowSettings
b/79642240.
- مثلاً: سيصبح
- كسر التغيير: تُعتبر الوسيطات الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في وسيطات السلسلة والنقاط القابلة للفصل، أضِف
app:nullable="true"
b/79642307. - يمكنك الآن استخدام
app:type="long"
مع defaultValues على شكل "123L" b/79563966. - أصبحت الوسيطات القابلة للتعديل متاحة الآن باستخدام اسم فئة مؤهل بالكامل للسمة
app:type
. إنّ القيمة التلقائية الوحيدة المسموح بها هي"@null"
b/79563966. - تنفِّذ فئات الوسيطات الآن
equals()
وhashCode()
b/79642246 - يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553.
- يمكن الآن تطبيق المكوّن الإضافي Safe Args على المشاريع المميّزة b/110011752.
إصلاح الأخطاء
- تم إصلاح المشاكل عند التنقل أثناء طرق مراحل نشاط الأجزاء b/109916080.
- تم إصلاح المشكلات عند التنقل عبر الرسوم البيانية المدمجة عدة مرات b/110178671
- تم إصلاح المشاكل عند استخدام
setPopUpTo
مع الوجهة الأولى في الرسم البياني b/109909461. - تم إصلاح المشكلة المتمثلة في تمرير جميع قيم
app:defaultValue
على أنها سلاسل b/110710788 - تضيف أداة aapt2 المضمّنة مع الإصدار 3.2 التجريبي من المكوّن الإضافي لنظام Gradle المتوافق مع Android 01 الآن قواعد الاحتفاظ لكل سمة
android:name
في ملفات XML الخاصة بالتنقل b/79874119. - تم إصلاح تسرُّب الذاكرة عند استبدال برنامج FragmentNavigator التلقائي b/110900142.
الإصدار 1.0.0-alpha02
7 حزيران (يونيو) 2018
تغييرات السلوك
يستخدم تطبيق "
FragmentNavigator
" اشتراك "setReorderingAllowed(true)
" الآن. b/109826220انتقِل الآن إلى عناوين URLDecodes للوسيطات التي تم تحليلها من عناوين 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
ستميِّز واجهة التنقّل الآن العنصر الصحيح عند استخدام رسم بياني مدمج باعتباره
MenuItem
. b/109675998
التغييرات في واجهة برمجة التطبيقات
تم إيقاف سمة
clearTask
للإجراءات وواجهة برمجة التطبيقات المرتبطة بها فيNavOptions
. b/80338878تم إيقاف سمة
launchDocument
للإجراءات وواجهة برمجة التطبيقات المرتبطة بها فيNavOptions
. b/109806636
الإصدار 1.0.0-alpha01
8 أيار (مايو) 2018
توفر ميزة التنقل إطار عمل للإنشاء داخل التطبيق
التنقل. هذا الإصدار الأولي هو 1.0.0-alpha01
.