التنقّل

التنقل هو إطار عمل للتنقل بين "الوجهات" في تطبيق Android الذي يوفر واجهة برمجة تطبيقات متناسقة سواء تم تنفيذ الوجهات كأجزاء أو أنشطة أو مكونات أخرى.
التعديل الأخير الإصدار المستقر إصدار مرشح الإصدار التجريبي إصدار ألفا
20 آذار (مارس) 2024 2.7.7 - - 2.8.0-alpha05

إعلان التبعيات

لإضافة تبعية على التنقل، يجب عليك إضافة مستودع Google Maven إلى مشروعك. لمزيد من المعلومات، يمكنك الاطّلاع على مستودع Maven من Google.

أضف التبعيات للعناصر التي تحتاجها في ملف build.gradle لتطبيقك أو الوحدة الخاصة بك:

رائع

dependencies {
  def nav_version = "2.7.7"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"
}

Kotlin

dependencies {
  val nav_version = "2.7.7"

  // Java language implementation
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

  // Feature module Support
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // Jetpack Compose Integration
  implementation("androidx.navigation:navigation-compose:$nav_version")
}

Safe Args

لإضافة الوسيطات الآمنة إلى مشروعك، عليك تضمين classpath التالي في ملف build.gradle ذي المستوى الأعلى:

رائع

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.7.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 أو وحدات Kotlin المختلطة، أضِف هذا السطر إلى ملف build.gradle للتطبيق أو الوحدة:

رائع

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

بدلاً من ذلك، لإنشاء رمز Kotlin المناسب للوحدات التي تستخدم لغة Kotlin فقط، أضِف ما يلي:

رائع

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

يجب أن يكون لديك android.useAndroidX=true في ملف gradle.properties وفقًا لنقل البيانات إلى AndroidX.

للحصول على معلومات عن استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات ktx.

لمزيد من المعلومات حول التبعيات، يُرجى الاطّلاع على مقالة إضافة تبعيات الإصدار.

ملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إخبارنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة تصويتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء عدد جديد

راجِع مستندات أداة تتبُّع المشاكل للحصول على مزيد من المعلومات.

الإصدار 2.8

الإصدار 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 في التنقل في ComposeAllowed بشكل صحيح عند استخدام الرجوع إلى النظام بدون إيماءة. (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)

تعديل التبعية

الإصدار 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)
  • تم إصلاح مشكلة تسبّبت في عدم تلقّي وجهة النافذة العائمة مطلقًا (مثل Dialogs وBottomsheets وما إلى ذلك) عدم تلقّي معاودة الاتصال خلال مراحل نشاط RESUMED. (I3b866، b/287505132)

الإصدار 2.7.2

الإصدار 2.7.2

6 أيلول (سبتمبر) 2023

تم طرح "androidx.navigation:navigation-*:2.7.2". يتضمّن الإصدار 2.7.2 هذه الالتزامات.

إصلاح الأخطاء

  • يعتمد التنقّل الآن على دورة الحياة 2.6.2، وهو إصلاح التفاعل بين rememberSaveable والرمز NavHost الخاص بسمة "التنقل" والذي سيؤدي إلى استعادة حالة الوجهات rememberSaveable وأي مثيلات SavedStateHandle تملكها ViewModel بشكلٍ صحيح بعد إيقاف العملية وإعادة إنشائها. (b/298059596، b/289436035)
  • تم إصلاح مشكلة عند عرض مربّعات حوار متعددة في "إنشاء أثناء التنقل" في الوقت نفسه، حيث تكون مربّعات الحوار المحجوبة جزئيًا (على سبيل المثال، ليست أعلى مربّع الحوار) في حالة دورة حياة CREATED بدلاً من حالة STARTED. (aosp/2728520، b/289257213)
  • تم إصلاح مشكلة عند عرض مربّعات حوار متعددة في "إنشاء أثناء التنقل" في آنٍ واحد، حيث يؤدي إغلاق مربّع الحوار العلوي في الوقت نفسه إلى توقُّف مربّع الحوار الجديد في أعلى الصفحة في حالة دورة حياة STARTED بدلاً من الانتقال بشكل صحيح إلى RESUMED. (aosp/2629401، b/286371387)
  • لم تعد ميزة "التنقل الآمن" تعمل على إنشاء مثيل لمهمتها في حال لم يتم تنفيذها في الواقع. (I0e385، b/260322841)

تعديل التبعية

  • تعتمد ميزة "إنشاء أثناء التنقل" الآن على الإصدار 1.5.1 من "إنشاء".

الإصدار 2.7.1

الإصدار 2.7.1

23 آب (أغسطس) 2023

تم طرح "androidx.navigation:navigation-*:2.7.1". يتضمّن الإصدار 2.7.1 هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح مشاكل في التنقّل باستخدام ميزة "الإنشاء" والتي كانت تؤدي إلى حدوث خطأ عند استخدام Scaffold عند محاولة الوصول إلى ViewModel على Lifecycle.State.DESTROYED. (I1dc11، b/268422136)

الإصدار 2.7.0

الإصدار 2.7.0

9 آب (أغسطس) 2023

تم طرح "androidx.navigation:navigation-*:2.7.0". يتضمّن الإصدار 2.7.0 هذه الالتزامات.

التغييرات المهمة منذ الإصدار 2.6.0

صور متحركة من Accompanist

بما أنّ AnimatedContent أصبح ثابتًا، استطعنا نقل الرمز من Accompanist Navigation Animation مرة أخرى إلى Navigation Compose نفسه.

وهذا يعني أنّ جميع ميزات ضبط الانتقالات المخصّصة التي كانت متوفّرة في AnimatedNavHost تتوفر بشكل مباشر في NavHost.

لن يتم إجراء أي تغييرات إضافية على Accompanist Navigation Animation وسيتم إيقافها رسميًا قريبًا قريبًا، بالإضافة إلى إرشادات حول كيفية إعادة النقل إلى Navigation Compose نفسه، ولكن ستكون هذه التغييرات عكس دليل نقل البيانات بدون الحاجة إلى أي تغييرات أخرى في واجهة برمجة التطبيقات إذا كنت تستخدم الإصدار الأولي من Accompanist (0.31.2-alpha). (b/197140101)

إصلاح الأخطاء

  • يعترض NavHost في ميزة Navigation Compose الآن بشكل صحيح استدعاءات النظام مرة أخرى حتى بعد إيقاف النشاط واستئنافه. (Icb6de، b/279118447)

التعديلات على المهام التابعة للتبعية

  • يعتمد التنقّل الآن على إنشاء 1.5.0 من 1.1.0.

الإصدار 2.7.0-rc01

26 تموز (يوليو) 2023

تم طرح "androidx.navigation:navigation-*:2.7.0-rc01". يتضمّن الإصدار 2.7.0-rc01 هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح المشكلة التي تتمثل في إمكانية الاحتفاظ بلامدا EnterTransition وExitTransition اللتين تم إنشاؤهما كجزء من NavHost في الذاكرة حتى بعد إزالة NavHost من التراكيب. (I893d0)

المشاكل المعروفة

  • هناك مشكلة في Navigation 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.

الإصدار 2.6.0

الإصدار 2.6.0

7 حزيران (يونيو) 2023

تم طرح "androidx.navigation:navigation-*:2.6.0". يتضمّن الإصدار 2.6.0 هذه الالتزامات.

تغييرات مهمة على ميزة "التنقّل" منذ الإصدار 2.5.0

  • أصبحت الآن مشاكل arguments في NavBackStackEntry وarguments التي تم تمريرها إلى OnDestinationChangedListener نسخة فقط من الوسيطات غير القابلة للتغيير التي تم إنشاؤها عند الانتقال إلى الوجهة. ويعني ذلك أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلى arguments أو حالات OnDestinationChangedListener الأخرى.
  • توفِّر NavDeepLink الآن القيم التلقائية للصفائف، ما يتيح استخدام مَعلمات طلب البحث المتكرّرة التي ستربط بنوع مصفوفة الوسيطة. يتضمّن NavType الآن أيضًا طريقة تلقائية يمكن تجاوزها لدمج قيمتين مُحلّلتين.
  • يمكن الآن للفئات الفرعية المخصّصة للسمة NavType إلغاء serializeAsValue لتحويل القيمة إلى سلسلة على شكل سلسلة، ما يسمح بتضمين كلّ من التسلسل وإلغاء التسلسل (عبر parseValue) بالكامل في الفئة NavType. يلغي StringType الآن هذه الطريقة لاستدعاء Uri.encode على String المحدد.

تغييرات مهمة على ميزة "إنشاء ميزة التنقّل" منذ الإصدار 2.5.0

  • عند معاينة عنصر قابل للإنشاء باستخدام NavHost، سيتم الآن عرض startDestination في NavGraph تلقائيًا.
  • يمكن الآن استخدام المسارات NavController.popBackStack(route) وNavController.getBackStackEntry(route) وNavController.clearBackStack(route) مع ملء الوسيطات جزئيًا أو كليًا. تجدر الإشارة إلى أنّ الوسيطات يجب أن تتطابق تمامًا مع وسيطات الإدخال.
  • عند محاولة إنشاء NavDeepLink فارغ باستخدام navDeepLink Kotlin DSL، ستظهر لك الآن تحذير من الوبر يشير إلى أنّ رابط الصفحة في التطبيق يحتاج إلى معرّف موارد منتظم (URI) و/أو إجراء و/أو نوع mimetype ليكون صالحًا.

تغييرات مهمة في ميزة "التنقّل باستخدام أجزاء" منذ الإصدار 2.5.0

  • لم يعُد NavHostFragment يعترض زر الرجوع في النظام نفسه. يسمح هذا الإجراء للسمة FragmentManager الأساسية بمعالجة النظام مرّة أخرى. يتيح هذا الإجراء للجزء 1.7.0-alpha01 والإصدارات الأحدث توفير صورة متحركة "خلفية توقّعية" داخل التطبيق على أجهزة Android U.
  • عند استخدام التنقّل مع أجزاء، ستؤدي محاولة إجراء FragmentTransaction يدويًا لإضافة جزء إلى الحزمة الخلفية في FragmentManager إلى عرض IllegalArgumentException. عليك دائمًا إضافة الأجزاء من خلال واجهة برمجة تطبيقات navigate().
  • عند استخدام السلسلة ${applicationId} نفسها كعنصر نائب في السمتَين app:data وapp:dataPattern في عنصر النشاط ضمن ملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بـ packageName للسياق عند استخدام محتوى كبير.
  • يستخدم FragmentNavigator الآن واجهات برمجة التطبيقات الخاصة بالنقل عند التنقل والنقر على NavBackStackEntries. وبالتالي، سينتظر Lifecycle NavBackStackEntry الآن إلى أن تكتمل التأثيرات الخاصة للدخول والخروج قبل نقل Lifecycle.State الأخير.
  • يستخدم DialogFragmentNavigator الآن واجهات برمجة التطبيقات الخاصة بالنقل عند التنقل والنقر على NavBackStackEntries. وهذا يعني أنّ Lifecycle NavBackStackEntry ستنتظر الآن حتى يتم نقل 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 على هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح مشكلة في ميزة "التنقل" التي تتضمن أجزاءً، حيث تؤدي إزالة جزء من خلال التنقّل باستخدام popUpTo في معاودة الاتصال في دورة حياة onResume() إلى حدوث IllegalStateException. (I21884، b/279644470)

الإصدار 2.6.0-beta01

19 نيسان (أبريل) 2023

تم طرح "androidx.navigation:navigation-*:2.6.0-beta01". يتضمّن الإصدار 2.6.0-beta01 هذه الالتزامات.

الميزات الجديدة

  • توفّر ميزة "NavBackStackEntry" الآن عملية تنفيذ toString مخصّصة. (Iff00b)

إصلاح الأخطاء

  • عند استخدام التنقّل مع أجزاء، ستؤدي محاولة إجراء FragmentTransaction يدويًا لإضافة جزء إلى الحزمة الخلفية في FragmentManager إلى عرض IllegalArgumentException. عليك دائمًا إضافة الأجزاء من خلال واجهة برمجة تطبيقات navigate(). (I6d38e)
  • عند وجود navigate يضيف إدخال وpopBackStack يؤدي إلى إزالته في الإطار نفسه، فإن الإدخال العلوي الناتج في الحزمة الخلفية سيؤدي الآن إلى إعادته باستمرار إلى RESUMED Lifecycle.State. (Id8067، b/276495952)

الإصدار 2.6.0-alpha09

5 نيسان (أبريل) 2023

تم طرح "androidx.navigation:navigation-*:2.6.0-alpha09". يحتوي الإصدار 2.6.0-alpha09 على هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح عمليات التحقّق من المسار غير الصالح، بحيث إذا كان NavDestination يحتوي على NavArgument غير قابل للقيم، يجب أن يحتوي مسار هذه الوجهة على عناصر نائبة للوسيطات التي تحمل الاسم نفسه لـ NavArgument غير القابل للقيم. (Ic62bf، b/274697949)
  • ستتعذّر الآن عمليات التنقّل في الروابط لصفحات في التطبيق استنادًا إلى Action/MimeType إذا كانت عملية التنقّل لا تتضمّن عنصر NavArgument غير قابل للإلغاء يطلبه العنصر NavDestination الذي تتطابق معه السمة Action/MimeType. (Ibfa17، b/271777424)
  • عندما تضبط دالة NavController رسمًا بيانيًا بالمسار والوجهات نفسها كما في الرسم البياني السابق، يتم الآن استبدال عُقد الرسم البياني الحالية ووجهات الحزمة الخلفية بمثيلات جديدة. يؤدي ذلك إلى إصلاح عطل عند استخدام onLaunchSingleTop بدون حفظ الحالة في "إنشاء التنقل". يؤدي ذلك أيضًا إلى إصلاح الخطأ الذي يحدث عند الانتقال إلى الوجهات المرتبطة ببنية الرسم البياني الجذري وحزمة الخلفية غير الصحيحة. (I5bc58 وb/275258161 وb/275407804)

الإصدار 2.6.0-alpha08

22 آذار (مارس) 2023

تم طرح "androidx.navigation:navigation-*:2.6.0-alpha08". يحتوي الإصدار 2.6.0-alpha08 على هذه الالتزامات.

الميزات الجديدة

  • يتيح لك "NavHostFragment" الآن استرداد NavController فور إرفاق NavHostFragment بـ FragmentManager، وليس بعد onCreate() فقط. (Ic6382، b/220186282)

إصلاح الأخطاء

  • تم إصلاح NullPointerException عند تمييز رسم بياني مدمج يتضمن وسيطة غير قابلة للقيم. (6b3581، b/249988437)
  • عند استخدام النظام مجددًا بعد التنقّل باستخدام popUpTo، ستنبثق حالة NavController في الإدخال الصحيح. (I3a8ec، b/270447657)
  • سيعمل FragmentNavigator الآن على عرض الإدخالات بشكل صحيح عند فتح الحزمة للخلف من خلال النظام الأساسي أو popBackStack() وما إذا كانت العملية تستخدم تأثيرات للجزء أم لا. (I81bdf)
  • إضافة أجزاء إلى FragmentNavigator"FragmentManager" بدون استخدام التنقّل لن تؤدي إلى تعطُّل. (b17204، b/274167493)

التعديلات على المهام التابعة للتبعية

الإصدار 2.6.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 الذي تسبب في عدم نقل NavBackStackEntrys إلى حالة "الاستئناف" عند استخدام 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)

تغييرات واجهة برمجة التطبيقات

  • تتم الآن إضافة تعليقات توضيحية إلى كل عمليات حِمل navigate الزائدة البالغ عددها NavController باستخدام السمة @MainThread لضمان طلبها في سلسلة المحادثات الرئيسية. (I2c0b0، b/263427111)

إصلاح الأخطاء

  • تم إصلاح عطل عند محاولة التنقل أثناء استخدام التنقل في جزء ديناميكي. (I3ee29، b/268360479)
  • خطأ تم إصلاحه لا يؤدي الانتقال إلى جزء آخر من خلال زر الرجوع في النظام إلى تعديل الشريط السفلي إلى العنصر المحدد الصحيح (If559f، b/269044426)

المشاكل المعروفة

  • عند استخدام التنقّل باستخدام أجزاء، يتعذّر الوصول إلى RESUMED خلال مراحل نشاط NavBackStackEntry عند استخدام واجهات برمجة تطبيقات Animation. (b/269646882)
  • عند استخدام التنقل باستخدام أجزاء والتنقل باستخدام BottomNavigation، إذا حاولت استعادة حزمة خلفية مع إدخالات متعددة، لن يتم تحديث BottomMenuItem بشكل صحيح. (b/270447657)
  • عند استخدام التنقل مع أجزاء، بعد استعادة الحالة، لن يحصل NavBackStackEntry Lifecycle على DESTROYED عندما يكون الجزء DESTROYED . (b/270610768)

الإصدار 2.6.0-alpha05

8 شباط (فبراير) 2023

تم طرح "androidx.navigation:navigation-*:2.6.0-alpha05". يحتوي الإصدار 2.6.0-alpha05 على هذه الالتزامات.

الميزات الجديدة

  • يمكن الآن استخدام المسارات NavController.popBackStack(route) وNavController.getBackStackEntry(route) وNavController.clearBackStack(route) مع ملء الوسيطات جزئيًا أو كليًا. تجدر الإشارة إلى أنّ الوسيطات يجب أن تتطابق تمامًا مع وسيطات الإدخال. (Iebd28 وIc678c وI3b37b وb/257514373)
  • يستخدم FragmentNavigator الآن واجهات برمجة التطبيقات الخاصة بالنقل عند التنقل والنقر على NavBackStackEntries. وبالتالي، سينتظر 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)

التعديلات على المهام التابعة للتبعية

الإصدار 2.6.0-alpha02

5 تشرين الأول (أكتوبر) 2022

تم طرح "androidx.navigation:navigation-*:2.6.0-alpha02". يحتوي الإصدار 2.6.0-alpha02 على هذه الالتزامات.

التغييرات في السلوك

  • عند تمرير رقم تعريف الرسم البياني للتنقُّل إلى AppBarConfiguration (مثلاً من خلال Menu)، ينظر NavigationUI الآن فقط إلى وجهة البداية للرسم البياني للتنقُّل هذه كوجهة ذات مستوى أعلى، بدلاً من وضع علامة غير صحيحة على كل وجهة ضمن الرسم البياني كوجهة ذات مستوى أعلى. لا يتغيّر سلوك تمرير رقم تعريف وجهة فردية. تتوفر هذه الوظيفة نفسها للرمز الخاص بك من خلال وظيفة isTopLevelDestination الجديدة في AppBarConfiguration. (Ie936e، b/238496771)

إصلاح الأخطاء

  • يعتمد المكوِّن navigation:navigation-fragment الآن على إصدار الجزء 1.5.2. (I00ba4)
  • لن يتم تعديل عنصر القائمة المحدّد بعد الآن عند الانتقال إلى وجهة FloatingWindow، مثل مربّع الحوار. (I4cde8، b/240308330)

الإصدار 2.6.0-alpha01

7 أيلول (سبتمبر) 2022

تم طرح "androidx.navigation:navigation-*:2.6.0-alpha01". يحتوي الإصدار 2.6.0-alpha01 على هذه الالتزامات.

الميزات الجديدة

  • ستؤدي عمليات دمج setupWithNavController في NavigationUI للعمل على شريط التطبيق العلوي الآن إلى تحليل قيم R.string للوسيطات ReferenceType المتوفّرة في android:label إلى قيم "السلسلة" بدلاً من إخراج العدد الصحيح للمورّد الذي يتم إنشاؤه تلقائيًا. (I5f803، b/167959935)
  • توفِّر NavDeepLink الآن القيم التلقائية للصفائف، ما يتيح استخدام مَعلمات طلب البحث المتكرّرة التي ستربط بنوع مصفوفة الوسيطة. يتضمّن NavType الآن أيضًا طريقة تلقائية يمكن تجاوزها لدمج قيمتين مُحلّلتين. (Id68c3، b/209977108)
  • عند استخدام السلسلة ${applicationId} نفسها كعنصر نائب في السمتَين app:data وapp:dataPattern في عنصر النشاط ضمن ملف XML للتنقّل، سيتم ملء العنصر النائب تلقائيًا بـ packageName للسياق عند استخدام محتوى كبير. (Iaabde، b/234223561)
  • عند محاولة إنشاء NavDeepLink فارغ باستخدام navDeepLink Kotlin DSL، ستظهر لك الآن تحذير من الوبر يشير إلى أنّ رابط الصفحة في التطبيق يحتاج إلى معرّف موارد منتظم (URI) و/أو إجراء و/أو نوع mimetype ليكون صالحًا. (I08d2f، b/154038883)

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة دالة الإضافة NavDestination الجديدة لتحليل التصنيفات الديناميكية باستخدام الوسيطات في شكل android:label="{arg}" إلى سلسلة. يتيح استخدام الوسيطات ReferenceType من خلال تحليل قيم R.string في قيم السلسلة الخاصة بها. (I07d89، b/236269380)

التغييرات في السلوك

  • أصبحت الآن arguments في NavBackStackEntry وarguments التي تم تمريرها إلى OnDestinationChangedListener نسخة فقط من الوسيطات غير القابلة للتغيير التي تم إنشاؤها عند الانتقال إلى الوجهة. ويعني ذلك أنّ أي تغييرات يتم إجراؤها على هذه الحِزم لن تظهر في عمليات الوصول اللاحقة إلى arguments أو حالات OnDestinationChangedListener الأخرى. (I676f5)

إصلاح الأخطاء

  • من التنقل 2.5.2: تحاول ميزة الانتقال الديناميكي الآن تثبيت وجهات النشاط بشكل صحيح من الوحدات الأخرى قبل الانتقال إليها. (Ia2c16، b/240292838)
  • من التنقل 2.5.2: سيحل التنقّل الآن محل مثيل "الجزء" بشكل صحيح عند الانتقال إلى الوجهة نفسها وضبط علامة 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)
  • تم إصلاح المشكلة المتمثلة في عدم حذف حالة الإنشاء المحفوظة (على سبيل المثال، استخدامات 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.1

27 تموز (يوليو) 2022

تم طرح "androidx.navigation:navigation-*:2.5.1". يتضمّن الإصدار 2.5.1 هذه الالتزامات.

إصلاح الأخطاء

  • لن تتسبب Navigation Safe Args بعد الآن في إصدار تحذيرات بالإيقاف النهائي في الفئات التي تم إنشاؤها عند استخدام أنواع الوسائط المخصصة التي تم حفظها في Bundle. (Id86ed، b/237725966)

التعديلات على المهام التابعة للتبعية

الإصدار 2.5.0

29 حزيران (يونيو) 2022

تم طرح "androidx.navigation:navigation-*:2.5.0". يتضمّن الإصدار 2.5.0 هذه الالتزامات.

التغييرات المهمة منذ الإصدار 2.4.0

التنقل الآمن

  • تمت ترقية تبعية Android Gradle Plugin من قِبل Navigation Safe Args للاعتماد على 7.0.4، ما أدّى إلى إلغاء التوافق مع إصدارات AGP قبل 7.0.
  • تمت إضافة توافق سمة مساحة الاسم Build.gradle التي سيتم استخدامها بدلاً من appId.

التغييرات الأخرى

  • لم تعُد واجهة برمجة التطبيقات 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 على هذه الالتزامات.

الميزات الجديدة

  • تمت إضافة قاعدة Lit جديدة للتحذير من وضع عناصر <deeplink> داخل عناصر <activity> في الملف navigation.xml.(Ic15a5، b/178403185)

إصلاح الأخطاء

  • تم الآن التخلص من النطاقات القابلة للإنشاء في NavHost وDialogHost بالترتيب المتوقع، أي يتم التخلص من العناصر الداخلية القابلة للإنشاء قبل العنصر الخارجي. (I157e6)
  • تستخدم ميزة الملاحة الآمنة الآن 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 عن "بدء"، ستظل قائمة الكليات المرئية كما هي. (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 على هذه الالتزامات.

الميزات الجديدة

إصلاح الأخطاء

  • تم إصلاح المشكلة المتمثلة في عدم إمكانية الوصول إلى ViewModel تم إنشاؤها عبر by navGraphViewModels() من onCreate() للجزء عند استخدام IllegalStateException. (I8a14d)
  • لن تحتاج NavDeepLink بعد الآن إلى فك ترميز الوسيطات مرتين، ما يعني أنّه يتم الآن تمرير الوسيطات الصحيحة إلى وجهتك النهائية. (I31b0a، b/210711399)

الوسيطات الآمنة

  • تعتمد Safe Args الآن على الإصدار 7.0.4 من مكوّن Android Gradle الإضافي. ويعني هذا أنّ وسيط التنقل الآمن لن تكون متوافقة بعد الآن مع إصدارات "استوديو 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: تم إصلاح مشكلة تتعلّق بعدم إمكانية الوصول إلى ViewModel التي تم إنشاؤها عبر by navGraphViewModels() من onCreate() لجزء ضمن جزء معيّن، وذلك عند استخدام IllegalStateException. (I8a14d)
  • تمت إزالة الترميز من صفحة التنقل 2.5.0-alpha01: لم يعُد NavDeepLink فك ترميز الوسيطات غير الضرورية مرتين، ما يعني أنّ الوسيطات التي تم فك ترميزها بشكل صحيح يتم تمريرها الآن إلى وجهتك النهائية. (I31b0a، b/210711399)
  • الرجوع من صفحة التنقّل 2.5.0-alpha01: تعتمد Safe Args الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. ويعني هذا أنّ نظام Navigation Safe Args لن يكون متوافقًا مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنه متوافق الآن مع الإصدار 7.1.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" والإصدارات الأحدث. (I41c88 وb/213086135 وb/207670704)

الإصدار 2.4.0

الإصدار 2.4.0

26 يناير 2022

تم طرح "androidx.navigation:navigation-*:2.4.0". يتضمّن الإصدار 2.4.0 هذه الالتزامات.

التغييرات المهمة منذ الإصدار 2.3.0

  • تمت إعادة كتابة جميع عناصر التنقّل باستخدام لغة البرمجة Kotlin. أدّى ذلك إلى تحسين إمكانية إلغاء القيم الفارغة للصفوف التي تستخدم فئات عامة (مثل الفئات الفرعية NavType). تم نقل جميع دوال إضافات Kotlin التي كانت في السابق جزءًا من عناصر -ktx إلى العناصر الرئيسية الخاصة بها. سيستمر نشر عناصر -ktx، ولكنها فارغة تمامًا.
  • يحتوي عنصر navigation-fragment الآن على تنفيذ مُعدّ مسبقًا لتنسيق من جزأين من خلال AbstractListDetailFragment الجديد. يستخدم هذا الجزء SlidingPaneLayout لإدارة لوحة القائمة (التي توفّرها فئتك الفرعية) وجزء التفاصيل الذي يستخدم NavHostFragment كتنفيذ، كما هو موضّح في مثال التنفيذ.
  • توفّر طريقة currentBackStackEntryAsFlow() في NavController قيمة Flow تصدر كلما تغيّرت NavBackStackEntry الحالية. ويمكن استخدام هذا المسار كبديل لإدارة OnDestinationChangedListener يدويًا.
  • توفّر NavController الآن إمكانية استرداد قائمة بجميع مثيلات NavBackStackEntry المرئية على أنها StateFlow عبر خاصية visibleEntries التجريبية.
  • يمكن الآن توسيع الفئة NavType لإنشاء NavTypes مخصّصة. لا تتم إتاحة الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقّل بطريقة آلية، مثل رسم بياني للتنقُّل في Kotlin DSL.
  • يوفر التنقل الآن واجهات برمجة تطبيقات findStartDestination() وgetHierarchy() التي يمكن استخدامها للمساعدة في تنفيذ واجهة برمجة تطبيقات التنقل المخصصة. findStartDestination() هي دالة إضافة في NavGraph ستحدد وجهة البدء الفعلية التي سيتم عرضها عند الانتقال إلى الرسم البياني، حتى إذا كانت startDestination نفسها عبارة عن NavGraph متداخلة. getHierarchy() هي دالة على NavDestination يمكن استخدامها للتحقق مما إذا كانت وجهة معيّنة ضمن التدرج الهرمي لجهة أخرى.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • تم تعديل طُرق NavigationUI التي استخدمت BottomNavigationView لتخضع فئتها الفائقة في المادة 1.4.0 رقم NavigationBarView بدلاً من ذلك. يسمح ذلك باستخدام هذه الطرق مع NavigationRailView.

  • عند تضخيم عنصر <action> عبر XML، يمكن لسمات الصور المتحركة استخدام سمات تم سحبها من المظهر باستخدام بنية app:enterAnim="?attr/transitionEnter".

  • تنشئ Safe Args الآن طريقة fromSavedStateHandle() لكل فئة NavArgs. (#122، b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

مسارات التنقل وKotlin DSL

اعتمدت الإصدارات السابقة من التنقّل على كل وجهة تحتوي على رقم تعريف عدد صحيح ثابت يحدّدها بشكلٍ فريد من الوجهات التابعة لها ويسمح لك بالانتقال إلى navigate() إلى تلك الوجهة إما مباشرةً أو من خلال إجراء. لا يزال ذلك صالحًا ومفيدًا، خصوصًا في الحالات التي تحدّد فيها الرسم البياني للتنقّل باستخدام ملف XML ويمكنك استخدام الثوابت R.id التي يتم إنشاؤها تلقائيًا أو الوسيطات الآمنة (التي تستخدم تلك الثوابت لإنشاء الرموز في وقت الإنشاء)، إلا أنّ نظام الأعداد الصحيحة الفريدة لم يلتقط المعنى الدلالي والتعبير عن النفس اللازم لإتاحة الرسومات البيانية الديناميكية بالكامل التي تم إنشاؤها آليًا في وقت التشغيل من خلال التنقل 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، بالإضافة إلى أجهزة الملاحة الاختيارية مثل تلك من مواد التنقل من Accompanist.
  • توفير الدعم الإلزامي لتقاطع الوجهات بين الوجهات يمكن استخدام Accompanist Navigation Animation للتحكم في انتقالات الدخول والخروج باستخدام واجهات Compose API التجريبية.
  • تحديد نطاق Lifecycle لكل وجهة قابلة للإنشاء لا تصل كل وجهة إلى حالة RESUMED إلا عند انتهاء أي انتقالات دخول، وتنخفض على الفور إلى STARTED عند بدء أي عمليات انتقال خروج، ما يسمح لك بتجنُّب جميع مشاكل IllegalStateException واللمس المتعدد من خلال بدء طلب navigate فقط عندما تكون Lifecycle RESUMED.
  • تحديد نطاق ViewModel (من خلال واجهة برمجة التطبيقات viewModel() إنشاء نموذج عرض دورة الحياة 2.4.0 أو hiltViewModel() من إنشاء التنقّل بالتنقّل 1.0.0 على مستوى الوجهة، ما يوفّر نطاقًا لا يتضمّن تغييرات الإعدادات ويكون على الحزمة الخلفية (عند التخلص من المحتوى القابل للإنشاء) وإشارة في onCleared() في ViewModel تشير إلى التخلص الدائم وتنظيف الحالة المرتبطة بـ NavBackStackEntry.
  • تحديد نطاق حالة rememberSaveable على مستوى الوجهة، ما يضمن حفظ جميع الحالات القابلة للإنشاء واستعادتها تلقائيًا عند الرجوع إلى وجهة معيّنة
  • الدعم الكامل لحفظ واستعادة حالة NavController وحالة وجهتها بعد إيقاف العملية وإعادة الترفيه
  • دمج تلقائي مع زر الرجوع في النظام
  • إتاحة تمرير الوسيطات وإرفاق روابط لصفحات في التطبيق بالوجهات وعرض نتيجة إلى الوجهات السابقة

  • يمكنك إنشاء أدوات مساعدة محدّدة في rememberNavController() وcurrentBackStackEntryAsState() للسماح بحالة الرفع وتوصيل NavController بالعناصر القابلة للإنشاء خارج NavHost (مثل شريط التنقّل السفلي).

val navController = rememberNavController()
Scaffold { innerPadding ->
    NavHost(navController, "home", Modifier.padding(innerPadding)) {
        composable("home") {
            // This content fills the area provided to the NavHost
            HomeScreen()
        }
        dialog("detail_dialog") {
            // This content will be automatically added to a Dialog() composable
            // and appear above the HomeScreen or other composable destinations
            DetailDialogContent()
        }
    }
}

راجع دليل إنشاء التنقل للحصول على مزيد من المعلومات.

حزم خلفيات متعددة

تكون NavController مسؤولة عن إدارة الحزمة الخلفية من الوجهات، وإضافة الوجهات إلى الحزمة الخلفية عند navigate() إليها وإزالتها عند طلب popBackStack() أو تشغيل زر الرجوع في النظام. تم توسيع فئة NavOptions الحالية والدمج مع عناصر <action> في ملف XML الخاص بالرسم البياني للتنقّل لإتاحة حفظ الحزمة الخلفية واستعادتها.

في إطار هذا التغيير، يتم الآن تلقائيًا حفظ حالة الوجهات المنبثقة في طُرق العرض المعروضة واستعادتها باستخدام طُرق NavigationUI، وهي onNavDestinationSelected() وBottomNavigationView.setupWithNavController() وNavigationView.setupWithNavController()، ما يتيح استخدام حزم بيانات سابقة متعددة بدون أي تغيير في الرمز. عند استخدام التنقل باستخدام أجزاء، هذه هي الطريقة الموصى بها للتكامل مع العديد من الحزم الخلفية.

يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:

  • في ملف XML الخاص بالتنقل، يمكن للعنصر <action> الآن استخدام السمتَين المنطقيتَين app:popUpToSaveState وapp:restoreState لحفظ حالة أي وجهات عرضت عبر app:popUpTo واستعادة الحالة المرتبطة بالوجهة التي تم ضبطها على أنّها app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • في navOptions Kotlin DSL، يمكنك إضافة السمة المنطقية restoreState والسمة المنطقية saveState في أداة إنشاء popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • عند إنشاء كائن NavOptions يدويًا عبر NavOptions.Builder، يمكنك استخدام setRestoreState() والتحميل الزائد الجديد على setPopUpTo() التي تتطلّب مَعلمة saveState إضافية.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • يمكن الآن أن تتضمّن الطلبات الآلية إلى popBackStack() مَعلمة saveState إضافية.

  • ويمكنك استخدام الطريقة clearBackStack() لمحو أي حالة تم حفظها باستخدام popBackStack() أو popUpToSaveState.

في جميع الحالات، ستحفظ "NavController" حالة كل "NavBackStackEntry" وتعيدها، بما في ذلك أيّ نُسخ لـ ViewModel على مستوى وجهة التنقّل. تم تحديث واجهات برمجة التطبيقات Navigator لتمكين كل Navigator من إتاحة حفظ حالته الخاصة واستعادتها.

التغييرات في السلوك

  • يضيف "NavDeepLinkBuilder" الآن PendingIntent.FLAG_IMMUTABLE إلى السمة PendingIntent التي تم إرجاعها بحلول createPendingIntent()، ما يضمن عمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف الإصدار 12 من نظام التشغيل Android.
  • يعتمد التنقّل الآن على دورة الحياة 2.3.1 وأصبح يمثّل الآن setGraph() وpopBackStack() وnavigateUp() وnavigate()، وهي الطرق التي تُعدِّل NavBackStackEntry Lifecycle باسم @MainThread، ما يجعل التنقّل متوافقًا مع عملية تنفيذ سلسلة الإجراءات الرئيسية التي تم تقديمها في دورة الحياة 2.3.0.
  • تتحقق الروابط المؤدية إلى صفحات في التطبيق الآن من أنّ جميع الوسيطات المطلوبة (التي لا تتضمن قيمًا تلقائية) متوفّرة في Uri.
  • NavDeepLink تعتبر الوسيطات التي تم تحليلها الآن علامات الجنيه نفسها مثل علامات الاستفهام كفاصل بين قطاعات المسار، ما يمنع وسيطة من الامتداد عبر علامة الجنيه.
  • عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن الوسيطات بدون القيم التلقائية قبل تلك التي تتضمّن قيمًا تلقائية كمَعلمات.
  • عند إنشاء الوسيطات، تضع الوسيطات الآمنة الآن المعلمات بدون قيم افتراضية قبل تلك ذات القيم الافتراضية.
  • تعتمد "نظام التشغيل الآمن" الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّه من المفترض ألّا يظهر لك تحذير استخدام applicationIdTextResource بعد الآن.

المشاكل المعروفة

  • تم إصلاحه في التنقل 2.5.0-alpha01: سيتعذر الوصول إلى ViewModel تم إنشاؤه عبر by navGraphViewModels() من onCreate() للجزء باستخدام IllegalStateException. (b/213504272)
  • إصلاح المشكلة في التنقّل 2.5.0-alpha01: لا يتوافق الإصدار Safe Args 2.4.0 مع الإصدار 7.1.0 والإصدارات الأحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android. (b/213086135)
  • لا يؤدي الربط بصفحة معيّنة باستخدام العديد من الرسوم البيانية للتنقُّل المدمجة إلى إنشاء الحزمة الخلفية الكاملة بشكلٍ صحيح. (b/214383060)

الإصدار 2.4.0-rc01

15 كانون الأول (ديسمبر) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-rc01". يحتوي الإصدار 2.4.0-rc01 على هذه الالتزامات.

التغييرات في السلوك

  • NavDeepLink تعتبر الوسيطات التي تم تحليلها الآن علامات الجنيه نفسها المستخدمة في علامات الاستفهام كفاصل بين الوسيطات. (I21309، b/180042703)

إصلاح الأخطاء

  • لن تتجاهل الروابط لصفحات في التطبيق الوسيطات التي تحتوي على قيم مماثلة لاسم العنصر النائب. (If8017، b/207389470)
  • لن يتعطل NavController بعد الآن عند تمييز وجهة مدمَجة باستخدام عناصر الانتقال بعد استعادة NavController. (I0f7c9، b/205021623)
  • عند استخدام قيمة startDestination غير صالحة، سيتم الآن عرض رسالة الخطأ تلقائيًا على مسار وجهة البدء في حال توفّر مسار. (I86b9d، b/208041894)

إصلاح أخطاء إنشاء التنقل

  • تم إصلاح العطل المحتمل الذي نتج عن التبديل السريع بين وجهة البدء ووجهة أخرى باستخدام عناصر قائمة التنقل السفلي. (Ic8976، b/208887901)
  • تتم الآن استعادة وجهة مربّع الحوار بشكل صحيح أعلى الشاشة بعد تغيير الإعدادات أو إيقاف المعالجة. (I4c0dc، b/207386169)
  • تم إصلاح المشكلة التي كانت تؤدي إلى تعذُّر محاولة استرداد ViewModel من NavBackStackEntry لمربّع حوار عند إغلاق مربّع الحوار. (I6b96d، b/206465487)
  • تم إصلاح مشكلة عند استخدام وجهات activity مع NavHost في ميزة "التنقل" والتي قد تؤدي إلى عمليات إعادة تركيب لامتناهية. (I8f64c)
  • تم إصلاح تسرُّب في ميزة "إنشاء ميزة التنقّل" حيث كان يتم الاحتفاظ بمرجع من النشاط القديم بعد تغيير في الإعدادات أو إيقاف العملية. (I4efcb، b/204905432)

إصلاحات أخطاء Args الآمنة

  • لم يعد SafeArgs يتعطل عند محاولة استعادة الصفائف المخصصة بعد انتهاء المعالجة. (I618e8، b/207315994)
  • تم إصلاح خطأ في الوسيطات الآمنة التي كانت لا تسمح للمصفوفات المنطقية باستخدام قيمة null. (I8c396، b/174787525)

الإصدار 2.4.0-beta02

3 تشرين الثاني (نوفمبر) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-beta02". يتضمّن الإصدار 2.4.0-beta02 هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • إنّ التعامل مع الروابط الصريحة والضمنية معًا يضيف الآن علامة saveState تلقائيًا عند الانتقال إلى رسم بياني آخر، ما يضمن أن يعمل الرمز مثل NavigationUI.setupWithNavController والرمز الذي يستخدم حزم خلفية متعددة على النحو المتوقّع. (Ic8807)

التغييرات في السلوك

  • يتم الآن تجميع أنماط الروابط لصفحات في التطبيق بشكل كسول في NavDeepLink بدلاً من تضخّمها. ومن المفترض أن يؤدي ذلك إلى تحسين وقت تضخّم الرسوم البيانية للتنقّل التي تتضمن روابط لصفحات في التطبيق. (b8d257، b/184149935)

إصلاح الأخطاء

  • تم إصلاح المشكلة المتمثلة في دفع NavBackStackEntries إلى أسفل إلى Lifecycle.State.CREATED بعد الانتقال إلى Lifecycle.State.STARTED عند إضافة NavHost مباشرةً إلى setContent() للنشاط. (Ia5ac1، b/203536683)
  • تم إصلاح حالة سباق حيث لا يؤدي تمييز وجهة DialogFragment من المكدس الخلفي قبل عرض مربّع الحوار فعليًا إلى إزالة مربّع الحوار، ما يؤدي إلى حدوث عطل عندما يغلق المستخدم مربّع الحوار هذا يدويًا. (I687e5)
  • تم إصلاح المشكلة المتمثلة في عرض واجهة برمجة تطبيقات onNavDestinationSelected على 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 API في مرحلة تجريبية. (I93f6f)

إصلاح الأخطاء

  • لن يتم إتلاف ViewModels بعد الآن عند مقاطعة الانتقالات من خلال التنقل ذهابًا وإيابًا بين الشاشات نفسها (Id52d8، b/200817333)
  • لم تعد وسيطات NavDeepLink غير الصالحة تتطلب قيمة تلقائية عند إضافة روابط لصفحات في التطبيق إلى NavDestination. (I5aad4، b/201320030)
  • لا تُعد NavBackStackEntries الآن ذات دورات حياة مختلفة متساوية. وهذا يعني أن NavHost سيعيد إنشاء جميع الوجهات بشكلٍ صحيح عند إجراء التنقل باستخدام oneTop وعند إعادة تحديد عناصر القائمة السفلية. (I1b351، b/196997433)
  • تم إصلاح مشكلة في AbstractListDetailFragment تسبّبت في معالجة أو تجاهل السمتين layout_width وlayout_weight في جزء القائمة الذي يعرضه onCreateListPaneView(). (f5fbf3)
  • وتتزامن الحالة المرئية لوجهات مربّعات الحوار الآن بشكل صحيح مع حالة DialogFragmentNavigator. وهذا يعني أنّ استدعاء واجهة برمجة التطبيقات dismiss() غير المتزامن لـ DialogFragment يؤدي الآن إلى محو جميع وجهات الحوار الموجودة أعلى مربّع الحوار الذي تم إغلاقه الآن بشكل صحيح. ولا يؤثر ذلك في الحالات التي تستخدم فيها popUpTo أو popBackStack() لإغلاق مربّع الحوار. (I77ba2)
  • يتضمّن AbstractAppBarOnDestinationChangedListener الآن رسائل خطأ أكثر وضوحًا لـ onDestinationChanged(). (Ie742d)

الإصدار 2.4.0-alpha10

29 أيلول (سبتمبر) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha10". يحتوي الإصدار 2.4.0-alpha10 على هذه الالتزامات.

الميزات الجديدة

  • توفّر NavController الآن إمكانية استرداد قائمة بجميع مثيلات NavBackStackEntry المرئية عبر visibleEntries StateFlow (Ia964e)
  • تأخذ ميزة "rememberNavController()" الآن مجموعة اختيارية من مثيلات Navigator التي ستتم إضافتها إلى NavController التي تم إرجاعها لتوفير دعم أفضل لبرامج التنقّل الاختيارية، مثل تلك الواردة من مواد التنقّل المتوافقة مع الأجهزة الجوّالة. (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)

التعديلات على المهام التابعة للتبعية

الإصدار 2.4.0-alpha08

1 أيلول (سبتمبر) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha08". يحتوي الإصدار 2.4.0-alpha08 على هذه الالتزامات.

الميزات الجديدة

التغييرات في السلوك

  • عند إنشاء الإجراءات، يضع رمز Kotlin الذي تم إنشاؤه من Safe Args الآن الوسيطات بدون القيم التلقائية قبل تلك التي تتضمّن قيمًا تلقائية كمَعلمات. (Idb697، b/188855904)
  • تتحقق الروابط المؤدية إلى صفحات في التطبيق الآن من أنّ جميع الوسيطات المطلوبة (التي لا تتضمن قيمًا تلقائية) متوفّرة في Uri. (#204، b/185527157)

إصلاح الأخطاء

  • عند استخدام الترميزَين getBackStackEntry وpreviousBackStackEntry داخل composable() ، بالتزامن مع remember()، لن يؤدي ذلك إلى استثناء عدم توفّر وجهة في الحزمة الخلفية بعد ذلك. (I75138، b/194313238)
  • تتم الآن إعادة إنشاء وسائط "إنشاء التنقل" بشكل صحيح عند تغيير وسيطات المكدس الخلفي واستخدام launchSingleTop=true. (Iebd69، b/186392337)
  • لن يبقى هناك رمز ArrayIndexOutOfBoundsException عند استدعاء setGraph باستخدام رسم بياني يتضمن 13 أو 29 وجهة. (I1a9f1، b/195171984)
  • يجب ألا يتسبب منشئ JavaScript SafeArgs في إصدار تحذيرات من الوبر عند إنشاء فئات Args. (I1a666، b/185843837)

المساهمة الخارجية

  • نشكرك على ospixd لضمان توفُّر الروابط لصفحات في التطبيق من خلال جميع الوسيطات المطلوبة (التي ليس لها قيم تلقائية) في Uri. (#204، b/185527157)

الإصدار 2.4.0-alpha07

18 آب (أغسطس) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha07". يحتوي الإصدار 2.4.0-alpha07 على هذه الالتزامات.

إصلاح الأخطاء

  • تحفظ ميزة "إنشاء التنقل" الآن الحالة بشكل صحيح بعد تغييرات الضبط وعند تغيير الرسوم البيانية أثناء استخدام ميزة "تكديس العودة" المتعدد. (If5a3d، b/195141957)
  • لن تؤدي إعادة تحديد علامة التبويب نفسها عند استخدام ميزة التنقل في نافذة إنشاء باستخدام حزم خلفية متعددة إلى ظهور شاشة فارغة بعد الآن. (I860dc, b/194925622)
  • يلاحظ NavHost الآن التغييرات في Lifecycle.State من NavBackStackEntry، ما يعني أنّ استخدام NavHost في أي جزء ستتم إعادة بنائه الآن بشكل صحيح مع تغيُّر مراحل النشاط بدلاً من ظهور شاشة فارغة. (I4eb85، b/195864489)
  • تم إصلاح المشكلة المتمثلة في أن إغلاق DialogFragment لا يؤدي إلى تعديل حالة NavController بشكل صحيح بعد إعادة إنشاء نشاطك (أي بعد تغيير الإعدادات). (Icd72b)
  • تم إصلاح المشكلة المتمثلة في أن فرقعة وجهة مربع لا يؤدي إلى تحديث معالجة زر الرجوع في نظام NavController، مما قد يتسبب في اعتراض NavController لزر الرجوع على الرغم من عدم وجود أي مكدس خلفي ينبثق. (If3b34)
  • تنشئ الوسيطات الآمنة الآن تلقائيًا طريقة toSavedStateHandle للوسيطات التي يمكن استخدامها لاختبار رمز ViewModel. (If1e2d، b/193353880)

الإصدار 2.4.0-alpha06

4 آب (أغسطس) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha06". يحتوي الإصدار 2.4.0-alpha06 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إعادة تسمية الطريقتَين requireSlidingPaneLayout() وrequireDetailPaneNavHostFragment() في AbstractListDetailFragment إلى getSlidingPaneLayout() وgetDetailPaneNavHostFragment() على التوالي. (I34a08)

التغييرات في السلوك

  • عند التنقّل باستخدام الصور المتحركة (مثل Crossfade)، سيصل الآن Lifecycle للوجهة الجديدة إلى RESUMED فقط عند اكتمال الحركة. (If0543 وb/172112072 وb/194301889)
  • يضبط NavHost في ميزة "التنقل" في Compose الآن الرسم البياني كجزء من المقطوعة الأولى. (Ieb7be)

إصلاح الأخطاء

  • لم يعد دفع الوجهة الأخيرة في الرسم البياني للتنقُّل إلى عرض علامة ClassCastException. (If0543 وb/172112072 وb/194301889)
  • تم إصلاح NullPointerException يحدث عند إضافة رابط لصفحة في التطبيق بدون Uri والتنقّل من خلال مسار أو رابط لصفحة في التطبيق. (938a0c، b/193805425)
  • تم إصلاح مشكلة في ميزة "إنشاء التنقل" حيث لا يصل NavBackStackEntry المرتبط بصفحة معيّنة في التطبيق إلى حالة RESUMED. (I192c5)
  • تم إصلاح المشكلة المتمثلة في ظهور وجهة مربع حوار لا يؤدي إلى تحديث معالجة زر الرجوع في نظام NavController، مما قد يؤدي إلى اعتراض وحدة التحكم في التنقل لزر الرجوع على الرغم من عدم وجود أي مكدس خلفي للانبثاق. (aosp/1782668)

الإصدار 2.4.0-alpha05

21 تموز (يوليو) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha05". يحتوي الإصدار 2.4.0-alpha05 على هذه الالتزامات.

التغييرات في السلوك

  • تستخدم ميزة "NavHost" في ميزة "إنشاء التنقل" الآن دائمًا ميزة "التلاشي المتقاطع" عند التنقل عبر الوجهات. (I07049، b/172112072)
  • يمكنك الآن إجراء تغييرات على الرسم البياني لـ NavHost. سيتم اعتبار الرسومات البيانية التي لها نفس الوجهة والوجهة في الرسم البياني على قدم المساواة ولن يتم محو المكدس الخلفي في NavController. (I0b8db، b/175392262)

إصلاح الأخطاء

  • تم إصلاح NoSuchElementException عند استدعاء popBackStack() من داخل LifecycleObserver مرفقًا بـ NavBackStackEntry بسبب التحديثات التي أجراها المستخدم بشأن حالة "وحدة التحكّم في التنقل". (I64621)
  • تتيح ميزة "AbstractListDetailFragment" الآن إزالة SlidingPaneLayout تمامًا من حزمة APK عند عدم استخدام AbstractListDetailFragment. (I611ad)
  • يلغي NavGraph وNavDestination الآن طريقة يساوي لذا سيتم اعتبار كائنين لهما نفس القيم متساويتين. (I166eb، b/175392262)

الإصدار 2.4.0-alpha04

1 تموز (يوليو) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha04". يحتوي الإصدار 2.4.0-alpha04 على هذه الالتزامات.

الميزات الجديدة

  • يحتوي عنصر navigation-fragment الآن على تنفيذ مُعدّ مسبقًا لتنسيق من جزأين من خلال AbstractListDetailFragment الجديد. يستخدم هذا الجزء SlidingPaneLayout لإدارة لوحة القائمة (التي توفّرها فئتك الفرعية) وجزء التفاصيل الذي يستخدم NavHostFragment كتنفيذ، كما هو موضّح في مثال التنفيذ. (Iac4be، b/191276636)
  • يتيح الآن NavHost من عنصر navigation-compose استخدام وجهات dialog بالإضافة إلى وجهات composable. سيتم عرض كل وجهة من وجهات مربّعات الحوار هذه ضمن Dialog قابل للإنشاء، عائمًا فوق وجهة composable الحالية. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية الدالة add في NavigatorState إلى push. يجب تغيير جميع المكالمات الحالية إلى add() إلى Push(). (Ie89fc، b/172112072)
  • يمكن الآن لمثيلات Navigator المخصّصة استخدام واجهتَي برمجة التطبيقات pushWithTransaction وpopWithTransition على NavigatorState لإرسال وجهة أو إبرازها بشكل غير متزامن. تجدر الإشارة إلى أنّه لم يتم استخدام واجهات برمجة التطبيقات هذه حتى الآن من قِبل أيٍّ من برامج التنقّل المُدرجة. (Ic4d7c، b/172112072)

التغييرات في السلوك

  • يضيف "NavDeepLinkBuilder" الآن PendingIntent.FLAG_IMMUTABLE إلى السمة PendingIntent التي تم إرجاعها بحلول createPendingIntent()، ما يضمن عمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف الإصدار 12 من نظام التشغيل Android. (If8c52)

إصلاح الأخطاء

  • تم إصلاح مشكلة في <include-dynamic> تتمثل في عدم تمرير الوسيطات التي يتم تمريرها إلى الرسم البياني بشكل صحيح إلى الرسم البياني المضمن ديناميكيًا. (I3e115)
  • تم إصلاح NullPointerException عند الانتقال إلى وجهة باستخدام وسيطة string[] مع قيمة تلقائية تبلغ @null. (I1fbe8)
  • يمكنك إضافة قواعد ProGuard لـ @Navigator.Name، مع إصلاح المشاكل عند استخدام الوضع الكامل R8 3.1. (I2add9، b/191654433)
  • لن يتعذّر إتمام SafeArgs بعد الآن عند إنشاء تطبيقك باستخدام إصدارات Kotlin قبل 1.5.0. (Icd1ff، b/190739257)

الإصدار 2.4.0-alpha03

16 حزيران (يونيو) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha03". يحتوي الإصدار 2.4.0-alpha03 على هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح المشكلة المتمثلة في الحاجة إلى مكالمتين navigate() للانتقال إلى رسم بياني ديناميكي مضمّن. (I7785c، b/188859835)
  • تم إصلاح انحدار تم تقديمه في التنقل 2.4.0-alpha01 حيث لن يؤدي setupActionBarWithNavController() إلى إزالة الرمز لأعلى بشكل صحيح عندما تكون في وجهة من المستوى الأعلى. (I5d443، b/189868637)
  • تم إصلاح IllegalStateException عند استدعاء popBackStack() بعد فرقعة الرسم البياني الجذري لـ NavController. (I2a330، b/190265699)
  • سيتم الآن تطبيق قواعد ProGuard الخاصة بـ by navArgs() بشكل صحيح عند استخدام navigation-common أو أي عناصر تعتمد عليه. (I68800، b/190082521)
  • إنّ OnDestinationChangedListener الذي يتّصل بـ "navigate()" في المرة الأولى التي يتلقّى فيها معاودة الاتصال الآن يتلقّى الآن معاودة الاتصال الثانية بالشكل المناسب مع الوجهة التي يتم الانتقال إليها. (Ie5f9e، b/190228815)
  • لم تعد Safe Args تتعطل عند استخدامها مع وحدات الميزات الديناميكية وAGP 7.0 أو أحدث. (I69518، b/189966576)

مشكلة معروفة

  • لن تنجح الوسيطات الآمنة مع ظهور خطأ Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ عند استخدام Gradle 6.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 على هذه الالتزامات.

الميزات الجديدة

  • أصبحت المسارات الآن متوافقة مع وجهات الأنشطة والأجزاء ومربع الحوار، فضلاً عن التنقل الديناميكي في Kotlin DSL. (Ib5544 وIa617b وI22f96 وb/188914648 وb/188901565)
  • أضاف NavigationUI واجهات برمجة التطبيقات التجريبية مؤقتًا للسماح بإيقاف حفظ حالتك. وعلى الرغم من أنّ حفظ الحالة دائمًا هو السلوك الصحيح، لا تزال هناك استخدامات للمكتبات المتوقّفة نهائيًا (أي الأجزاء التي تم الاحتفاظ بها) والتي لا يمكن اعتمادها عند حفظ الحالة، ما يتيح للتطبيقات فرصة التحوّل ببطء من أي واجهات برمجة تطبيقات غير متوافقة. (Idf93c)
  • يوفر التنقل الآن واجهات برمجة تطبيقات findDestination() وgetHierarchy() التي يمكن استخدامها للمساعدة في تنفيذ واجهة برمجة تطبيقات التنقل المخصصة. findDestination() هي دالة امتداد على NavGraph ستحدّد وجهة ضمن الرسم البياني. getHierarchy() هي دالة على NavDestination يمكن استخدامها للتحقّق مما إذا كانت وجهة معيّنة ضمن التدرج الهرمي لجهة أخرى.(I2932f، b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • تم تعديل طُرق الروابط في واجهة المستخدم التي تستخدم 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)

  • لم تعد Safe Args تتعطل عند محاولة إنشاء خصائص الاتجاه في Kotlin. (Id2416، b/188564435)

  • تمت الآن إضافة تعليقات توضيحية بشكل صحيح إلى طريقة setId على NavDestination باستخدام @IdRes، وبالتالي تقبل أرقام تعريف الموارد فقط. (I69b80)

  • أصبحت معلَمة int للسمة findNode الآن resId بدلاً من resid. (I7711d)

تعديل التبعية

  • تعتمد "نظام التشغيل الآمن" الآن على الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّه من المفترض ألّا يظهر لك تحذير استخدام applicationIdTextResource بعد الآن. (I6d67b، b/172824579)

الإصدار 2.4.0-alpha01

18 أيار (مايو) 2021

تم طرح "androidx.navigation:navigation-*:2.4.0-alpha01". يحتوي الإصدار 2.4.0-alpha01 على هذه الالتزامات.

الميزات الجديدة

  • توفّر طريقة currentBackStackEntryAsFlow() في NavController قيمة Flow تصدر كلما تغيّرت NavBackStackEntry الحالية. ويمكن استخدام هذا المسار كبديل لإدارة OnDestinationChangedListener يدويًا. (I19c4a و#89 وb/163947280)

حزم خلفيات متعددة

تكون NavController مسؤولة عن إدارة الحزمة الخلفية من الوجهات، وإضافة الوجهات إلى الحزمة الخلفية عند navigate() إليها وإزالتها عند طلب popBackStack() أو تشغيل زر الرجوع في النظام. تم توسيع فئة NavOptions الحالية والدمج في إدخالات <action> في ملف XML الخاص بالرسم البياني للتنقّل لإتاحة حفظ الحزمة الخلفية واستعادتها. (b/80029773)

في إطار هذا التغيير، يتم الآن تلقائيًا حفظ حالة الوجهات المنبثقة في طُرق العرض المعروضة واستعادتها باستخدام طُرق NavigationUI، وهي onNavDestinationSelected() وBottomNavigationView.setupWithNavController() وNavigationView.setupWithNavController()، ما يتيح استخدام حزم بيانات سابقة متعددة بدون أي تغيير في الرمز. عند استخدام التنقل باستخدام أجزاء، هذه هي الطريقة الموصى بها للتكامل مع العديد من الحزم الخلفية. (Ie07ca)

يتم عرض واجهات برمجة التطبيقات الأساسية لحفظ الحالة واستعادتها من خلال عدد من مساحات العرض:

  • في ملف XML الخاص بالتنقل، يمكن للعنصر <action> الآن استخدام السمتَين المنطقيتَين app:popUpToSaveState وapp:restoreState لحفظ حالة أي وجهات عرضت عبر app:popUpTo واستعادة الحالة المرتبطة بالوجهة التي تم ضبطها على أنّها app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • في navOptions Kotlin DSL، يمكنك إضافة السمة المنطقية restoreState والسمة المنطقية saveState في أداة إنشاء popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • عند إنشاء كائن NavOptions يدويًا عبر NavOptions.Builder، يمكنك استخدام setRestoreState() والتحميل الزائد الجديد على setPopUpTo() التي تتطلّب مَعلمة saveState إضافية.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • يمكن الآن أن تتضمّن الطلبات الآلية إلى popBackStack() مَعلمة saveState إضافية.

في جميع الحالات، ستحفظ "NavController" حالة كل "NavBackStackEntry" وتعيدها، بما في ذلك أيّ نُسخ لـ ViewModel على مستوى وجهة التنقّل. تم تحديث واجهات برمجة التطبيقات Navigator لتمكين كل Navigator من إتاحة حفظ حالته الخاصة واستعادتها.

تم تعديل كل من ComposeNavigator المستخدمة للوجهات composable في "إنشاء التنقل" وFragmentNavigator وDynamicFragmentNavigator المستخدمة للوجهات <fragment> في "التنقل باستخدام الأجزاء" لاستخدام واجهات برمجة تطبيقات المستكشف الجديدة ودعم حالة الحفظ والاستعادة.

مسارات التنقل

المسار هو عبارة عن وسيلة String تُحدِّد وجهة معيّنة بشكلٍ فريد. على الرغم من أن هذا المفهوم كان يُستخدم سابقًا في ميزة إنشاء التنقل فقط، فقد تطوَّر الآن ليصبح جزءًا من واجهات برمجة التطبيقات الأساسية للتنقُّل. يوفر هذا بديلاً لاستخدام أرقام تعريف الأعداد الصحيحة عند إنشاء الرسم البياني من خلال ميزة التنقل Kotlin DSL. (b/172823546)

جميع واجهات برمجة التطبيقات التي كانت تحصل على معرّف فقط لديها حمل زائد الآن يأخذ مسار String. يشمل ذلك navigate() وpopBackStack() وpopUpTo() وgetBackStackEntry().

وقد ينتج عن ذلك بعض الآثار الناتجة عن واجهة برمجة التطبيقات:

  • تم إيقاف سمة popUpTo kotlin على Kotlin DSL لصالح popUpToId. (I59c73، b/172823546)
  • تم إيقاف واجهة برمجة التطبيقات getStartDestination() 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)

الوسيطات الآمنة

  • تنشئ Safe Args الآن طريقة fromSavedStateHandle() لكل فئة NavArgs. (#122، b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • تم تحديث وسيطات الأمان ليكون بإمكانك الاعتماد على 1.8.0 KotlinPoet. (#172، b/183990444)

التغييرات في السلوك

  • يعتمد التنقّل الآن على دورة الحياة 2.3.1 وأصبح يمثّل الآن setGraph() وpopBackStack() وnavigateUp() وnavigate()، وهي الطرق التي تُعدِّل NavBackStackEntry Lifecycle باسم @MainThread، ما يجعل التنقّل متوافقًا مع عملية تنفيذ سلسلة الإجراءات الرئيسية التي تم تقديمها في دورة الحياة 2.3.0. (b/171125856)
  • أصبح تحليل وسيطات التعداد من الروابط لصفحات في التطبيق غير حساس لحالة الأحرف، ما يسمح لرابط لصفحة في التطبيق مثل http://www.example.com/red بمطابقة رابط لصفحة في التطبيق www.example.com/{color} حتى عندما يحتوي التعداد على القيمة RED. (#152، b/135857840)

التوافق مع الكتابة

  • لا يتوافق androidx.navigation:navigation-compose:2.4.0-alpha01 إلا مع إصدار Compose 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 لجعل تحليل وسيطات التعداد من الروابط لصفحات في التطبيق غير حساس لحالة الأحرف. (#152، b/135857840)
  • نشكرك على osipxd لإصلاح مشكلة يكون فيها العناصر النائبة للوسيطات اللاحقة لها الأولوية على الروابط لصفحات في التطبيق التي لها لاحقة تامة مطابقة. (#153، b/184072811)
  • نشكرك tatocaster على تعديل السمة الآمنة Args للاعتماد على 1.8.0KotlinPoet. (#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-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 VolumeLocal باستخدام NavBackStackEntry الخاصة بهذه الوجهة، ما يضمن حفظ أي ولاية محفوظة مباشرةً في SavedStateRegistry واستعادتها بجانب الوجهة. (I435d7، b/179469431)

الإصدار 1.0.0-alpha07

10 شباط (فبراير) 2021

تم طرح "androidx.navigation:navigation-compose:1.0.0-alpha07". يحتوي الإصدار 1.0.0-alpha07 على هذه الالتزامات.

التعديلات على المهام التابعة للتبعية

الإصدار 1.0.0-alpha06

28 كانون الثاني (يناير) 2021

تم طرح "androidx.navigation:navigation-compose:1.0.0-alpha06". يحتوي الإصدار 1.0.0-alpha06 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تم إدراج طريقة الإضافة "getBackStackEntry(route: String)" في NavController، والتي تعرض قيمة "NavBackStackEntry" المرتبطة. (If8931)

الإصدار 1.0.0-alpha05

13 كانون الثاني (يناير) 2021

تم طرح "androidx.navigation:navigation-compose:1.0.0-alpha05". يحتوي الإصدار 1.0.0-alpha05 على هذه الالتزامات.

تم تحديثه للاعتماد على Compose 1.0.0-alpha10.

الإصدار 1.0.0-alpha04

16 كانون الأول (ديسمبر) 2020

تم طرح "androidx.navigation:navigation-compose:1.0.0-alpha04". يحتوي الإصدار 1.0.0-alpha04 على هذه الالتزامات.

  • تم التعديل للتوافق مع ميزة Compose 1.0.0-alpha09.

الإصدار 1.0.0-alpha03

2 كانون الأول (ديسمبر) 2020

تم طرح "androidx.navigation:navigation-compose:1.0.0-alpha03". يحتوي الإصدار 1.0.0-alpha03 على هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم عمل popBackStack() وnavigateUp() بعد تغيير في الإعدادات أو معالجة حالات الوفاة والترفيه. (Icea47، b/173281473)
  • يعمل الانتقال إلى رسم بياني متداخل داخل NavHost بشكل صحيح الآن. (I0948d، b/173647694)

الإصدار 1.0.0-alpha02

11 تشرين الثاني (نوفمبر) 2020

تم طرح "androidx.navigation:navigation-compose:1.0.0-alpha02". يحتوي الإصدار 1.0.0-alpha02 على هذه الالتزامات.

تغييرات واجهة برمجة التطبيقات

  • تشتمل نافذة إنشاء التنقل الآن على NavOptions لاستخدام عمليات POPUpTo وLaunchSingleTop (If96c3 وb/171468994)
  • تمت إضافة دالة تنقل تأخذ مسارًا بدلاً من معرّف يسمح لك بإنشاء رسوم بيانية متداخلة في مكتبة توليف البيانات الرقمية. (I1661d)
  • يأتي startDestination الآن قبل المسار في قائمة المعلمات لـ NavHost (Ie620e)
  • يمكنك الآن إنشاء رسم بياني باستخدام المسار كوجهة بداية خارج إطار NavHost القابل للإنشاء. (Iceb75)

الإصدار 1.0.0-alpha01

28 تشرين الأول (أكتوبر) 2020

تم طرح "android.navigation:navigation-compose:1.0.0-alpha01". يحتوي الإصدار 1.0.0-alpha01 على هذه الالتزامات.

الميزات الجديدة

يوفر عنصر navigation-compose التكامل بين مكوِّن التنقل وJetpack Compose. وتستخدم وظائف @Composable كوجهات في تطبيقك.

يوفر هذا الإصدار الأولي ما يلي:

  • NavHost قابل للإنشاء يتيح لك إنشاء الرسم البياني للتنقّل عبر Kotlin DSL.
  • نطاق دورة الحياة وViewModel والحالة المحفوظة على مستوى الوجهة
  • دمج تلقائي مع زر الرجوع في النظام
  • إتاحة تمرير الوسيطات وإرفاق روابط لصفحات في التطبيق بالوجهات وعرض نتيجة إلى الوجهات السابقة
  • يمكنك إنشاء أدوات مساعدة محدّدة في rememberNavController() وcurrentBackStackEntryAsState() للسماح بحالة الرفع وتوصيل NavController بالعناصر القابلة للإنشاء خارج NavHost (مثل شريط التنقّل السفلي).

راجع دليل إنشاء التنقل للحصول على مزيد من المعلومات.

الإصدار 2.3.5

الإصدار 2.3.5

7 نيسان (أبريل) 2021

تم طرح "androidx.navigation:navigation-*:2.3.5". يتضمّن الإصدار 2.3.5 هذه الالتزامات.

الميزات الجديدة

  • عند التنقّل باستخدام NavDeepLinkRequest أو Uri، يمكنك الآن الوصول إلى Uri والإجراء ونوع MIME في الوجهة الناتجة من خلال الحصول على الغرض من الوسيطات عبر KEY_DEEP_LINK_INTENT، ما يؤدي إلى مطابقة الوظيفة المتاحة حاليًا للربط الخارجي بصفحة معيّنة. (I975c3، b/181521877)

إصلاح الأخطاء

  • تمت إضافة "OnBackPressedCallbacks" إلى مُرسِل مع إدراج NavBackStackEntry بصفته مالك LifecycleOwner الآن ليتم الاعتراض بشكل صحيح بعد دورة حياة النشاط هي STOPPED، ثم STARTED (Iff94f، b/182284739)
  • أصبح تحليل نطاق الروابط المؤدية إلى صفحة في التطبيق غير حساس لحالة الأحرف، ما يضمن تطابق www.example.com مع كل من www.example.com وwww.Example.com. تجدر الإشارة إلى أنّ أسماء مَعلمات طلب البحث لا تزال حسّاسة لحالة الأحرف. (#144، b/153829033)
  • تم إصلاح الخطأ NullPointerException الذي يمكن أن يحدث عندما تحتوي الوجهة على عدة وسيطات تلقائية غير قابلة للإلغاء وتنتقل إلى تلك الوجهة مع إلغاء مجموعة فرعية من هذه الوسيطات فقط. (aosp/1644827)

التعديلات على المهام التابعة للتبعية

  • يعتمد المكوّن الإضافي Navigation Safe Args Gradle الإضافي الآن على المكوّن الإضافي Kotlin Gradle الإضافي 1.4.31. (aosp/1661058، b/181156413)

المساهمة الخارجية

  • نشكرك على bentrengrove على طلب السحب الذي يجعل تحليل نطاق الرابط لصفحة في التطبيق غير حساس لحالة الأحرف. (#144، b/153829033)

الإصدار 2.3.4

الإصدار 2.3.4

10 آذار (مارس) 2021

تم طرح "androidx.navigation:navigation-*:2.3.4". يتضمّن الإصدار 2.3.4 هذه الالتزامات.

الميزات الجديدة

  • يمكن الآن تحليل وسيطات ReferenceType بشكلٍ صحيح عند إرسالها كجزء من معرّف الموارد المنتظم (URI) لرابط لموضع معيّن. يتيح ذلك استخدام قيمة العدد الصحيح الأولي والقيم السداسية العشرية التي تبدأ بـ 0x. (#127، b/179166693)
  • تتوافق الآن android:defaultValue لوسيطة مع app:argType="float" مع القيم التلقائية لعدد صحيح، ما يسمح لك باستخدام android:defaultValue="0"بدلاً من طلب استخدام 0.0. (#117، b/173766247)

إصلاح الأخطاء

  • إصلاح تقدم التثبيت العالق عند استخدام دعم التنقل للميزات الديناميكية. (Ib27a7، b/169636207)
  • إنّ طلب setViewModelStore أو setLifecycleOwner باستخدام الكائن نفسه الذي سبق ضبطه سيصبح الآن بيئة مستقلة (Idf491، b/177825470)
  • تضيف Safe-Args الآن تعليقات توضيحية لمنعطفات على الطرق المناسبة عند استخدام جافا. (I8fbc5، b/179463137)

المساهمات الخارجية

  • نشكرك على JvmName على طلب السحب للتأكد من إمكانية تحليل وسيطات ReferenceType بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم (URI) لرابط لموضع معيّن. (#127، b/179166693)
  • شكرًا tatocaster على طلب السحب للسماح بـ defaultValue لوسيطة مع app:argType=”float” تدعم الآن القيم التلقائية للأعداد الصحيحة. (#117، b/173766247)

الإصدار 2.3.3

الإصدار 2.3.3

27 كانون الثاني (يناير) 2021

تم طرح "androidx.navigation:navigation-*:2.3.3". يتضمّن الإصدار 2.3.3 هذه الالتزامات.

إصلاح الأخطاء

  • لم يعُد هناك عطل عند تمييز NavBackStackEntry قبل نقل Lifecycle إلى CREATED. (Ie3ba3)
  • تم إصلاح الانحدار الناتج عن b/171364502 الذي تسبب في حدوث ResourceNotFoundException نتيجة الانتقال إلى نشاط يتضمّن قيمة مورد رسوم متحركة قدرها 0. (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)
  • تستخدم ميزة التنقل 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 هذه الالتزامات.

الميزات الجديدة

  • تمت إضافة موارد أداة الرسوم المتحركة التلقائية إلى واجهة مستخدم التنقّل ويُنصح باستخدامها على موارد الرسوم المتحركة التلقائية. (b/167430145)
  • تلغي NavOptions الآن رمز التجزئة ويساوي الطرق (b/161586466)
  • يتضمّن التنقّل الآن الوجهة الحالية في حقل "ليست هناك وجهة تتضمّن رقم التعريف" legalArgumentException، والذي من المفترض أن يحسِّن تجربة تصحيح أخطاء المطوّرين. (b/168311416)

إصلاح الأخطاء

  • لن تلتف الوسيطات الآمنة بعد الآن في سطر الرجوع، حتى إذا كان اسم فئة الوسيطة الذي تم إنشاؤه أطول من 100 حرف. (b/168584987)

التغييرات المتعلّقة بالاعتمادية

  • يعتمد "navigation-ui" الآن على DrawerLayout 1.1.1، وتضمن قدرة NavigationUI على فتح الدرج حتى عند استخدام LOCK_MODE_LOCKED_CLOSED أو LOCK_MODE_LOCKED_OPEN. (b/162253907)
  • تعتمد Args الآن على KotlinPoet 1.6.0 (aosp/1435911)
  • تعتمد Args الآن على الإصدار 4.0.1 من AGP (aosp/1442337).

الإصدار 2.3.0

الإصدار 2.3.0

24 حزيران (يونيو) 2020

تم طرح "androidx.navigation:navigation-*:2.3.0". يتضمّن الإصدار 2.3.0 هذه الالتزامات.

التغييرات الرئيسية منذ الإصدار 2.2.0

  • دمج وحدة الميزات: تسمح لك العنصران navigation-dynamic-features-runtime وnavigation-dynamic-features-fragment بالانتقال إلى الوجهات المحدّدة في وحدات الميزات، ما يتيح لك تلقائيًا معالجة تثبيت وحدات الميزات حسب الحاجة. يُرجى الاطّلاع على التنقل باستخدام وحدات الميزات للحصول على مزيد من المعلومات.
  • اختبار التنقّل: يوفّر العنصر navigation-testing عنصر TestNavHostController يسمح لك بضبط الوجهة الحالية والتحقّق من حزمة الرجوع إلى المتصفِّح بعد إتمام عمليات التنقّل. يُرجى الاطّلاع على اختبار التنقّل لمزيد من المعلومات.
  • عرض نتيجة: تتيح لك الآن السمة NavBackStackEntry المرتبطة بكل وجهة في حزمة "الرجوع" في "التنقل" الوصول إلى SavedStateHandle مناسبة لتخزين الكميات الصغيرة من الحالة المحفوظة التي يجب أن ترتبط بإدخال مكدس خلفي معيّن. راجع عرض نتيجة إلى الوجهة السابقة للحصول على مزيد من المعلومات.
  • دعم NavigationUI لـ Openable: تم استبدال جميع استخدامات DrawerLayout في NavigationUI بواجهة Openable الأكثر عمومية التي تمت إضافتها في CustomView 1.1.0، وتم تنفيذها بواسطة DrawerLayout في DrawerLayout 1.1.0.
  • إتاحة الإجراءات ونوع MIME في الروابط لصفحات معيّنة: تم توسيع نطاق الربط لموضع معيّن ليشمل app:action وapp:mimeType بالإضافة إلى app:uri المتاحة سابقًا. تتيح "NavController" الآن التنقّل باستخدام أي مجموعة من هذه الحقول عبر فئة NavDeepLinkRequest الجديدة. يُرجى الاطّلاع على التنقل باستخدام NavDeepLinkRequest للحصول على مزيد من المعلومات.

المشاكل المعروفة

  • لا يتوفّر بعد إجراء روابط لصفحات في التطبيق وأنواع MIME في دمج البيان. إلى حين اكتمال هذا العمل، لن تتضمّن أي عناصر <intent-filter> تم إنشاؤها من العنصر <nav-graph> في البيان نوع MIME الخاص بك في عنصر <data> الخاص به أو على <action> المخصّص. عليك إضافة السمة <intent-filter> المناسبة إلى ملف البيان يدويًا.

الإصدار 2.3.0-rc01

10 حزيران (يونيو) 2020

تم طرح "androidx.navigation:navigation-*:2.3.0-rc01". يتضمّن الإصدار 2.3.0-rc01 هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح NullPointerException عند استبدال مثيل وجهة دون أي وسيطات بمثيل آخر ب وسيطات بـ singleTop. (b/158006669)
  • تحتوي جميع استثناءات destination is unknown التي يتم طرحها في NavController الآن على معلومات إضافية لتصحيح الأخطاء للمساعدة في تحديد حالة NavController. (b/157764916)

الإصدار 2.3.0-beta01

20 أيار (مايو) 2020

تم طرح androidx.navigation:navigation-*:2.3.0-beta01. يتضمّن الإصدار 2.3.0-beta01 هذه الالتزامات.

إصلاح الأخطاء

  • تم إصلاح المشكلة المتمثلة في عدم تعديل Lifecycle لـ NavBackStackEntry بشكل صحيح بعد انتهاء العملية. (b/155218371)
  • يتم الآن إرسال OnDestinationChangedListener مثيل مُسجَّل قبل الاتصال بـ setGraph() بشكل صحيح إلى الوجهة التي تمت استعادتها بعد انتهاء العملية. (b/155218371)
  • عند استخدام singleTop، يتم الآن تعديل الوسيطات الخاصة بـ NavBackStackEntry بشكل صحيح ويتم إرسال الوسيطات المعدّلة إلى جميع مثيلات OnDestinationChangeListener. (b/156545508)

التعديلات على المهام التابعة للتبعية

الإصدار 2.3.0-alpha06

29 نيسان (أبريل) 2020

تم طرح "androidx.navigation:navigation-*:2.3.0-alpha06". (يحتوي الإصدار 2.3.0-alpha06 على هذه الالتزامات.)

الميزات الجديدة

  • تم توسيع نطاق الربط بصفحة معيّنة لإتاحة استخدام app:action وapp:mimeType بالإضافة إلى app:uri التي كانت متوفّرة سابقًا. تتيح أداة NavController الآن التنقّل باستخدام أي مجموعة من هذه الحقول عبر الفئة الجديدة NavDeepLinkRequest. (b/136573074، b/135334841)

تغييرات واجهة برمجة التطبيقات

  • تم توسيع نطاق دعم Kotlin DSL بشكلٍ كبير لوجهات الانتقال الديناميكي. (b/148969800)

إصلاح الأخطاء

  • تم إصلاح مشكلة تجاهل أهداف رابط لصفحة في التطبيق عند استخدام وجهة بداية مدمجة. (b/154532067)

الإصدار 2.3.0-alpha05

نيسان (أبريل) 2020

تم طرح "androidx.navigation:navigation-*:2.3.0-alpha05". يحتوي الإصدار 2.3.0-alpha05 على هذه الالتزامات.

الميزات الجديدة

  • بالنسبة إلى تضمينات الرسم البياني الديناميكي التي تستخدم <include-dynamic>، لن تحتاج بعد الآن إلى تحديد app:graphPackage وسيتم استخدام معرّف تلقائي من خلال إضافة لاحقة moduleName إلى applicationId بعد النقطة. إذا كنت بحاجة إلى تخصيص graphPackage، يمكنك الآن استخدام العنصر النائب ${applicationId}. (b/152696768)
  • يعرض الرسم البياني لخدمة Kotlin DSL الآن defaultArguments Map للإجراءات، ما يتيح إمكانية ضبط القيم التلقائية على عناصر <action> في ملفات XML الخاصة بالتنقل. (b/150345605)

إصلاح الأخطاء

  • من التنقل 2.2.2: تم إصلاح IllegalStateException عند الربط بصفحة بداية الرسم البياني عندما يكون لديك حالات NavHostFragment متعددة في نشاطك. (b/147378752)

التعديلات المتعلقة بالاعتمادية

الإصدار 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 المتوفّرة في CustomView 1.1.0-alpha02 (التي ينفّذها DrawerLayout بدءًا من DrawerLayout 1.1.0-alpha04)، ما يتيح لك استخدام عمليات تنفيذ مخصّصة لـ Openable مع NavigationUI. (b/129030452)

إصلاح الأخطاء

  • تحافظ قواعد ProGuard navigation-common-ktx الآن بشكل صحيح على فئات NavArgs المستخدَمة فقط بدلاً من جميع مثيلات NavArgs. (b/150213558)

التغييرات المتعلّقة بالتبعية

  • عادت ميزة "التنقّل" إلى اعتمادها على الإصدار الأساسي 1.2.0 وتعتمد الآن على الإصدار الأساسي 1.1.0 لتجنّب إجبار المطوّرين على الانتقال إلى تبعية أحدث عندما لا تعتمد ميزة التنقّل على أي واجهات برمجة تطبيقات جديدة في الإصدار الأساسي 1.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)

التغييرات المتعلّقة بالتبعية

الإصدار 2.3.0-alpha01

5 شباط (فبراير) 2020

تم طرح "androidx.navigation:navigation-*:2.3.0-alpha01". يحتوي الإصدار 2.3.0-alpha01 على هذه الالتزامات.

الميزات الجديدة

  • يوفّر عنصر navigation-testing الجديد فئة TestNavHostController. توفر هذه الفئة بديلاً لاستخدام NavController وهمي عند اختبار التنقل والذي يسمح لك بتعيين الوجهة الحالية والتحقق من الحزمة الخلفية بعد عمليات التنقل. (b/140884273)
  • تتيح لك ميزة "navigation-dynamic-features-fragment" الجديدة (وهي اعتمادية عابرة، navigation-dynamic-features-runtime) تضمين وجهات أو رسوم بيانية كاملة للتنقّل (عبر <include-dynamic>) من وحدات الميزات، ما يوفّر تثبيتًا سلسًا لوحدات الميزات عند الطلب عند الانتقال إلى تلك الوجهات. يُرجى الاطّلاع على التنقل باستخدام وحدات الميزات للحصول على مزيد من المعلومات. (b/132170186)

إصلاح الأخطاء

  • من التنقّل 2.2.1: تتجاهل الروابط لصفحات معيّنة بدون مَعلمات طلب البحث الآن بشكل صحيح أي مَعلمات طلب بحث بدلاً من إلحاقها بعناصر {argument} لاحقة أو لا تتطابق مع رابط الصفحة في التطبيق. (b/147447512)
  • من التنقّل 2.2.1: تم تعديل قواعد navigation-ui ProGuard لـ DrawerArrowDrawable للتأكّد من أنّ android.enableJetifier=true غير مطلوب. (b/147610424)
  • من التنقل 2.2.1: تحتوي وحدة navigation-common-ktx الآن على اسم فريد لحزمة البيان بدلاً من مشاركة اسم حزمة البيان نفسه مثل navigation-runtime-ktx. (aosp/1141947)

التعديلات المتعلقة بالاعتمادية

الإصدار 2.2.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

التعديلات المتعلقة بالاعتمادية

الإصدار 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.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 Integration: يتم الآن استخدام 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 وWebcycle ViewModel SaveState 1.0.0-rc03 والنشاط 1.1.0-rc03 والجزء 1.2.0-rc03 عندما يكون ذلك مناسبًا.

الإصدار 2.2.0-rc02

7 تشرين الثاني (نوفمبر) 2019

تم طرح "androidx.navigation:navigation-*:2.2.0-rc02". يحتوي الإصدار 2.2.0-rc02 على هذه الالتزامات.

التغييرات المتعلّقة بالتبعية

  • يعتمد التنقّل الآن على الإصدار androidx.lifecycle 2.2.0-rc02.

الإصدار 2.2.0-rc01

23 تشرين الأول (أكتوبر) 2019

تم طرح الإصدار "androidx.navigation:navigation-*:2.2.0-rc01" بدون أي تغييرات منذ 2.2.0-beta01. يحتوي الإصدار 2.2.0-rc01 على هذه الالتزامات.

الإصدار 2.2.0-beta01

9 تشرين الأول (أكتوبر) 2019

تم طرح "androidx.navigation:navigation-*:2.2.0-beta01". يتضمّن الإصدار 2.2.0-beta01 هذه الالتزامات.

الميزات الجديدة

  • تلغي السمة NavDestination وفئاتها الفرعية الآن toString() لتوفير معلومات أكثر فائدة عند تصحيح الأخطاء. (b/141264986)

التغييرات في السلوك

  • ويتم الآن تجاهل مَعلمات طلب البحث الإضافية عند مطابقة روابط لصفحات في التطبيق بدلاً من التسبّب في تعذّر المطابقة. (b/141482822)

إصلاح الأخطاء

  • تم إصلاح مشكلة تجاهل الوسيطات في مسار رابط لصفحة في التطبيق في حال تحديد مَعلمات طلب البحث أيضًا. (b/141505755)
  • تعرض الآن إضافة navArgs() Kotlin على Activity رسالة خطأ أفضل في حال عدم توفّر أي ميزات إضافية. (b/141408999)
  • تم إنشاء Directions فئات من Java لـ Safe Args تحتوي الآن على قيم تلقائية. (b/141099045)
  • تم إنشاء Args فئات من Java لـ Safe Args تحتوي الآن على قيم تلقائية. (b/140123727)
  • عند استخدام Toolbar، لن يحرّك NavigationUI بعد ذلك تغيّر النص عند الانتقال بين وجهتين من المستوى الأعلى. (b/140848160)

الإصدار 2.2.0-alpha03

18 أيلول (سبتمبر) 2019

تم طرح "androidx.navigation:navigation-*:2.2.0-alpha03". يحتوي الإصدار 2.2.0-alpha03 على هذه الالتزامات.

التغييرات في السلوك

  • يؤدي الآن الاتصال بالرقم setViewModelStore() بعد الاتصال بـ setGraph إلى IllegalStateException. يجب ضبط هذه الميزة دائمًا من خلال NavHost كجزء من الإعداد الأولي لضمان توفُّر مساحة تخزين متسقة في جميع مثيلات NavBackStackEntry لمثيلات ViewModel. (aosp/1111821)

إصلاح الأخطاء

  • تم إصلاح ConcurrentModificationException عند استخدام ViewModel مثيل مرفق بمثيلات ViewModelStore مختلفة لرسم بياني للتنقّل. (aosp/1112257)

الإصدار 2.2.0-alpha02

5 أيلول (سبتمبر) 2019

تم طرح "androidx.navigation:navigation-*:2.2.0-alpha02". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

الميزات الجديدة

  • تتوافق الآن روابط الصفحات في التطبيقات التي تتضمّن مَعلمات طلبات البحث مع مَعلمات طلب البحث المُعاد ترتيبها. أصبحت الوسيطات التي تحتوي على قيمة تلقائية أو قابلة للقيم فارغة الآن اختيارية عند مطابقة الروابط لصفحات في التطبيق. (b/133273839)
  • يمكنك الآن طلب الرقم NavController.getBackStackEntry()، مع إدخال رقم تعريف وجهة أو رسم بياني للتنقّل في الحزمة الخلفية. توفّر NavBackStackEntry التي يتم عرضها كلاً من LifecycleOwner وViewModelStoreOwner استنادًا إلى التنقل (وهي نفسها المعروضة من خلال NavController.getViewModelStoreOwner()) وSavedStateRegistryOwner، بالإضافة إلى توفير الوسيطات المستخدمة لبدء تلك الوجهة. (aosp/1101691، aosp/1101710)

إصلاح الأخطاء

  • تم إصلاح مشكلة تؤدّي إلى تعذُّر إضافة NavHostFragment إلى ViewPager2 مع IllegalArgumentException. (b/133640271)
  • يتجنّب NavInflater الآن الاتصال بـ getResourceName() بدون داعٍ، ما يؤدي إلى تسريع وقت التضخم بنسبة تصل إلى 40%. (b/139213740)

الإصدار 2.2.0-alpha01

7 آب (أغسطس) 2019

تم طرح "androidx.navigation:navigation-*:2.2.0-alpha01". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

الميزات الجديدة

  • أصبحت SavedStateViewModelFactory الآن هي الإعدادات الأصلية التلقائية المستخدَمة عند استخدام by navGraphViewModels() أو الدالة الإنشائية ViewModelProvider مع ViewModelStoreOwner التي تم عرضها بواسطة NavController.getViewModelStoreOwner(). (b/135716331)

التغييرات في واجهة برمجة التطبيقات

  • من صفحة التنقّل 2.1.0-rc01: تمت إزالة واجهة برمجة التطبيقات getViewModelStore() المتوقفة نهائيًا على NavController والتي تم تقديمها في 2.1.0-alpha02. (aosp/1091021)

إصلاح الأخطاء

  • يستخدم NavHostFragment الآن FragmentContainerView، لإصلاح مشاكل الترتيب على شكل حرف z للصور المتحركة وإدخالات النوافذ التي يتم إرسالها إلى الأجزاء. (b/137310379)

الإصدار 2.1.0

الإصدار 2.1.0

5 أيلول (سبتمبر) 2019

تم طرح "androidx.navigation:navigation-*:2.1.0". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

التغييرات المهمة منذ الإصدار 2.0.0

  • تحديد نطاق ViewModels إلى رسم بياني للتنقّل: يمكنك الآن إنشاء نماذج ViewModels على مستوى الرسم البياني للتنقّل باستخدام تفويض الموقع by navGraphViewModels() لمستخدمي Kotlin باستخدام مكتبات -ktx أو باستخدام واجهة برمجة التطبيقات getViewModelStoreOwner() API المُضافة إلى NavController. راجع مشاركة البيانات المتعلقة بواجهة المستخدم بين الوجهات لمزيد من المعلومات.
  • وجهات مربّعات الحوار: يمكنك الآن إنشاء وجهات <dialog> التي ستعرض DialogFragment عند navigate لها. تتوافق NavHostFragment مع وجهات مربّعات الحوار تلقائيًا. راجِع إنشاء وجهة من DialogFragment لمزيد من المعلومات.
  • التنقل عبر Uri: يمكنك الآن navigate باستخدام Uri، والتي تستخدم <deepLink> التي أضفتها إلى وجهة للانتقال إلى هناك. راجِع التنقل باستخدام معرف الموارد المنتظم (URI) لمزيد من المعلومات.
  • NavHostController: تم نقل واجهات برمجة التطبيقات المستخدَمة تحديدًا لإنشاء NavHost مخصّص إلى NavHostController، ما يسمح لعمليات التنفيذ بربط NavController بالمضيف LifecycleOwner وOnBackPressedDispatcher وViewModelStore.

الإصدار 2.1.0-rc01

7 آب (أغسطس) 2019

تم طرح "androidx.navigation:navigation-*:2.1.0-rc01". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

التغييرات في واجهة برمجة التطبيقات

  • تمّت إزالة واجهة برمجة التطبيقات getViewModelStore() API المتوقّفة نهائيًا والمتوفّرة في NavController والتي تم تقديمها في 2.1.0-alpha02. (aosp/1091021)

الإصدار 2.1.0-beta02

19 تموز (يوليو) 2019

تم طرح "androidx.navigation:*:2.1.0-beta02". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

إصلاح الأخطاء

  • تمت إزالة تبعية Jacoco غير المقصودة التي تم تقديمها في 2.1.0-beta01. (b/137782950)

الإصدار 2.1.0-beta01

17 تموز (يوليو) 2019

تم طرح "androidx.navigation:*:2.1.0-beta01". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

الميزات الجديدة

  • يحرّك NavigationUI الآن عملية إزالة الزر للأعلى عند استخدام setupWithNavController() مع Toolbar أو CollapsingToolbarLayout. (b/131403621)

إصلاح الأخطاء

  • تم إصلاح مشكلة التوقيت عند استخدام عدة NavHostFragments مع نفس الحاوية مع findNavController(). (b/136021571)

الإصدار 2.1.0-alpha06

2 تموز (يوليو) 2019

تم طرح "androidx.navigation:*:2.1.0-alpha06". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

الميزات الجديدة

  • تم نقل السمة app:navGraph التي يستخدمها NavHostFragment إلى العنصر navigation-runtime. يجب أن تستخدم برامج التنقل المخصّصة التي يمكن إضافتها عبر XML هذه السمة للتكامل مع لوحة مضيف "محرّر التنقل". (b/133880955)

التغييرات في واجهة برمجة التطبيقات

  • تم إيقاف واجهة برمجة التطبيقات getViewModelStore() على الموقع NavController لصالح طريقة getViewModelStoreOwner() الجديدة التي تعرض ViewModelStoreOwner. (aosp/987010)
  • تم تعميم تنفيذ وجهات النوافذ العائمة، مثل وجهات <dialog>، في واجهة العلامة FloatingWindow، والتي تستخدمها الآن جميع وجهات <dialog>. تتجاهل الآن طرق NavigationUI للتفاعل مع شريط التطبيق العلوي FloatingWindow وجهات. (b/133600763)

التغييرات في السلوك

  • تحافظ ميزة التنقّل الآن على مزامنة حالتها بشكل صحيح مع ما يظهر على الشاشة عند استخدام وجهة <dialog>. نتيجةً لذلك، يظهر تطبيق "التنقل" الآن وجهات <dialog> تلقائيًا عند انتقالك إلى وجهة بلا حوار وغير نشاط، مثل وجهة <fragment>. (b/134089818)

إصلاح الأخطاء

  • يقوم التنقل الآن بإيقاف الرسوم المتحركة التي تحدث عند إعادة إنشاء النشاط عند التعامل مع رابط لصفحة في التطبيق، مما يؤدي إلى إصلاح الفلاش المرئي. (b/130362979)
  • تم إصلاح خطأ يكون فيه التنقل للخلف غير متزامن عند تمييز جزء أثناء إضافة الجزء الأولي. (b/133832218)

الإصدار 2.1.0-alpha05

5 حزيران (يونيو) 2019

تم طرح "androidx.navigation:*:2.1.0-alpha05". يمكنك الاطّلاع هنا على العمولات التي تم تضمينها في هذا الإصدار.

التغييرات في واجهة برمجة التطبيقات

  • تمت إعادة تسمية واجهات برمجة التطبيقات (API) ذات الصلة بالمضيف في 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() API المُضافة إلى 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
  • تعتمد الوسيطة الآمنة الآن على KotlinPoet 1.1.0، ما يؤدّي إلى حلّ المشاكل المتعلّقة بأسماء الحِزم الطويلة جدًا. b/123654948

الإصدار 2.0.0

الإصدار 2.0.0

14 آذار (مارس) 2019

تم إصدار شريط التنقّل 2.0.0 بدون أي تغييرات من 2.0.0-rc02.

الإصدار 2.0.0-rc02

6 آذار (مارس) 2019

يوفّر التنقل 2.0.0-rc02 عناصر جديدة بمعرّف مجموعة androidx.navigation ويغيِّر تبعياته إلى العناصر المكافئة لنظام AndroidX.

إن سلوك 2.0.0-rc02 مماثل لسلوك التنقل 1.0.0-rc02 ولا يلزم إجراء أي تغييرات على الرمز الخاص بك للتحديث من 1.0.0-rc02 إلى جانب تحديث التبعيات لديك لتتوافق مع التبعيات الجديدة.

يجب أن يكون مشروعك قد تم نقله إلى AndroidX لاستخدام إصدارات 2.X من التنقل. وسيكون الإصدار 1.0 الثابت هو الإصدار الأخير الذي يستخدم تبعيات مكتبة الدعم، وسيعتمد كل التطوير المستقبلي الذي بعد الإصدار 1.0 على AndroidX وسيعتمد على الإصدار 2.0 الثابت.

اعتماديات ما قبل AndroidX

بالنسبة لإصدارات التنقل السابقة لنظام AndroidX، قم بتضمين هذه التبعيات:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

بالنسبة إلى الوسيطات الآمنة، أضِف مسار الفئة التالي في ملف 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
  • لم تعُد فئات NavArgs التي أنشأتها Safe Args تتعطّل عند استعادة وسيطة Parcelable[] من حالة النسخة الافتراضية المحفوظة. b/123963545
  • تعمل Safe Args الآن على تنظيف فئات Kotlin غير الضرورية التي تم إنشاؤها بشكل صحيح. b/124120883

الإصدار 1.0.0-beta01

4 شباط (فبراير) 2019

هذا هو الإصدار التجريبي الأول من ميزة التنقل، ومن الآن فصاعدًا، من المتوقع أن تظل واجهة برمجة تطبيقات التنقل مستقرة حتى الإصدار التالي ما لم تكن هناك مشكلة خطيرة. يتضمّن هذا الإصدار بعض إصلاحات الأخطاء وتغييرات السلوك.

التغييرات في السلوك

  • يضمن التنقّل الآن أن يتم التعامل مع القيم التلقائية للوسيطات بشكلٍ متماثل في وقت التشغيل ومن خلال الوسيطات الآمنة. ونتيجةً لذلك، فإن الوسيطات التي تستخدم app:argType="reference" فقط يمكن أن تحتوي على نقطة قيمة تلقائية لمورد آخر (على سبيل المثال، @color/colorPrimary). ستؤدي محاولة استخدام قيمة تلقائية لمراجع مع app:argType مختلف إلى حدوث استثناء عند تحليل ملف XML للتنقل. b/123551990
  • تعتمد Safe Args الآن على الإصدار 3.3.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android aosp/888413
  • تعتمد Args الآن على Kotlin 1.3.20 aosp/888414.

إصلاح الأخطاء

  • يمكن الآن استخدام Safe Args في المكتبة ووحدات الميزات في جميع إصدارات Android Gradle Plugin. 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

المشاكل المعروفة

  • يتعذّر على Safe Args استيراد فئة الاتجاهات المرتبطة بالإجراءات العامة. b/123307342

يحتوي هذا الإصدار على تغييرات قد تؤدي إلى حدوث تغييرات في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.

الميزات الجديدة

  • يمكن لمستخدمي Kotlin الآن استخدام التفويض الخاص بالسمة by navArgs() بطريقة بطيئة للحصول على مرجع إلى فئة NavArgs التي تم إنشاؤها من خلال Safe Args في Activity أو Fragment. b/122603367
  • تتيح لك ميزة Safe Args الآن إنشاء رمز Kotlin من خلال تطبيق المكوّن الإضافي androidx.navigation.safeargs.kotlin. تم تصميم رمز Kotlin خصيصًا لوحدات Kotlin فقط، باستخدام الوسيطات التلقائية والفئات غير القابلة للتغيير بدلاً من نمط أداة الإنشاء الذي لا يزال متاحًا من خلال المكوّن الإضافي androidx.navigation.safeargs السابق. b/110263087

التغييرات في السلوك

  • تم تحيز الروابط المتطابقة لصفحة معيّنة في التطبيق باتجاه الرابط الذي يحتوي على أكثر وسيطات مطابقة. b/118393029
  • سيؤدي الاتصال بـ setGraph() على NavController إلى إعادة ضبط الحزمة الخلفية الآن. b/111450672
  • لم تعُد الروابط غير المعروفة لصفحات معيّنة في التطبيق تعرض الخطأ IllegalStateException، ولكن يتم تجاهلها، ما يؤدي إلى إصلاح المشاكل المتعلّقة برموز NavHostFragment المضمّنة أو المتعددة. b/121340440

تغييرات قد تؤدي إلى عطل

  • تم نقل طريقة NavOptions.applyPopAnimationsToPendingTransition() لتطبيق الصور المتحركة المنبثقة على نشاط إلى ActivityNavigator. b/122413117
  • تتجنب الوسيطات الآمنة الآن تكرار الفئات المتطابقة للإجراءات بدون وسيطات. أصبح نوع النتيجة بدون طرق وسيطات في فئات NavDirections التي تم إنشاؤها الآن NavDirections. b/123233147
  • لم تعُد فئات الاتجاهات التي تم إنشاؤها من خلال Safe Args تحتوي على أداة إنشاء عامة، ويجب أن تتفاعل فقط مع الطرق الثابتة التي تم إنشاؤها. b/123031660
  • لم تعد فئات NavDirections الآمنة التي أنشأتها فئات NavDirections عامة، ويجب إنشاؤها فقط من خلال الطرق الثابتة في فئات الاتجاهات التي تم إنشاؤها. b/122963206
  • تم الآن وضع علامة @NonNull بدلاً من @Nullable على الرسالة Bundle التي تم إرجاعها من getArguments() في NavDirections. b/123243957

إصلاح الأخطاء

  • NavDeepLinkBuilder يعالج الآن بشكل صحيح عدة علامات PendingIntent متزامنة إلى الوجهة نفسها من خلال استخدام الوسيطات التي ترسلها لتحديد القيمة الفريدة. b/120042732
  • تعالج NavController الآن عمليات popBackStack() بشكل صحيح عند استخدام NavHostFragment مدمجة أو أجزاء فرعية أخرى مع حزم خلفي. b/122770335
  • يضبط NavigationUI الآن وصف محتوى الزر للأعلى بشكل صحيح. b/120395362
  • تعمل فئات الاتجاهات من إنشاء Safe Args الآن على معالجة الإجراءات العامة التي لها نفس معرّف أحد الإجراءات على الوجهة بشكل صحيح. b/122962504
  • أنشأت الوسيطات الآمنة NavDirections فئة بشكل صحيح تحتوي الآن بشكل صحيح على قيم hashCode() مساوية عندما تكون قيمة equals() صحيحة. b/123043662
  • تعرض FragmentNavigator الآن رسالة خطأ أفضل إذا حاولت تنفيذ FragmentTransactions مخصص على FragmentManager لـ NavHostFragment. عليكَ استخدام getChildFragmentManager() دائمًا. b/112927148

الإصدار 1.0.0-alpha09

18 كانون الأول (ديسمبر) 2018

يحتوي هذا الإصدار على تغييرات قد تؤدي إلى حدوث تغييرات في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.

لقد اخترنا عدم مواصلة تطوير عنصر android.arch.navigation:navigation-testing. أثبتت هذه العملية فائدة الاختبار الداخلي لـ NavController، إلا أنّنا ننصح بشدة باستراتيجيات الاختبار البديلة، مثل محاكاة مثيل NavController، للتأكّد من تنفيذ طلبات navigate() الصحيحة. تمت مناقشة هذا النهج بالتفصيل في حديث النشاط الفردي في AndroidDevSummit 2018 وسنعمل على مستندات إضافية حول الاختبار باستخدام التنقّل تحديدًا.

الميزات الجديدة

  • لن تؤدي MenuItems مع 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 الآن مع الإصدار 3.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث. b/119662045

الإصدار 1.0.0-alpha08

6 كانون الأول (ديسمبر) 2018

يحتوي هذا الإصدار على تغييرات قد تؤدي إلى حدوث تغييرات في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.

الميزات الجديدة

  • عند استخدام تصنيفات الوجهات مع طرق NavigationUI، سيتم الآن تلقائيًا استبدال مثيلات {argName} في android:label بالوسيطة الصحيحة b/80267266
  • يعتمد التنقّل الآن على الإصدار 28.0.0 من Support Library b/120293333.

تغييرات قد تؤدي إلى عطل

  • تمت إعادة تسمية "OnNavigatedListener" إلى "OnDestinationChangedListener". b/118670572
  • يجتاز OnDestinationChangedListener الآن أيضًا Bundle من الوسيطات aosp/837142
  • تمت إزالة السمتين app:clearTask وapp:launchDocument والطرق المرتبطة بهما. يمكنك استخدام app:popUpTo مع جذر الرسم البياني لإزالة جميع الوجهات من الحزمة الخلفية. b/119628354
  • يستخدم ActivityNavigator.Extras الآن نمط Builder ويضيف إمكانية ضبط أي علامات Intent.FLAG_ACTIVITY_. aosp/828140
  • تمت إعادة تسمية NavController.onHandleDeepLink إلى handleDeepLink aosp/836063
  • تم final aosp/835681 العديد من الفئات والطرق غير المعدّة للفئات الفرعية، مثل NavOptions وNavInflater وNavDeepLinkBuilder وAppBarConfiguration.
  • تمت إزالة طريقة NavHostFragment.setGraph() المتوقفة نهائيًا aosp/835684
  • لقد تمت إزالة طريقة NavigationUI.navigateUp(DrawerLayout, NavController) المتوقفة نهائيًا. aosp/835684
  • تم نقل إنشاء الأجزاء إلى FragmentNavigator، ما يسهِّل تفويض إنشاء الأجزاء إلى FragmentFactory. b/119054429
  • لم تعُد الدالة الإنشائية لـ NavGraphNavigator تستخدم Context aosp/835340
  • أصبح NavigatorProvider فئة الآن وليست واجهة. لم يطرأ أي تغيير على وظائف NavigatorProvider التي يعرضها getNavigatorProvider(). aosp/830660
  • تمت إزالة NavDestination.navigate(). يمكنك الاتصال بـ navigate() على Navigator بدلاً من ذلك. aosp/830663
  • إعادة هيكلية كبيرة لـ Navigator، مع إلغاء الحاجة إلى OnNavigatorNavigatedListener وبدلاً من ذلك جعل navigate تعرض NavDestination الذي تم الانتقال إليه.
  • لم يعُد بإمكان Navigator مثيل إرسال أحداث منبثقة إلى NavController. ننصحك باستخدام OnBackPressedCallback لاعتراض ضغطات زر الرجوع واستدعاء navController.popBackStack(). aosp/833716

إصلاح الأخطاء

  • أصبحت ميزة popUpTo متوافقة الآن عندما تكون الوجهة عبارة عن عنصر <navigation>. b/116831650
  • تم إصلاح عدد من الأخطاء التي نتج عنها IllegalArgumentException عند استخدام الرسوم البيانية المدمجة b/118713731 b/113611083 b/113346925 b/113305559
  • ستعمل السمة dataPattern للوجهات <activity> الآن على تعبئة الوسيطات من الوسيطات التي لا تتضمن سلسلة من خلال استدعاء toString() b/120161365

الوسيطات الآمنة

  • تدعم الوسيطات الآمنة العناصر القابلة للتسلسل، بما في ذلك قيم التعداد. يمكن لأنواع التعداد ضبط قيمة تلقائية باستخدام التعداد الحرفي بدون اسم الفئة (مثلاً app:defaultValue="READ") b/111316353
  • تدعم Safe Args صفائف من جميع الأنواع المتوافقة b/111487504
  • تتجاهل Safe Args الآن المجلدات الفرعية لأدلة الموارد b/117893516
  • تضيف Safe Args تعليقات @Override توضيحية حيثما كان ذلك مناسبًا b/117145301

الإصدار 1.0.0-alpha07

29 تشرين الأول (أكتوبر) 2018

الميزات الجديدة

  • تتيح لك فئة AppBarConfiguration الجديدة تخصيص الوجهات التي تُعتبر وجهات المستوى الأعلى. راجِع المستندات المعدَّلة للحصول على التفاصيل. b/117333663
  • يمكنك الآن تمرير الوسيطات إلى وجهة البداية في الرسم البياني b/110300470
  • تتيح الروابط لصفحات في التطبيق الآن استخدام المخططات المخصصة ذات النقاط والواصلات وعلامات الجمع. b/112806402

تغييرات قد تؤدي إلى عطل

  • تم طي وحدة navigation-testing-ktx في navigation-testing artifact ولن يتم نشرها بعد الآن.
  • أصبح عنصر navigation-testing يعتمد الآن على مكتبة معايير لغة Kotlin القياسية. تم تغيير واجهة برمجة التطبيقات لتكون أكثر اتساقًا مع اصطلاحات Kotlin، ولكن يمكنك متابعة استخدامها للاختبارات المكتوبة بلغة Java.
  • لم تعُد الرسوم البيانية للتنقّل المسجَّل في بيان البيانات الوصفية متاحة. b/118355937
  • لم يعُد من الممكن إرفاق الإجراءات بوجهات <activity>. aosp/785539

إصلاح الأخطاء

  • تعمل الروابط لصفحات في التطبيق الآن على تحليل مَعلمات طلب البحث بشكل صحيح. b/110057514
  • تطبق وجهات النشاط الآن جميع رسوم الدخول والخروج بشكل صحيح. b/117145284
  • تم إصلاح العطل الذي يحدث بعد تغيير الإعداد عند استخدام برامج التنقل المخصصة. b/110763345

الوسيطات الآمنة

  • تمتلك الوسيطات الآمنة الآن تبعية ثابتة على الإصدار 3.2.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/113167627
  • يمكن الآن إنشاء الاتجاهات للصفوف الداخلية. b/117407555
  • تم إصلاح مشكلة إنشاء الاتجاهات إلى رسم بياني <include>. b/116542123

الإصدار 1.0.0-alpha06

20 أيلول (سبتمبر) 2018

الميزات الجديدة

تغييرات واجهة برمجة التطبيقات

  • تغيير عاجل: تأخذ طريقة المستكشف 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
  • إصلاح إخفاق الإصدار في Safe Args. b/109409713
  • إصلاح إحالة ناجحة من معرّفات الموارد إلى أسماء جافا b/111602491
  • إصلاح رسائل الخطأ بشأن قابلية القيم الفارغة في المكوّن الإضافي Safe Args.
  • أضِف تعليقات توضيحية غير متوفّرة عن إمكانية القيم الفارغة.

الإصدار 1.0.0-alpha04

July 19, 2018

يحتوي شريط التنقّل 1.0.0-alpha04 والمكوّن الإضافي Safe Args gradle على عدد من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وإصلاحات الأخطاء.

واجهة برمجة التطبيقات / التغييرات في السلوك

  • سيضبط NavHostFragment دائمًا الجزء الحالي كجزء التنقل الأساسي، مع ضمان ظهور مديري الأجزاء الفرعية قبل ظهور وحدة التحكم الخارجية b/111345778

الوسيطات الآمنة

  • التغيير الذي قد يؤدي إلى عطل: تم تغيير app:type إلى app:argType لتجنب التعارضات مع المكتبات الأخرى مثل ConstraintLayout 2.0.0-alpha1 b/111110548
  • يمكن الآن النقر على رسائل الخطأ الواردة من الوسيطات الآمنة b/111534438.
  • تؤكد فئات Args الآن أن سمات NonNull ليست فارغة في الواقع b/111451769
  • تمت إضافة تعليقات NonNull توضيحية إضافية إلى الفئات التي تم إنشاؤها بواسطة NavDirections وAggs 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" مع القيم التلقائية بصيغة "123L" b/79563966.
  • تتوفّر الآن الوسيطات القابلة للدمج باستخدام اسم فئة مؤهل بالكامل لـ app:type. إنّ القيمة التلقائية الوحيدة المتاحة هي "@null" b/79563966.
  • تستخدم فئات Args الآن equals() وhashCode() b/79642246
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع الميزات b/110011752

إصلاح الأخطاء

  • تم إصلاح المشاكل عند التنقل أثناء مراحل نشاط الأجزاء b/109916080
  • تم إصلاح المشاكل عند التنقل عبر الرسوم البيانية المتداخلة عدة مرات b/110178671
  • تم إصلاح المشاكل عند استخدام setPopUpTo مع الوجهة الأولى في الرسم البياني b/109909461
  • تم إصلاح المشكلة التي كانت تتسبب في تمرير جميع قيم app:defaultValue كسلاسل b/110710788
  • يضيف الآن aapt2 المُضمَّنة مع Android Gradle Plugin 3.2 التجريبي 01 قواعد الاحتفاظ لكل سمة android:name في ملفات XML الخاصة بالتنقل b/79874119
  • تم إصلاح تسرُّب الذاكرة عند استبدال FragmentNavigator التلقائي b/110900142

الإصدار 1.0.0-alpha02

7 حزيران (يونيو) 2018

التغييرات في السلوك

  • يستخدم تطبيق "FragmentNavigator" الآن "setReorderingAllowed(true)". b/109826220

  • يعمل التنقّل الآن على فك ترميز الوسيطات التي يتم تحليلها من عناوين URL لروابط صفحات معيَّنة. b/79982454

إصلاح الأخطاء

  • تم إصلاح IllegalStateException عند استدعاء التنقل من طرق مراحل نشاط التجزئة. b/79632233

  • يعتمد التنقّل الآن على الإصدار 27.1.1 من Support Library لإصلاح الوميض عند استخدام الصور المتحركة. b/80160903

  • تم إصلاح IllegalArgumentException عند استخدام defaultNavHost="true" كجزء ثانوي. b/79656847

  • تم إصلاح StackOverflowError عند استخدام NavDeepLinkBuilder. b/109653065

  • تم إصلاح IllegalArgumentException عند الانتقال مرة أخرى إلى رسم بياني متداخل. b/80453447

  • تم إصلاح مشكلة الأجزاء المتداخلة عند استخدام launchSingleTop. b/79407969

  • ينشئ التنقّل الآن حزمة خلفية اصطناعية صحيحة للرسومات البيانية المتداخلة. b/79734195

  • ستميِّز واجهة المستخدم الآن العنصر الصحيح عند استخدام رسم بياني متداخل كـ MenuItem. b/109675998

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف السمة clearTask الخاصة بالإجراءات وواجهة برمجة التطبيقات المرتبطة بها في NavOptions. b/80338878

  • تم إيقاف السمة launchDocument الخاصة بالإجراءات وواجهة برمجة التطبيقات المرتبطة بها في NavOptions. b/109806636

الإصدار 1.0.0-alpha01

8 أيار (مايو) 2018

توفر ميزة التنقل إطار عمل لإنشاء التنقل داخل التطبيق. هذا الإصدار الأولي هو 1.0.0-alpha01.