التنقل

Navigation هو إطار عمل للتنقّل بين "جهات" داخل تطبيق Android يوفّر واجهة برمجة تطبيقات متسقة سواء تم تنفيذ الجهات كوحدات Fragment أو أنشطة أو مكونات أخرى.
آخر الأخبار الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
‫23 سبتمبر 2026 2.10.2 - - -

تحديد الاعتماديات

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

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

Groovy

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.10.2"

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

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

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

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.10.2"

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

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

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

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

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

Safe Args

لإضافة Safe Args إلى مشروعك، أدرِج classpath التالي في ملف build.gradle ذي المستوى الأعلى:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.10.2"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.10.2"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

يجب أيضًا تطبيق أحد المكوّنين الإضافيين المتاحَين.

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

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

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

الملاحظات

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

إنشاء مشكلة جديدة

يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.

الإصدار 2.10.2

‫23 سبتمبر 2026

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

تحديثات الاعتماديات

  • تم تعديل الاعتماديات في androidx.lifecycle إلى الإصدار 2.10.0. I4505a9f9a

الإصدار 2.10.1

‫9 سبتمبر 2026

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

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

  • في الحالات التي تتخطّى فيها NavHost الصور المتحركة، ستأخذ الآن sizeTransform في الاعتبار أيضًا كجزء من الصورة المتحركة التي تم تخطّيها لمنع أي قص غير متوقّع. (I4f995، b/550924680)

الإصدار 2.10.0

‫26 أغسطس 2026

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

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

  • توفّر السمة NavHost الآن حمولة زائدة تقبل المَعلمتَين predictivePopEnterTransition وpredictivePopExitTransition للسماح بانتقال مخصّص أثناء استخدام إيماءة الرجوع التوقّعي.
  • تم تعديل handleDeepLink لضمان التعامل مع روابط الصفحات المقصودة المعروفة فقط، مع تجاهل جميع الروابط الأخرى. إذا تسبّب ذلك في حدوث خطأ في تطبيقك، ننصحك بالانتقال إلى التنقّل عبر الروابط لصفحات معيّنة المحدّدة في الرسم البياني للتنقّل. بالنسبة إلى اختبارات Robolectric، قد تحتاج إلى استخدام طريقة setPackage لحزمة موثوق بها.
  • تمت إضافة NavBackStackEntryInfo لعرض لقطات من سجلّ الرجوع أثناء أحداث التنقّل. يتيح ذلك إنشاء صور متحركة مخصّصة أكثر تفصيلاً لإيماءة إظهار شاشة الرجوع.

المنصات الإضافية المتوافقة

  • أضافت الوحدات navigation-common وnavigation-runtime وnavigation-testing إمكانية استخدام desktop وlinux وmacOS وiOS وjavascript وWASM وwatchos وtvos.

الإصدار 2.10.0-rc01

‫12 أغسطس 2026

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

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

  • تم نقل الحد الأدنى من حزمة تطوير البرامج (SDK) الخاصة بمكوّن Navigation إلى المستوى 24 من واجهة برمجة التطبيقات، وذلك إلى جانب بقية مكتبات AndroidX. (I972da، b/474169350)

الإصدار ‎2.10.0-beta01

‫29 يوليو 2026

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

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

  • إضافة NavBackStackEntryInfo لعرض لقطات من سجلّ الرجوع أثناء أحداث التنقّل يتيح ذلك إنشاء صور متحركة مخصّصة أكثر تفصيلاً لإيماءة إظهار شاشة الرجوع التنبؤية. (Icb3b8)

الإصدار ‎2.10.0-alpha06

‫01 يوليو 2026

تم طرح androidx.navigation:navigation-*:2.10.0-alpha06. يتضمّن الإصدار 2.10.0-alpha06 هذه التعديلات.

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

  • تم تعديل handleDeepLink لضمان التعامل مع الروابط العميقة المعروفة فقط (Id4fe3، b/509640056)
  • تم تغيير ComposableFragment لاستخدام الاسم المؤهَّل بالكامل من الوجهة بدلاً من وسيطة جزء لتوسيع الدوال القابلة للإنشاء. (I65ded، b/509640586)
  • تم إصلاح تعطّل في FragmentNavigator كان يتسبّب في طرح IllegalArgumentException عند تحسين العمليات في الفئات الفرعية. (I093b0، b/340202276)
  • تم إصلاح خطأ في Navigation with Fragments حيث يتعذّر استعادة الرسم البياني بشكل صحيح عند ضبطه آليًا. (I41251، b/321147435)

الإصدار 2.10.0-alpha05

‫19 مايو 2026

تم طرح androidx.navigation:navigation-*:2.10.0-alpha05. يتضمّن الإصدار 2.10.0-alpha05 هذه التعديلات.

الإصدار ‎2.10.0-alpha04

‫6 مايو 2026

تم طرح androidx.navigation:navigation-*:2.10.0-alpha04. يتضمّن الإصدار 2.10.0-alpha04 هذه التعديلات.

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

  • تم تحسين NavHost لتعزيز الحماية من الأخطاء المحتملة NullPointerException الناتجة عن حالة تزامن مع إيماءة إظهار شاشة الرجوع. (Ie36c6، b/500945998)

الإصدار ‎2.10.0-alpha03

‫22 أبريل 2026

تم طرح androidx.navigation:navigation-*:2.10.0-alpha03. يتضمّن الإصدار 2.10.0-alpha03 هذه التعديلات.

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

  • تم تعديل Compose compileSdk إلى الإصدار 37 من واجهة برمجة التطبيقات. وهذا يعني أنّه يجب استخدام الإصدار 9.2.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" على الأقل عند استخدام Compose. (Id45cd، b/413674743)

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

  • تمت إضافة استهدافات watchos وtvos إلى الوحدات navigation-common وnavigation-runtime وnavigation-testing (I60e46)
  • جعل DefaultNavTransitions علنيًا (Ide293)

الإصدار ‎2.10.0-alpha02

‫25 مارس 2026

تم طرح androidx.navigation:navigation-*:2.10.0-alpha02. يتضمّن الإصدار 2.10.0-alpha02 هذه التعديلات.

الإصدار ‎2.10.0-alpha01

‫11 مارس 2026

تم طرح androidx.navigation:navigation-*:2.10.0-alpha01. يتضمّن الإصدار 2.10.0-alpha01 هذه التعديلات.

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

  • توفّر الدالة NavHost الآن تحميلًا زائدًا يقبل المَعلمتَين predictivePopEnterTransition وpredictivePopExitTransition للسماح بانتقال مخصّص أثناء استخدام إيماءة الرجوع التوقّعي. (Iac9b0، b/478294569)

تعديل الحد الأدنى من حزمة SDK

  • كانت قيمة minSdk التلقائية تتراوح بين المستوى 21 والمستوى 23 لواجهة برمجة التطبيقات، وذلك إلى جانب بقية مكتبات AndroidX. (Ibdfca، b/380448311، b/435705964، b/435705223)

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

  • تتوافق الإصدارات navigation:navigation-common وnavigation:navigation-runtime وnavigation:navigation-testing الآن مع أجهزة الكمبيوتر المكتبي وLinux وmacOS وiOS وJavaScript وWASM بالإضافة إلى Android. شكرًا "كونستانتين تسخوفريبو"!(I035d9، Iec624، I1615d)

الإصدار 2.9

الإصدار 2.9.8

‫22 أبريل 2026

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

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

  • تم تحسين NavHost لتعزيز الحماية من الأخطاء المحتملة NullPointerException الناتجة عن حالة تزامن مع إيماءة إظهار شاشة الرجوع. (Ie36c6، b/500945998)

الإصدار 2.9.7

‫28 يناير 2026

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

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

  • لم يعُد هناك مشاكل في التخزين المؤقت لإعدادات شريط التنقّل SafeArgs عند استخدامه مع "خدمات Google". (I57cda، b/458071608)
  • تم إصلاح أداة إنشاء الاختبار SavedStateHandle في اختبار التنقّل التي لا تفك ترميز List<String>. (I26aac،b/454180135)

الإصدار 2.9.6

‫5 نوفمبر 2025

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

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

  • تم نقل المكوّن الإضافي SafeArgs إلى واجهات برمجة التطبيقات الحديثة الخاصة بالمكوّن الإضافي لنظام Gradle المتوافق مع Android، ما يضمن توافقه مع جميع إصدارات 8.4.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث. نتيجةً لهذه التغييرات، تم تغيير دليل الإخراج للملفات التي تم إنشاؤها بواسطة المكوّن الإضافي إلى الموقع التلقائي الذي يوفّره AGP. (Ie09d6 وI7c431 وb/203559535 وb/293920476 وb/269532448 وb/443261197)
  • لن تتطلّب إضافة Navigation SafeArgs ضبط السمة useAndroidX عند استخدامها مع الإصدار 9.0.0-alpha04 أو الإصدارات الأحدث من "مكوّن Android الإضافي في Gradle" (I6c3a4، b/444746731، b/443106400).

الإصدار 2.9.5

‫24 سبتمبر 2025

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

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

  • يمكن الآن لمكوّن Navigation Safe Args الإضافي التعامل مع ميزة الإصدار 9.0 من "مكوّن Android الإضافي لبرنامج Gradle" التي تتيح استخدام لغة Kotlin المضمّنة. (I1d9d76)

تحديث الاعتمادية

  • يعتمد المكوّن الإضافي Navigation Safe Args الآن على الإصدار 8.4.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. (b/431847270، I5932a)

الإصدار 2.9.4

‫10 سبتمبر 2025

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

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

  • منع حدوث تعطُّل عند تسليم حدث إيماءة إظهار شاشة الرجوع في منتصف الإطار بعد إيقاف المعالج في عملية انتقال NavHost (I5667c، b/384186542)

الإصدار 2.9.3

‫30 يوليو 2025

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

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

  • تم إصلاح خطأ في NavController تسبّب في ظهور ConcurrentModificationException عند استخدام OnDestinationChangedListeners. (If7406، b/417784831)
  • تم إصلاح خطأ يحدث عند استخدام navigate(uri, navOptions,navigationExtras) حيث يتم تجاهل الإضافات. (I67fb7، b/430336813)

الإصدار 2.9.2

‫16 يوليو 2025

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

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

  • تم إصلاح مشكلة عدم استئناف الإدخال عند إغلاق مربّع الحوار أعلى الإدخال (Idb20e، b/418746335)
  • تم إصلاح الخطأ MissingFieldException الذي كان يحدث عند اختبار SavedStateHandle باستخدام مسارات آمنة الأنواع أثناء استخدام NavTypes مخصّص. (I2f843، b/421002511)

الإصدار 2.9.1

‫2 يوليو 2025

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

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

  • تم إصلاح المشكلة التي كانت تتسبّب في عدم تجاوز NavEntries التي تم إنشاء مثيل لها باستخدام single top الحالة CREATED في Lifecycle.State. (I043ba، b/421095236)

الإصدار 2.9.0

‫7 مايو 2025

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

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

  • يتم الآن إنشاء إجراءات Navigation Safe Args باستخدام التعليق التوضيحي @CheckResult لضمان استخدامها.

واجهة SupportingPane

  • يمكن الآن لمكوّنات Custom Navigators وضع علامة على وجهاتها للإشارة إلى أنّها تنفّذ واجهة SupportingPane، ما يشير إلى NavController بأنّه سيتم عرض هذه الوجهات إلى جانب الوجهات الأخرى. باستخدام هذه الواجهة، يمكن RESUMED وجهات متعددة في الوقت نفسه، على سبيل المثال.

‫Compose Kotlin Multiplatform

  • يتضمّن التنقّل الآن دالة NavController.handleDeepLink() جديدة مشتركة تأخذ NavDeepLinkRequest بدلاً من Intent. يتيح ذلك للمنصات الأخرى غير Android التعامل مع الروابط لصفحات في التطبيق بشكل صحيح. شكرًا "كونستانتين تسخوفريبو"!
  • توفّر ميزة "التنقّل" الآن NavUri، وهي دالة محلّل جديدة مشتركة تمثّل واجهة برمجة تطبيقات متوافقة مع معرّف الموارد الموحّد (URI) في Android على المنصات الأخرى. ويتيح ذلك إنشاء معرّف موارد منتظم (URI) بطريقة مستقلة عن النظام الأساسي. شكرًا "كونستانتين تسخوفريبو"!

الدوال الآمنة من حيث النوع

  • كانت واجهات برمجة التطبيقات الآمنة من حيث النوع لا يمكن الوصول إليها في السابق إلا من خلال طرق reified، أي تتضمّن composable<YourScreen> الآن إصدارات غير مجسَّمة تقبل مباشرةً مثيلاً من KClass.
  • تتيح ميزة منع أخطاء الكتابة في التنقّل الآن استخدام فئات القيم كمسار أو كنوع وسيطة لمسار.

الإصدار 2.9.0-rc01

‫23 أبريل 2025

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

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

  • تمت إزالة جميع استهدافات الأنظمة الأساسية غير Android من Jetpack Navigation لأنّ هذه الاستهدافات لا تعمل في الواقع. يتم الآن توفير رموز صورية للأنظمة الأساسية المختلفة بدلاً من ذلك.(I2877d)

الإصدار 2.9.0-beta01

‫9 أبريل 2025

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

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

  • تم تغيير واجهة برمجة التطبيقات الشائعة parseStringAsNavUri إلى دالة مصنع NavUri تأخذ سلسلة. (I4db6e، b/403616316)

تحديثات الاعتماديات

  • تستهدف هذه المكتبة الآن مستوى اللغة Kotlin 2.0 وتتطلّب الإصدار 2.0.0 من KGP أو إصدارًا أحدث. (Idb6b5)

الإصدار 2.9.0-alpha09

‫26 مارس 2025

تم طرح androidx.navigation:navigation-*:2.9.0-alpha09. يتضمّن الإصدار 2.9.0-alpha09 هذه التعديلات.

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

  • يتوافق الآن تطبيق navigation-testing مع أجهزة الكمبيوتر المكتبي وLinux وmacOS وiOS بالإضافة إلى Android. (I2b770، b/398265336)
  • يتوافق NavType الآن مع أجهزة الكمبيوتر المكتبي وLinux وmacOS وiOS بالإضافة إلى Android. (I297d8)

الإصدار ‎2.9.0-alpha08

‫12 مارس 2025

تم طرح androidx.navigation:navigation-*:2.9.0-alpha08. يتضمّن الإصدار 2.9.0-alpha08 هذه التعديلات.

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

  • من Navigation 2.8.9: تم إصلاح مشكلة في Navigation 2.8.8 كانت تتطلّب أن يتطابق الرابط لصفحة معيّنة في التطبيق مع جميع حقول طلب الرابط أو الهدف بشكلٍ تام ليتم اعتباره مطابقًا. وقد أدّى ذلك إلى توقّف الروابط لصفحات في التطبيق التي تتضمّن تطابقات جزئية للحقول ولا تتضمّن غيرها. (Ie5e36، b/399826566)

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

  • دالة محلّل عام جديدة لإنشاء NavUri شكرًا "كونستانتين تسخوفريبو"! (If0a6a)

الإصدار ‎2.9.0-alpha07

‫26 فبراير 2025

تم طرح androidx.navigation:navigation-*:2.9.0-alpha07. يتضمّن الإصدار 2.9.0-alpha07 هذه التعديلات.

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

  • تم إصلاح مشكلة كانت تؤدي فيها محاولة saveState باستخدام نافذة منبثقة غير شاملة إلى ظهور قيمة فارغة لـ savedState، ما قد يؤدي إلى حدوث عطل عند الاستعادة. (I9f3e8، b/395091644)
  • من التنقّل 2.8.8: تم إصلاح مشكلة عدم تطابق NavDeepLink حيث يجب أن يتطابق الرابط لصفحة معيّنة وطلب الرابط لصفحة معيّنة تمامًا مع معرف موارد منتظم (URI) والإجراء ونوع MIME. لم يعُد مسموحًا بالمطابقة إذا تطابق حقل واحد أو حقلان فقط. (I3b029، b/395712033)
  • من Navigation 2.8.8: تم إصلاح الخطأ الذي لا تتطابق فيه المسارات التي تتضمّن مسارات أحرف بدل مع رابط إضافي لصفحة معيّنة في التطبيق (I7ea92، b/389970341)

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

  • استخرِج واجهات برمجة التطبيقات navigation-common وnavigation-runtime وnavigation-compose إلى المنصة المشتركة. شكرًا "كونستانتين تسخوفريبو"! (I1e626 وIca76f وIdf479)

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

  • بسبب العمل على حلّ المشكلة b/395712033، يُطلب بشكل غير صحيح أن تتضمّن الروابط لصفحات في التطبيق جميع الحقول نفسها التي يتضمّنها طلب الرابط و/أو Intent. يجب أن تتطابق الروابط لصفحات في التطبيق مع الحقول التي تتضمّنها فقط، ويجب تجاهل الحقول غير المضمّنة. تم حلّ هذه المشكلة في إصدار لاحق كجزء من b/399826566.

الإصدار ‎2.9.0-alpha06

‫12 فبراير 2025

تم طرح androidx.navigation:navigation-*:2.9.0-alpha06. يتضمّن الإصدار 2.9.0-alpha06 هذه التعديلات.

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

  • يتم الآن إنشاء إجراءات Navigation Safe Args باستخدام التعليق التوضيحي @CheckResult لضمان استخدامها. (I14d4c، b/356323084)

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

  • تم إصلاح خطأ في NavController حيث تمت محاولة استعادة حالات backStack بشكل غير صحيح إلى مصفوفة عند حفظها في قائمة. (Idfb9b)
  • من Navigation 2.8.7: توفّر ميزة Navigation Safe Args الآن إمكانية استخدام الوجهات القابلة للإنشاء. (I35320، b/362791955)

الإصدار ‎2.9.0-alpha05

‫29 يناير 2025

تم طرح androidx.navigation:navigation-*:2.9.0-alpha05. يتضمّن الإصدار 2.9.0-alpha05 هذه التعديلات.

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

  • تم إصلاح مشكلة كانت تؤدي إلى ظهور صورة متحركة غير متوقّعة عند استخدام Navigation Compose. (I480f4، b/353294030)
  • من التنقّل 2.8.6: سيتم تحليل تصنيفات NavDestination المقدَّمة من خلال XML باستخدام NavType.get لضمان احترام منطق NavType المخصّص. (I7ec2f، b/388100796)
  • من التنقّل 2.8.6: عند الانتقال إلى نشاط باستخدام dataPattern، سيحاول ActivityNavigator الآن ترميز قيمة الوسيط باستخدام NavType للوسيط. (I16376، b/383616432)
  • من التنقل 2.8.5: تم إصلاح مشكلة تسبّبت في ظهور حركة تحجيم غير متوقّعة عند استخدام Navigation Compose واستدعاء navigate في الإطار نفسه الذي تنتهي فيه الحركة الحالية. (I26cb1، b/353294030)

الإصدار ‎2.9.0-alpha04

‫11 ديسمبر 2024

تم طرح androidx.navigation:navigation-*:2.9.0-alpha04. يتضمّن الإصدار 2.9.0-alpha04 هذه التعديلات.

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

يوفّر الجدول أدناه واجهات برمجة التطبيقات reified وKClass.

reified KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

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

  • يتم إخفاء عملية التحميل الزائد NavGraph.setStartDestination الخاصة بلغة Kotlin لضمان منع أخطاء الكتابة عن مصادر Java. (Ic640c، b/364634035)

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

  • من التنقّل 2.8.5: تم إصلاح مشكلة كان بإمكان NavHost طرح استثناء داخل PredictiveBackHandler إذا تم إزالة آخر عنصر من سجلّ الرجوع وتم تفعيل الرجوع إلى الخلف في النظام في الإطار نفسه. (I1a429، b/375343407)
  • من التنقّل 2.8.5: تم إصلاح NavDestination NullPointerException عند تعديل startDestination في رسم بياني. (I99421، b/361560785)

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

  • من التنقّل 2.8.5: يتيح منع أخطاء الكتابة في التنقّل الآن استخدام List<Enum> كنوع وسيطة لمسار بدون الحاجة إلى أي NavType مخصّص. شكرًا Csaba Kozák. (GH-725، b/375559962)

الإصدار ‎2.9.0-alpha03

‫13 نوفمبر 2024

تم طرح androidx.navigation:navigation-*:2.9.0-alpha03. يتضمّن الإصدار 2.9.0-alpha03 هذه التعديلات.

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

  • تتيح ميزة منع أخطاء الكتابة في التنقّل الآن استخدام فئات القيم كمسار أو كنوع وسيطة لمسار. (I9344a، b/374347483)

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

  • تم إصلاح ConcurrentModificationException كان من المحتمل أن يحدث عندما يؤدي LifecycleObserver مرفق بـ NavBackStackEntry إلى تغيير في الأنشطة السابقة عندما تغيّر LifecycleOwner المضيف، مثل النشاط أو الجزء الحاوي، حالة مراحل النشاط. (Ia9494)

الإصدار 2.9.0-alpha02

‫30 أكتوبر 2024

تم طرح androidx.navigation:navigation-*:2.9.0-alpha02. يتضمّن الإصدار 2.9.0-alpha02 هذه التعديلات.

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

  • طريقة NavController.handleDeepLink(request: NavDeepLinkRequest) شائعة جديدة شكرًا "كونستانتين تسخوفريبو"! (I3e228)

الإصدار 2.9.0-alpha01

‫16 أكتوبر 2024

تم طرح androidx.navigation:navigation-*:2.9.0-alpha01. يتضمّن الإصدار 2.9.0-alpha01 هذه التعديلات.

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

  • يمكن الآن لمكوّنات Custom Navigators وضع علامة على وجهاتها للإشارة إلى أنّها تنفّذ واجهة SupportingPane، ما يشير إلى NavController بأنّه سيتم عرض هذه الوجهات إلى جانب الوجهات الأخرى. باستخدام هذه الواجهة، يمكن RESUMED وجهات متعدّدة في الوقت نفسه، على سبيل المثال. (Id5559)
  • من Navigation 2.8.3: أضفنا عمليات فحص جديدة باستخدام أداة lint للوحدات navigation-common وnavigation-runtime وnavigation-compose للمساعدة في تحديد أي مسارات آمنة من حيث النوع لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام @Serializable. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافة NavGraphBuilder وNavDeepLinkBuilder. (I4a259 وI95402 وIe601a وId8c6e وI28bda وb/362725816)
  • من التنقل 2.8.3: تمت إضافة عمليات فحص جديدة للتدقيق اللغوي في الوحدات navigation-common وnavigation-runtime وnavigation-compose للمساعدة في تحديد أي مسارات آمنة من حيث النوع تتضمّن وسيطات Enum لم يتم وضع تعليقات توضيحية لها بشكل صحيح باستخدام @Keep. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافات NavGraphBuilder وNavDeepLinkBuilder. (I4a259 وI95402 وIe601a وId8c6e وI2b46f وb/358687142)

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

  • سيؤدي محاولة استخدام NavController تم DESTROYED سابقًا إلى حدوث IllegalStateException. (I520da، b/369616172)

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

  • تعديل استثناء عدم العثور على فئة التعداد (Enum) لاقتراح استخدام التعليق التوضيحي @Keep في حال محو فئة التعداد في الإصدارات المصغّرة (I90e79، b/358137294)

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

  • هناك مشكلة في قواعد lint الجديدة التي تمت إضافتها في Navigation 2.8.* وتتسبّب في ظهور الخطأ Obsolete custom lint check عند محاولة تشغيل lint باستخدام الإصدار 8.4 أو الإصدارات الأحدث من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". (b/368070326، b/371463741)

الإصدار 2.8

الإصدار 2.8.9

‫12 مارس 2025

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

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

  • تم إصلاح مشكلة تراجع في الإصدار 2.8.8 من Navigation كانت تتطلّب أن يتطابق الرابط لصفحة معيّنة في التطبيق مع جميع حقول طلب الرابط أو الهدف بشكلٍ تام ليتم اعتباره مطابقًا. وقد أدّى ذلك إلى توقّف الروابط لصفحات في التطبيق التي تتضمّن تطابقات جزئية للحقول ولا تتضمّن غيرها. (Ie5e36، b/399826566)

الإصدار 2.8.8

‫26 فبراير 2025

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

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

  • تم إصلاح الخطأ الذي كان يتسبب في عدم تطابق المسارات التي تتضمّن أحرف بدل مع رابط لصفحة في التطبيق تمت إضافته. (I7ea92، b/389970341)
  • تم إصلاح مشكلة المطابقة NavDeepLink حيث يجب أن يتطابق الرابط لصفحة في التطبيق وطلب الرابط لصفحة في التطبيق تمامًا من حيث معرّف الموارد المنتظم (URI) والإجراء ونوع MIME. لم يعُد مسموحًا بالمطابقة إذا تطابق حقل واحد أو حقلان فقط. (I3227f، b/395712033)

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

  • بسبب العمل على حلّ المشكلة b/395712033، يُطلب بشكل غير صحيح أن تتضمّن الروابط لصفحات في التطبيق جميع الحقول نفسها التي يتضمّنها طلب الرابط و/أو Intent. يجب أن تتطابق الروابط لصفحات في التطبيق مع الحقول التي تحتوي عليها فقط، ويجب تجاهل الحقول غير المضمّنة. تم حلّ هذه المشكلة في إصدار لاحق كجزء من b/399826566.

الإصدار 2.8.7

‫12 فبراير 2025

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

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

  • توفّر Navigation Safe Args الآن إمكانية استخدام الوجهات القابلة للإنشاء. (I35320، b/362791955)

الإصدار 2.8.6

‫29 يناير 2025

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

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

  • سيتم تحليل تصنيفات NavDestination المقدَّمة من خلال XML باستخدام NavType.get لضمان احترام منطق NavType المخصّص. (Id366d، b/388100796)
  • عند الانتقال إلى نشاط باستخدام dataPattern، سيحاول ActivityNavigator الآن ترميز قيمة الوسيطة باستخدام NavType للوسيطة. (I1a71d، b/383616432)

الإصدار 2.8.5

‫11 ديسمبر 2024

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

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

  • تم إصلاح مشكلة كان يمكن أن يؤدي فيها NavHost إلى حدوث استثناء داخل PredictiveBackHandler إذا تم إزالة آخر إدخال من سجلّ الرجوع وتم تفعيل الرجوع إلى الخلف في النظام في الإطار نفسه. (I1a429، b/375343407)
  • تم إصلاح الخطأ NavDestination NullPointerException عند تعديل startDestination في رسم بياني. (I99421، b/361560785)
  • تم إصلاح مشكلة تسبّبت في ظهور حركة تحجيم غير متوقّعة عند استخدام Navigation Compose واستدعاء navigate في الإطار نفسه الذي تنتهي فيه الحركة الحالية. (I26cb1، b/353294030)
  • تم إصلاح ConcurrentModificationException كان من المحتمل أن يحدث عندما يؤدي LifecycleObserver مرفق بـ NavBackStackEntry إلى تغيير في الأنشطة السابقة عندما يغيّر المضيف LifecycleOwner، مثل النشاط أو الجزء الحاوي، حالة مراحل النشاط. (Ia9494)

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

  • تتيح ميزة "منع أخطاء الكتابة في التنقّل" الآن استخدام List<Enum> كنوع وسيطة لمسار بدون الحاجة إلى أي NavType مخصّص. شكرًا Csaba Kozák. (GH-725، b/375559962)

الإصدار 2.8.4

‫13 نوفمبر 2024

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

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

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

الإصدار 2.8.3

‫16 أكتوبر 2024

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

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

  • تمت إضافة عمليات فحص جديدة باستخدام أداة Lint للوحدات navigation-common وnavigation-runtime وnavigation-compose للمساعدة في تحديد أي مسارات آمنة من حيث الأنواع لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام @Serializable. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافات NavGraphBuilder وNavDeepLinkBuilder. (I4a259 وI95402 وIe601a وId8c6e وI28bda وb/362725816)
  • تمت إضافة عمليات فحص جديدة باستخدام أداة Lint للوحدات navigation-common وnavigation-runtime وnavigation-compose للمساعدة في تحديد أي مسارات آمنة من حيث النوع تتضمّن وسيطات Enum لم يتمّ وضع تعليقات توضيحية لها بشكل صحيح باستخدام @Keep. يتم تطبيق عملية التحقّق هذه على جميع وظائف الإضافات NavGraphBuilder وNavDeepLinkBuilder. (I4a259 وI95402 وIe601a وId8c6e وI2b46f وb/358687142)

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

  • تم إصلاح مشكلة كانت تتسبّب في ظهور الخطأ Obsolete custom lint check عند محاولة تشغيل أداة lint باستخدام الإصدار 8.4 أو الإصدارات الأحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android، وذلك بسبب قواعد lint الجديدة التي تمت إضافتها في Navigation 2.8.*. (I1be3d، b/368070326، b/371463741)

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

  • سيُظهر فحص Navigation lint خطأ Obsolete custom lint check عند محاولة تشغيل فحص lint باستخدام الإصدار 16 من أداة lint (الإصدار 8.7 من "مكوّن Android الإضافي في Gradle") أو إصدار أحدث. (b/371926651)

الإصدار 2.8.2

‫2 أكتوبر 2024

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

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

  • تتيح ميزة "أمان نوع التنقّل" الآن استخدام فئات Serializable التي تتضمّن Double وDouble? وDoubleArray وDoubleArray? وList<Double> وList<Double>? بدون الحاجة إلى أي NavType مخصّص. (I570eb وIbc4c0 وI37461 وI5bed4 وb/359245753)

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

  • تم تحسين رسالة الخطأ التي تظهر عندما يتعذّر على Navigation ربط وسيطة مسار بـ NavType، وستتضمّن رسالة الخطأ الجديدة اسم الوسيطة واسم الوسيطة المؤهَّل بالكامل واسم المسار المؤهَّل بالكامل. (Id8416، b/346264232)

الإصدار 2.8.1

‫18 سبتمبر 2024

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

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

  • تمت إضافة قاعدة lint جديدة لضمان استخدام الدالة popBackStack التي تتلقّى نوع فئة مجسَّمًا عند محاولة استخدام popBackStack باستخدام واجهات برمجة تطبيقات آمنة الأنواع. (Ief161، b/358095343)

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

  • يتطلّب التنقّل الآن أن يتضمّن المسار الذي تم تمريره إلى NavGraph في startDestination قيمًا لجميع الوسيطات المطلوبة، بما في ذلك الوسيطات غير القابلة للتصغير والتي ليس لها قيمة تلقائية. (I18e74، b/362594265)
  • أضافت Navigation Safe Args إمكانية استخدام السلاسل غير القابلة للقيم الفارغة، بحيث يتم تحليل القيم "null" وتخزينها في الحزمة كما هي. ويختلف ذلك عن السلوك الحالي الذي يتم فيه تحليل القيم "null" إلى عنصر فارغ. لا ينطبق هذا التغيير إلا على أنواع السلاسل غير القابلة للقيم الفارغة. تبقى السلاسل القابلة للقيم الخالية بدون تغيير. (I08b4a، b/348936238)
  • لم يعُد بالإمكان إنشاء رابط لصفحة في التطبيق NavDestination إلا من خلال رابط لصفحة في التطبيق تمت إضافته بشكل صريح إلى الوجهة. يعني هذا أيضًا أنّه يمكنك الانتقال إلى مسار وجهة باستخدام وظيفة التحميل الزائد لوظيفة التنقّل التي تأخذ مسار سلسلة فقط. يحلّ هذا التحديث ثغرة أمنية كانت تتيح إنشاء رابط لصفحة في التطبيق قد تكون محمية. (Ie30e6)

تحديث الاعتمادية

  • يعتمد المكوّن الإضافي Safe Args في Navigation الآن على الإصدار 1.9.24 من Kotlin بدلاً من الإصدار 2.X، ما يضمن عدم اضطرار المطوّرين إلى التحديث. (a4129a)
  • تعتمد مكتبة Navigation Compose الآن على Compose 1.7.2.

الإصدار 2.8.0

‫4 سبتمبر 2024

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

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

أمان الأنواع في لغة Kotlin الخاصة بمجال Navigation

  • توفّر Navigation الآن أمان الأنواع للغة Kotlin DSL (التي تستخدمها Navigation Compose) باستخدام Kotlin Serialization للسماح لك بتحديد الوجهات في الرسم البياني للتنقّل من خلال كائنات وفئات بيانات آمنة الأنواع:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

لمزيد من المعلومات، يُرجى الاطّلاع على منشور المدوّنة حول ميزة "أمان الأنواع" في Navigation Compose.

إيماءة إظهار شاشة الرجوع في Navigation Compose

  • تتيح مكتبة Navigation Compose الآن استخدام ميزة "إيماءة إظهار شاشة الرجوع" داخل التطبيق من خلال واجهات برمجة التطبيقات الجديدة SeekableTransitionState من compose-animation. يتيح لك ذلك استخدام إيماءة الرجوع للاطّلاع على الوجهة السابقة مع الانتقال المخصّص قبل اتّخاذ قرار بشأن إكمال المعاملة من خلال الإيماءة المكتملة أو إلغائها.

Navigation Fragment Composable

  • تمت إضافة عنصر navigation-fragment-compose جديد يتضمّن بديلاً ComposableNavHostFragment عن NavHostFragment يتيح لك إضافة وجهات قابلة للإنشاء إلى ملفات Navigation XML. يجب التعبير عن كل وجهة composable كطريقة @Composable ذات مستوى أعلى وبدون وسيطة، ويتم استخدام اسمها المؤهَّل بالكامل كسمة android:name في كل وجهة. عند الانتقال إلى إحدى هذه الوجهات، يتم إنشاء جزء حاوٍ لعرض المحتوى القابل للإنشاء.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

تغييرات أخرى

  • تعتمد Navigation Compose الآن على الإصدار 1.7.0 من Compose.
  • توفّر ميزة "التنقّل" الآن فئة CollectionNavType<T> جديدة، وهي فئة فرعية من NavType<T> للوسيطات المستندة إلى المجموعات، مثل القوائم والصفائف والخرائط. تتضمّن جميع مصفوفات NavType التلقائية (IntArrayType وLongArrayType وFloatArrayType وBoolArrayType وStringArrayType) الآن هذه الفئة الجديدة.
  • يتضمّن NavType الآن دعمًا مدمجًا لقوائم الأعداد الصحيحة والسلاسل والقيم المنطقية والأعداد العشرية والأعداد الصحيحة الطويلة.

الإصدار 2.8.0-rc01

‫21 أغسطس 2024

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

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

  • إصلاح عُطل التنقّل عند تمرير فئات تعداد المستوى الأعلى كمعلَمات آمنة من حيث النوع (I0ba76، b/358137294)
  • تعمل حزمة Navigation 2.8 الآن بشكل صحيح مع حزمة SDK 34، ولن يتم التبديل إلى حزمة SDK 35 إلا عند طرح الإصدار 2.9 مع بقية مكتبات AndroidX. (b/358798728)

الإصدار ‎2.8.0-beta07

‫7 أغسطس 2024

تم طرح androidx.navigation:navigation-*:2.8.0-beta07. يتضمّن الإصدار 2.8.0-beta07 هذه التعديلات.

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

  • بسبب b/358137294، لا تتوفّر تلقائيًا سوى التعدادات المتداخلة في فئة أخرى. ستتوفّر Enums ذات المستوى الأعلى في الإصدار التالي.

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

  • عند التنقّل إلى وجهات مكرّرة أو مشترَكة، ستعطي ميزة التنقّل الأولوية للوصول إلى أقرب وجهة مطابقة من الموقع الجغرافي الحالي في الرسم البياني. (Ic89a4، b/352006850)
  • تمت إضافة NavType.EnumType جديدة إلى التنقّل في Safe Args. وهذا يعني أنّ أنواع Enum لم تعُد تتطلّب NavType مخصّصة. يُرجى العِلم أنّ Enum SerialName يجب أن يكون الاسم المؤهَّل بالكامل التلقائي. (I66d22، b/346475493)
  • أضافت ميزة التنقّل في Safe Args إمكانية استخدام أنواع وسيطات تقبل القيم الخالية، بما في ذلك Int? وLong? وFloat? وBoolean? وEnum<*>?. (I32d13،I1c580،Ifba66،I978b0،Ide076 , b/351994237)
  • سيستخدم NavGraph startDestination الآن قيم الوسيطات التلقائية إذا كان مسار startDestination الذي تم تمريره إلى NavGraph يساوي startDestination.route تمامًا. (I13762، b/354046047)

الإصدار ‎2.8.0-beta06

‫24 يوليو 2024

تم طرح androidx.navigation:navigation-*:2.8.0-beta06. يتضمّن الإصدار 2.8.0-beta06 هذه التعديلات.

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

  • تم إصلاح المشكلة التي لم تكن فيها عمليات التحقّق من WrongStartDestinationType lint تتحقّق من عناصر Companion في نوع الفئة التي تم تمريرها، ما أدّى إلى عدم رصد lint للخطأ. (I92b09)

الإصدار ‎2.8.0-beta05

‫10 يوليو 2024

تم طرح androidx.navigation:navigation-*:2.8.0-beta05. يتضمّن الإصدار 2.8.0-beta05 هذه التعديلات.

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

  • إصلاح عُطل التنقّل singleTop عند مشاركة NavGraphs المتداخلة في المسار startDestination نفسه (I17b94، b/294408596)

الإصدار ‎2.8.0-beta04

‫26 يونيو 2024

تم طرح androidx.navigation:navigation-*:2.8.0-beta04. يتضمّن الإصدار 2.8.0-beta04 هذه التعديلات.

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

  • تتيح ميزة التنقّل الآن التنقّل باستخدام سلاسل فارغة في وسيطات المسار. (Ic5dbd، b/339481310)
  • تحسين رسالة الخطأ الخاصة أدوات التسلسل المخصّصة التي يتم تعريفها مباشرةً في حقول الفئات من خلال @Serializable(with =...) لتوضيح أنّ هذه الميزة غير متاحة حاليًا. (I052b0، b/341319151)
  • يمكن الآن استخدام واجهة برمجة التطبيقات SavedStateHandleFactory للاختبار في الاختبارات غير المتعلّقة بنظام Android، ولكن سيتطلّب ذلك أن يتيح Robolectric تحليل الوسيطات باستخدام حِزم. (I76cdc، b/340966212)
  • تم إصلاح تعطّل ناتج عن استعادة الحالة عند استئناف التطبيق بعد إيقاف العملية نهائيًا باستخدام Type-Safe Navigation في Compose. (Ia8f38، b/341801005)
  • تم إصلاح مشكلة في Navigation Compose حيث لا تعود NavBackStackEntry التي يعود إليها المستخدم إلى RESUMED Lifecycle State بعد إلغاء "إيماءة الرجوع التوقّعية". يضمن ذلك أيضًا إعادة تحريك الوجهة التي تم الرجوع إليها بشكل صحيح بدلاً من تثبيتها في مكانها بعد التمرير السريع. (I97a0c، b/346608857)
  • عند استخدام ميزة "إيماءة إظهار شاشة الرجوع" مع Navigation Compose، سيتم الآن ترتيب الوجهة التي يتم إغلاقها بشكل صحيح حسب المحور z، وسيتم تحريكها بشكل صحيح فوق الوجهة الواردة. (I2077b، b/345993681)

الإصدار ‎2.8.0-beta03

‫12 يونيو 2024

تم طرح androidx.navigation:navigation-*:2.8.0-beta03. يتضمّن الإصدار 2.8.0-beta03 هذه التعديلات.

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

  • يحتوي CollectionNavType على طريقة مجرّدة جديدة emptyCollection(). تجاوز هذا الإعداد للتعامل مع مجموعة فارغة تم تمريرها كوسيطة. (Ie4d84، b/341723133)

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

  • تمت إضافة مستندات حول NavType.serializeAsValue وserializeAsValues لتوضيح أنّه يجب ترميز المخرجات النهائية باستخدام Uri. (Ida6bd، b/344943214)
  • تم إصلاح عُطل يحدث عند استدعاء toRoute<T> باستخدام وسيط CollectionNavType فارغ. عند التنقّل باستخدام قيمة فارغة CollectionNavType، ستكون وسيطة الإخراج هي القيمة التلقائية المُعلَن عنها في فئة Serializable، أو قيمة الإرجاع emptyCollection() إذا لم تكن هناك قيمة تلقائية. (I84158 وId630f وb/342672856)

الإصدار ‎2.8.0-beta02

‫29 مايو 2024

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

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

  • تم إصلاح عُطل ClassCastException عند استخدام NavBackStackEntry.toRoute مع NavType مخصّص يقبل القيم الفارغة. (I1c29b، b/342239473)
  • تم إصلاح المشاكل المتعلّقة باستعادة حالة مجموعة الخلفية في "التنقّل" والتي تحدث عند محاولة استعادة إدخال مجموعة خلفية لا يمكن الوصول إليه من خلال المعرّف من الوجهة الحالية. وبما أنّ المسارات تستند إلى أرقام تعريف، تأثّرت أيضًا الوجهات التي تم إنشاؤها باستخدام المسارات. يؤدي ذلك أيضًا إلى إصلاح عُطل ناتج عن استدعاء clearBackStack() كان يتضمّن المشكلة الأساسية نفسها. (I423c3، b/339908057)

الإصدار ‎2.8.0-beta01

‫14 مايو 2024

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

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

  • تتلقّى الدالة SavedStateHandle.toRoute() الآن المَعلمة typeMap لأنواع الوسيطات المخصّصة. (Ie39fb، b/339026523)
  • تمت إضافة واجهة برمجة تطبيقات تجريبية إلى navigation-testing لإنشاء SavedStateHandle من عنصر Kotlin Serializable. (Id4867، b/339080702)

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

  • تمت إضافة مستندات مَعلمات مفقودة لدوال Navigation Kotlin DSL. (I26a36)

الإصدار ‎2.8.0-alpha08

‫1 مايو 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha08. يتضمّن الإصدار 2.8.0-alpha08 هذه التعديلات.

Safe Args في Navigation Compose

تستخدم هذه الوظيفة Kotlin Serialization للسماح لك بتحديد وجهات في الرسم البياني للتنقّل من خلال عناصر وفئات بيانات آمنة من حيث النوع:

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

لمزيد من المعلومات، يُرجى الاطّلاع على منشور المدوّنة حول ميزة "أمان الأنواع" في Navigation Compose.

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

  • يوفّر العنصر navigation-fragment-compose الآن LocalFragment محليًا للتركيب للطُرق القابلة للإنشاء داخل ComposableFragment. (If35e5)
  • يتضمّن NavType الآن دعمًا مدمجًا لقوائم الأعداد الصحيحة والسلاسل والقيم المنطقية والأعداد العشرية والأعداد الصحيحة الطويلة. (I4b6dd وIa914c وb/188693139)

الإصدار ‎2.8.0-alpha07

‫17 أبريل 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha07. يتضمّن الإصدار 2.8.0-alpha07 هذه التعديلات.

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

  • تضيف هذه السمة عنصر navigation-fragment-compose جديدًا يتضمّن بديلاً ComposableNavHostFragment للعنصر NavHostFragment يتيح لك إضافة وجهات composable إلى ملفات XML الخاصة بالتنقّل. يجب التعبير عن كل وجهة composable كطريقة @Composable ذات مستوى أعلى وبدون وسيطة، ويتم استخدام اسمها المؤهَّل بالكامل كسمة android:name في كل وجهة. عند الانتقال إلى إحدى هذه الوجهات، يتم إنشاء جزء حاوٍ لعرض المحتوى القابل للإنشاء. (I0ef2e، b/265480755)

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

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

  • تمت مواصلة توفير إمكانية استخدام Safe Args في Navigation Compose باتّباع نهج يستند إلى Kotlin Serialization. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه، ويتم وضع التعليق التوضيحي ExperimentalSafeArgsApi عليها. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة واجهة برمجة التطبيقات بأكملها في إصدار مستقبلي. (Iefd95 وI409c8 وI5b5ac وI7e753 وI960f8 وI3eabd وI8ed5a وIed2c9 وI9b73c وI554db وIb3aba وIa668d وb/188693139)

الإصدار ‎2.8.0-alpha06

‫3 أبريل 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha06. يتضمّن الإصدار 2.8.0-alpha06 هذه التعديلات.

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

  • بدأنا في إتاحة ميزة Safe Args في Navigation Compose باستخدام أسلوب يستند إلى Kotlin Serialization. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه، ويتم وضع التعليق التوضيحي ExperimentalSafeArgsApi عليها. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة واجهة برمجة التطبيقات بأكملها في إصدار مستقبلي. (I644e7 وI98896 وI2a1c5 وI43a51 وI836a1 وIc5eec وI39407 وI24e41 وIf9e14 وIbb13e وIf44d3 وIcb70f وI8972f وI1d432 وIcf32b وI20a14 وI262aa وI7de99 وI35990 وI1033d وb/188693139)

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

  • تستخدم NavHost الآن Alignment.TopStart كقيمة تلقائية لوسيط contentAlignment. يؤدي ذلك إلى توافقه مع القيمة التلقائية لـ AnimatedContent ويحلّ بعض حالات الانتقال غير المتوقّع من المنتصف. (I09e72، b/330111602)
  • عند تنفيذ إيماءة إظهار شاشة الرجوع أثناء استخدام Navigation Compose، سيكمل NavHost الآن الانتقال المخصّص بشكلٍ صحيح بدلاً من إنهائه على الفور. (I99017، b/327292110)

الإصدار 2.8.0-alpha05

‫20 مارس 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha05. يتضمّن الإصدار 2.8.0-alpha05 هذه التعديلات.

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

  • يمكنك الآن تمرير وسيطات إلى NavGraphstartDestination مباشرةً في مسار 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، مطابقة المسارات التي تم ملؤها بوسيطات من النوع Array NavTypes بشكل صحيح. (Iea805، b/327229511)

الإصدار ‎2.8.0-alpha04

‫6 آذار (مارس) 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha04. يتضمّن الإصدار 2.8.0-alpha04 هذه التعديلات.

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

  • يمكنك الآن تحديد SizeTranform لعمليات الانتقال في Navigation Compose من خلال تعريفها كجزء من عملية الإعداد للدالتَين composable و/أو navigation. (I91062، b/296912651)

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

  • تم إصلاح المشكلة التي كانت تؤدي إلى عدم عرض الانتقال بشكلٍ صحيح في NavHost في Compose Navigation عند استخدام "الرجوع إلى الخلف" في النظام بدون إيماءة. (Iceeae، b/325998468)

الإصدار ‎2.8.0-alpha03

‫21 فبراير 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha03. يتضمّن الإصدار 2.8.0-alpha03 هذه التعديلات.

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

  • تم الآن وضع علامة @MainThread على NavBackStackEntry.savedStateHandle لأنّه يستخدم رمزًا يجب أن يكون على سلسلة التعليمات الرئيسية على أي حال. (Ibb988، b/299523245)

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

  • تم إصلاح مشكلة في Navigation تسبّبت في NavGraph تحميل ViewModels DESTROYED مبكرًا جدًا لأنّ ViewModel الخاص بالإدخال المرتبط لم يكن جزءًا من الحالة المحفوظة. (Ib6bb7، b/317581849)

تحديث الاعتمادية

الإصدار 2.8.0-alpha02

‫7 فبراير 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha02. يتضمّن الإصدار 2.8.0-alpha02 هذه التعديلات.

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

  • تتيح مكتبة Navigation Compose الآن استخدام ميزة "إيماءة إظهار شاشة الرجوع" داخل التطبيق من خلال واجهات برمجة التطبيقات الجديدة SeekableTransitionState من compose-animation. يتيح لك ذلك استخدام إيماءة الرجوع للاطّلاع على الوجهة السابقة مع الانتقال المخصّص قبل اتّخاذ قرار بشأن إكمال المعاملة من خلال الإيماءة المكتملة أو إلغائها. (I8b8e9)

الإصدار 2.8.0-alpha01

‫24 يناير 2024

تم طرح androidx.navigation:navigation-*:2.8.0-alpha01. يتضمّن الإصدار 2.8.0-alpha01 هذه التعديلات.

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

  • تم إصلاح تسريب BackStackState حيث كانت عمليات استدعاء saveState متعددة على وجهة تؤدي إلى حفظ حالات متعددة، ولكن كان يمكن استعادة الحالة الأولى فقط. (I598b0، b/309559751)
  • تم إصلاح المشكلة التي كانت تؤدي إلى عدم عرض وسيطات غير السلسلة بشكلٍ صحيح عند استخدام أدوات المساعدة NavigationUI لملء عنوان أشرطة التطبيقات. (#636، b/316676794)

تحديث الاعتمادية

  • تعتمد Navigation Compose الآن على Compose 1.7.0-alpha01 في حلّ مشكلة قد تؤدي إلى ظهور رسم متحرك غير متوقّع لتغيير الحجم. (b/297258205)

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

  • نشكر SimonMarquis على إصلاح مشكلة العرض المتعلّقة بالوسيطات غير النصية عند استخدام دوال المساعدة NavigationUI لملء عنوان أشرطة التطبيقات.

الإصدار 2.7.7

الإصدار 2.7.7

‫7 فبراير 2024

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

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

  • تم نقل الإصلاح من Navigation 2.8.0-alpha01: تم إصلاح تسريب BackStackState حيث كانت عدّة طلبات saveState() على NavBackStackEntry واحدة تؤدي إلى حفظ حالات متعددة، ولكن لا يمكن استعادة الحالة الأولى المحفوظة فقط. (I598b0، b/309559751)
  • تم نقل التغيير من Navigation 2.8.0-alpha01: تم إصلاح مشكلة عدم عرض الوسيطات غير النصية بشكلٍ صحيح عند استخدام أدوات NavigationUI المساعدة لتعبئة عنوان أشرطة التطبيقات. (#636، b/316676794)

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

  • نشكر SimonMarquis على إصلاح مشكلة العرض المتعلّقة بالوسيطات غير النصية عند استخدام دوال المساعدة NavigationUI لملء عنوان أشرطة التطبيقات.

الإصدار 2.7.6

الإصدار 2.7.6

‫13 ديسمبر 2023

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

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

  • تأخذ الدالة NavGraph equals() الآن في الاعتبار عُقد الرسم البياني الآخر بشكلٍ صحيح بدلاً من الرسم البياني الذي تم استدعاؤها منه فقط. سيضمن ذلك عدم اعتبار الرسومات البيانية التي تحتوي على عُقد بمعرّفات مختلفة متساوية (I401cb، b/311414915)

الإصدار 2.7.5

الإصدار 2.7.5

1 تشرين الثاني (نوفمبر) 2023

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

تحسينات على الأداء

  • تم تحسين أداء مقارنة رسمَين بيانيَين بشكل كبير (من حيث الوقت وعدد عمليات التخصيص). وهذا يعني أنّ طلبات البحث، مثل setGraph التي تقارن داخليًا الرسم البياني الجديد بالرسم البياني الحالي، تكون أسرع بكثير وتؤدي إلى تقليل عدد اللقطات التي تم تخطّيها. نشكر Michał Z على التحليل الشامل الذي أدّى إلى هذا التحسين. (I6ad62)
  • ستعرض NavHost الآن وجهة البدء في عملية الإنشاء الأولى بدلاً من الانتظار حتى عملية الإنشاء الثانية لقراءة الحالة المعدَّلة. (I439a7، b/304852206)

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

  • تم إصلاح مشكلة يتم فيها إزالة الأنشطة السابقة إذا تم استدعاء setGraph أكثر من مرة باستخدام الرسم البياني نفسه بالضبط، وذلك فقط إذا كان هناك وجهة في الرسم البياني تحتوي على إجراء يربط بين وجهتَين. (Ieaed7)
  • لن يتم بعد الآن إدراج مربّعات الحوار التي تم الانتقال إليها وإغلاقها بسرعة في قائمة NavController.visibleEntries. (I67586، b/287969970)
  • عند إزالة إدخال ثم إجراء تغيير في الإعدادات، سيتم الآن محو ViewModel الخاص بالإدخال بشكلٍ صحيح إذا كانت قيمة saveState هي false. (Idf242، b/298164648)
  • تم إصلاح مشكلة كان بإمكان NavController فيها التعامل مع الرابط العميق أكثر من مرة إذا كانت الأنشطة السابقة فارغة تمامًا قبل تغيير الإعدادات أو إجراء طلب إلى setGraph فقط عندما كان Intent الوارد يتضمّن العلامة FLAG_ACTIVITY_NEW_TASK. (I73c7f)

تحديثات الاعتماديات

الإصدار 2.7.4

الإصدار 2.7.4

‫4 أكتوبر 2023

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

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

  • تمت إضافة إمكانية استخدام popUpTo مع المَعلمات للسماح بالرجوع إلى إدخال معيّن يستخدم تلك المَعلمات نفسها، ما يتيح إمكانية مطابقة المَعلمات المتوفّرة في popBackStack. (I731f4، b/299255572)

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

  • تم إصلاح المشكلة التي كانت تؤدي إلى تعطُّل FragmentNavigator عند مقاطعة عملية تنقّل بأخرى باستخدام popUpTo. (I3c848، b/301887045)
  • تم إصلاح المشكلة التي تسبّبت في عدم تعديل currentDestination بشكلٍ صحيح ليتطابق مع Fragment المعروض عند الضغط على زر الرجوع في النظام. (Id0d6c، b/289877514)
  • سيتم الآن نقل دورة حياة DialogFragment بشكل صحيح إلى الحالة RESUMED عند إغلاق مربع الحوار أعلاه. (I88f0d، b/301811387)

الإصدار 2.7.3

الإصدار 2.7.3

‫20 سبتمبر 2023

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

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

  • تم إصلاح مشكلة في "التنقّل باستخدام الأجزاء" تسبّبت في احتواء القائمة visibleEntries على إدخالات غير صحيحة. (I5caa9، b/288520638)
  • تم إصلاح مشكلة كانت تتسبّب في عدم تلقّي وجهة النافذة العائمة (مثل Dialogs وBottomsheets وما إلى ذلك) مطلقًا لعملية ردّ RESUMED Lifecycle. (I3b866، b/287505132)

الإصدار 2.7.2

الإصدار 2.7.2

‫6 سبتمبر 2023

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

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

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

تحديث الاعتمادية

  • تعتمد مكتبة Navigation Compose الآن على الإصدار 1.5.1 من Compose.

الإصدار 2.7.1

الإصدار 2.7.1

‫23 أغسطس 2023

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

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

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

الإصدار 2.7.0

الإصدار 2.7.0

‫9 أغسطس 2023

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

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

الصور المتحركة من تطبيق "المرافق"

بعد أن أصبح AnimatedContent مستقرًا، تمكّنا من نقل الرمز من 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 في Compose بدلاً من 1.1.0.

الإصدار 2.7.0-rc01

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

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

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

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

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

  • هناك مشكلة في الإصدار 2.6.x من Navigation، وهي أنّه عند التنقّل باستخدام popUpTo، من المحتمل حدوث IllegalArgumentException. من المحتمل أنّه يمكن تجنُّب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على غرار النصيحة المقترَحة هنا. (b/287133013)

الإصدار ‎2.7.0-beta02

‫28 حزيران (يونيو) 2023

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

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

  • توفّر مكتبة Navigation Compose الآن ترتيب z الصحيح للانتقالات المخصّصة التي تستخدم خيار التنقّل مع popUpTo.(/Ib1c3a، b/285153947)

الإصدار 2.7.0-beta01

‫7 يونيو 2023

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

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

  • تعترض NavHost في Navigation Compose الآن بشكلٍ صحيح طلبات الرجوع إلى الخلف في النظام حتى بعد أن تم STOPPED وRESUMED Activity. (Icb6de، b/279118447)

الإصدار 2.7.0-alpha01

‫24 مايو 2023

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

الصور المتحركة من تطبيق "المرافق"

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

وهذا يعني أنّ جميع الميزات المتاحة في AnimatedNavHost لإعداد انتقالات مخصّصة متاحة مباشرةً في NavHost.

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

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

  • من التنقّل 2.6.0-rc02: تم إصلاح مشكلة في التنقل في "Fragment"، حيث كان التنقل باستخدام popUpTo وإزالة جزء من الأنشطة السابقة بدون إعادة إنشاء طريقة العرض يؤدي إلى توقّف زر الرجوع في النظام عن العمل. (Ieb8d4، b/281726455)

تحديثات الاعتماديات

  • أصبح التنقّل يعتمد الآن على Compose 1.5.0-beta01.

الإصدار 2.6.0

الإصدار 2.6.0

‫7 يونيو 2023

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

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

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

التغييرات المهمة في Navigation Compose منذ الإصدار 2.5.0

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

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

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

تغييرات مهمة على NavigationUI منذ الإصدار 2.5.0

  • عند تمرير معرّف رسم بياني للتنقّل إلى AppBarConfiguration (مثل تمريره عبر Menu)، لن تعتبر NavigationUI الآن سوى وجهة البدء في رسم بياني التنقّل هذا كوجهة من المستوى الأعلى، بدلاً من وضع علامة بشكل غير صحيح على كل وجهة ضِمن الرسم البياني كوجهة من المستوى الأعلى. لم يتغيّر سلوك تمرير معرّف وجهة فردية. تتوفّر هذه الوظيفة نفسها لرمزك البرمجي من خلال الدالة الجديدة isTopLevelDestination على AppBarConfiguration.
  • ستحلّل عمليات الدمج setupWithNavController في NavigationUI للعمل مع شريط التطبيق العلوي الآن قيم R.string لمَعلمات ReferenceType التي تم العثور عليها في android:label إلى قيم السلسلة بدلاً من إخراج عدد صحيح للمورد تم إنشاؤه تلقائيًا.
  • توفّر NavigationUI الآن سجلّات عند تعذّر التنقّل من خلال MenuItem محدّد.

الإصدار 2.6.0-rc02

‫24 مايو 2023

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

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

  • تم إصلاح مشكلة في التنقّل في الأجزاء، حيث كان التنقّل باستخدام popUpTo وإزالة جزء من الأنشطة السابقة بدون إعادة إنشاء طريقة العرض يؤدي إلى توقّف زر الرجوع في النظام عن العمل. (Ieb8d4، b/281726455)

الإصدار 2.6.0-rc01

‫10 مايو 2023

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

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

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

الإصدار ‎2.6.0-beta01

‫19 أبريل 2023

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

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

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

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

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

الإصدار 2.6.0-alpha09

‫5 أبريل 2023

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

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

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

الإصدار 2.6.0-alpha08

‫22 مارس 2023

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

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

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

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

  • تم إصلاح NullPointerException عند إغلاق رسم بياني متداخل يتضمّن وسيطة غير قابلة للتصغير. (6b3581، b/249988437)
  • عند استخدام زر الرجوع في النظام بعد التنقّل باستخدام popUpTo، ستظهر حالة NavController في الإدخال الصحيح. (I3a8ec، b/270447657)
  • ستعرض السمة FragmentNavigator الآن الإدخالات بشكل صحيح عند إزالة العناصر من الأنشطة السابقة باستخدام زر الرجوع في النظام أو popBackStack()، كما ستعرض ما إذا كانت المعاملة تستخدم تأثيرات للجزء أم لا. (I81bdf)
  • لن تؤدي إضافة أجزاء إلى FragmentNavigator's 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 تسبّبت في عدم نقل NavBackStackEntry إلى الحالة RESUMED عند استخدام Animation. (Ib3589، b/269646882)

الإصدار ‎2.6.0-alpha06

‫22 فبراير 2023

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

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

  • عند معاينة عنصر قابل للإنشاء باستخدام NavHost، سيتم الآن عرض startDestination في NavGraph تلقائيًا. (I2b89f)

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

  • تمت إضافة التعليق التوضيحي @MainThread إلى جميع عمليات التحميل الزائد NavController navigate لضمان استدعائها في سلسلة التعليمات الرئيسية. (I2c0b0، b/263427111)

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

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

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

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

الإصدار 2.6.0-alpha05

‫8 فبراير 2023

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

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

  • تتيح الآن كل من NavController.popBackStack(route) وNavController.getBackStackEntry(route) وNavController.clearBackStack(route) استخدام مسارات تتضمّن وسيطات تم ملؤها جزئيًا أو كليًا. يُرجى العِلم أنّه يجب أن تتطابق الوسيطات تمامًا مع وسيطات الإدخال. (Iebd28 وIc678c وI3b37b وb/257514373)
  • يستخدم FragmentNavigator الآن واجهات برمجة تطبيقات الانتقال عند التنقّل وفتح NavBackStackEntries. هذا يعني أنّ NavBackStackEntry Lifecycle سينتظر الآن حتى تكتمل المؤثرات الخاصة لعملية الدخول والخروج من الجزء قبل نقل Lifecycle.State النهائي. (I3cb19، b/238686802)
  • يستخدم DialogFragmentNavigator الآن واجهات برمجة تطبيقات الانتقال عند التنقّل وفتح NavBackStackEntries. هذا يعني أنّ NavBackStackEntry Lifecycle سينتظر الآن DialogFragment Lifecycle للانتقال إلى DESTROYED قبل الانتقال إلى DESTROYED نفسه. (I53ee5، b/261213893)

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

  • توفّر NavigatorState الآن واجهة برمجة التطبيقات prepareForTransition للسماح Navigator بنقل NavBackStackEntries إلى Lifecycle.State وسيطة. (I42c21، b/238686802)
  • يمكنك الآن الوصول إلى سجلّ التصفّح المرتبط بـ NavGraphNavigator أو ComposeNavigator من خلال السمة backstack. تعرض السمة ComposeNavigator الآن أيضًا وظيفة الاستدعاء onTransitionComplete() لوضع علامة على NavBackStackEntry نفّذ عملية تنقّل أو popBackStack على أنّها مكتملة. (I02062 وI718db وb/257519195)

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

  • لن يتم تنفيذ أي عملية في حالة Navigator عند استخدام واجهات برمجة التطبيقات push/popWithTransition، وسيتم التعامل مع الإدخال. (Iadbfa، b/261213893)
  • عند استخدام launchSingleTop مع NavGraph متداخلة، لن تتم إضافة جميع الوجهات بدءًا من الوجهة الأصلية إلى startDestination بشكل صحيح إلا إلى أعلى قائمة الخلف. (Id4bea، b/253256629)
  • سيؤدي التنقّل الآن إلى استبدال مثيل DialogFragment بشكل صحيح عند التنقّل إلى الوجهة نفسها مع ضبط العلامة launchSingleTop على "صحيح". (I45b5a، b/149572817)
  • لن تتسبّب Navigation SafeArgs بعد الآن في حدوث خطأ في التجميع عند استخدام وسيطات تتألف من 19 حرفًا بالضبط. (Id60bc، b/257110095)

الإصدار 2.6.0-alpha04

‫9 نوفمبر 2022

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

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

  • يمكن الآن لفئات NavType الفرعية المخصّصة إلغاء serializeAsValue لتسلسل قيمة في سلسلة، ما يتيح تضمين كل من التسلسل وإلغاء التسلسل (عبر parseValue) بالكامل في فئة NavType. يحلّ StringType الآن محلّ هذه الطريقة لاستدعاء Uri.encode على String المحدّد. (Ie5213، b/247637434)
  • توفّر NavigationUI الآن سجلّات عند تعذّر التنقّل من خلال MenuItem محدّدة. (I2af5a، b/247730357)

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

  • يتم الآن تحليل روابط الصفحات المعيّنة الخاصة بالتنقّل بشكل غير مباشر بدلاً من تحليلها عند بدء تشغيل الرسم البياني، ما قد يؤدي إلى تحسين أداء التطبيق عند بدء تشغيله. (Iab0ab)
  • تم إصلاح عُطل ناتج عن الانتقال للأعلى بعد الربط بصفحة معيّنة تتضمّن وسيطات تلقائية فارغة. (I51c24، b/243183636)

تحديث الاعتمادية

  • يعتمد دعم التنقّل لوحدات الميزات الديناميكية الآن على مكتبة عرض الميزات في Play الدقيقة. (Ib4ddc)
  • يعتمد الإصدار الحالي من Navigation Safe Args على الإصدار 7.3.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّه أصبح متوافقًا فقط مع الإصدارات 7.3.0 والإصدارات الأحدث. (I47e49)

الإصدار ‎2.6.0-alpha03

‫24 أكتوبر 2022

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

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

  • من شريط التنقّل 2.5.3: لن يؤدي النقر على NavHost إلى حدوث NoSuchElementException عندما لا تتوفّر وجهة لإنشاء Crossfade. سيتم الآن تخطّي التركيب فقط. (Ieb46e، b/253299416)
  • من التنقّل 2.5.3: تم إصلاح مشكلة عدم نسيان حالة Compose المحفوظة (مثل استخدامات 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 من Fragment. (I00ba4)
  • لن يتم تعديل عنصر القائمة المحدّد عند الانتقال إلى وجهة FloatingWindow، مثل مربّع حوار. (I4cde8، b/240308330)

الإصدار 2.6.0-alpha01

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

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

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

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

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

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

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

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

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

  • من شريط التنقّل 2.5.2: تحاول ميزة "التنقّل الديناميكي" الآن تثبيت وجهات الأنشطة من الوحدات الأخرى بشكل صحيح قبل الانتقال إليها. (Ia2c16، b/240292838)
  • من Navigation 2.5.2: سيؤدي التنقّل الآن إلى استبدال مثيل Fragment بشكلٍ سليم عند التنقّل إلى الوجهة نفسها وضبط العلامة launchSingleTop على "صحيح". (I5a2f1، b/237374580)
  • من التنقّل 2.5.2: تم إصلاح الخطأ IllegalStateException الناتج عن الانتقال إلى رسم بياني متداخل مرتين يتشارك عنصرًا رئيسيًا مع وجهة بدء جديدة تم إغلاقها. (I9f7cb، b/243778589)

الإصدار 2.5

الإصدار 2.5.3

‫24 أكتوبر 2022

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

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

  • لن يؤدي NavHost بعد الآن إلى حدوث NoSuchElementException عندما لا تتوفّر وجهة لإنشاء Crossfade. سيتم الآن تخطّي التجميع فقط. (Ieb46e، b/253299416)
  • تم إصلاح المشكلة المتمثلة في عدم نسيان حالة Compose المحفوظة (مثل استخدامات rememberSaveable) وإزالتها عند إزالة وجهة من الأنشطة السابقة. (I64949)

الإصدار 2.5.2

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

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

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

  • تحاول ميزة "التنقّل الديناميكي" الآن تثبيت وجهات الأنشطة من الوحدات الأخرى بشكل صحيح قبل الانتقال إليها. (Ia2c16، b/240292838)
  • سيؤدي التنقّل الآن إلى استبدال مثيل Fragment بشكلٍ صحيح عند التنقّل إلى الوجهة نفسها وضبط العلامة launchSingleTop على "صحيح". (I5a2f1، b/237374580)
  • تم إصلاح الخطأ IllegalStateException الناتج عن الانتقال إلى رسم بياني متداخل مرتين يتشارك عنصرًا رئيسيًا مع وجهة بدء جديدة تم فتحها. (I9f7cb، b/243778589)

تحديث الاعتمادية

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

  • دمج CreationExtras: يمكن الآن لـ Navigation توفير ViewModelProvider.Factory بدون حالة من خلال CreationExtras في Lifecycle 2.5.0.

Navigation SafeArgs

  • تمت ترقية اعتمادية Android Gradle Plugin في Navigation Safe Args للاستناد إلى 7.0.4، ما أدى إلى إيقاف التوافق مع إصدارات "المكوّن الإضافي لنظام Gradle المتوافق مع Android" (AGP) قبل الإصدار 7.0.
  • تمت إضافة إمكانية استخدام سمة build.gradle لمساحة الاسم بدلاً من applicationId.

تغييرات أخرى

  • لم تعُد واجهة برمجة التطبيقات visibleEntries تجريبية، وهي توفّر وظيفة لاسترداد جميع الإدخالات التي تكون وجهتها مرئية حاليًا وفقًا لـ NavController.

الإصدار 2.5.0-rc02

‫15 يونيو 2022

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

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

  • تم إصلاح عُطل ناتج عن التبديل السريع بين وجهات أسفل الشاشة عند استخدام NavHost Navigation Compose. (I3979a، b/234054916)
  • لن يتعطّل Navigation SafeArgs بعد الآن عند استخدام applicationIdSuffix ومساحة اسم بدون applicationId، أو عندما يختلف applicationId عن مساحة الاسم. (I754b1، b/233119646)
  • يتضمّن NavArgument الآن دالة toString() مخصّصة لعرض القيم الداخلية للوسيطة. (I900a8)

الإصدار 2.5.0-rc01

‫11 مايو 2022

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

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

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

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

  • يتم الآن التخلّص من النطاقات القابلة للإنشاء في NavHost وDialogHost بالترتيب المتوقّع، أي يتم التخلّص من العناصر القابلة للإنشاء الداخلية قبل العناصر القابلة للإنشاء الخارجية. (I157e6)
  • تستخدم Navigation SafeArgs الآن PathSensitivity.RELATIVE في ArgumentsGenerationTask للسماح بإمكانية نقل البيانات المخزّنة مؤقتًا. وهذا يعني أنّه يمكن الآن إعادة استخدام إدخال ذاكرة التخزين المؤقت من إصدار CI إلى إصدار محلي. (I5f67c، b/173420454)
  • تم تعديل قاعدة التدقيق UnrememberedGetBackStackEntryDetector للتأكّد من أنّ طلب remember الذي يحيط بطلب getBackStackEntry() يمرِّر أيضًا كائن NavBackStackEntry كمفتاح.(Ib7081، b/227382831)

الإصدار ‎2.5.0-beta01

‫20 أبريل 2022

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

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

  • يستخدم DialogNavigator الآن popWithTransition عند تنفيذ مكالمة dismiss(). يحلّ هذا الخطأ مشكلة تزامن عند استخدام ViewModel ضمن وجهة dialog تؤدي إلى ظهور IllegalStateException عند إغلاق مربّع الحوار إما باستخدام زر الرجوع في النظام أو النقر خارج مربّع الحوار للخروج منه. (Id7376، b/226552301)

تحديثات الاعتماديات

  • تعتمد عملية التنقّل الآن على Lifecycle 2.5.0-beta01، ما يؤدي إلى إصلاح IllegalStateException عند تضمين NavHost داخل NavHost أخرى في علامة تبويب غير أساسية في شريط التنقّل السفلي عند استخدام حِزم سابقة متعددة.

الإصدار 2.5.0-alpha04

‫6 أبريل 2022

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

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

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

  • يعتمد NavHost الآن على visibleEntries من NavController لتحديد الإدخالات التي سيتم إنشاؤها. وهذا يعني أنّه عند استخدام NavHost متداخل، يجب أن يتم الآن عرض NavHost الداخلي بشكل صحيح. (I4ba2b، b/225394514)
  • إنّ visibleEntries StateFlow المقدَّم من NavController يستند الآن إلى الحدّ الأقصى لحالة Lifecycle بدلاً من حالة Lifecycle الحالية. وهذا يعني أنّه حتى إذا كانت دورة حياة المضيف navController أقل من STARTED، ستظل قائمة الإدخالات المرئية كما هي. (I9e2a8، b/225394514)
  • يتيح SavedStateViewFactory الآن استخدام CreationExtras حتى عند تهيئته باستخدام SavedStateRegistryOwner. في حال توفير عناصر إضافية، سيتم تجاهل الوسيطات التي تمّت تهيئتها. (I6c43b، b/224844583)
  • يمكن الآن لـ NavDeepLink تحليل عناوين URI التي تتضمّن مَعلمة طلب بحث واحدة بدون قيمة. (I0efe8، b/148905489)
  • تُعد السلاسل الفارغة الآن وسيطات صالحة في الروابط لصفحات معيّنة. (I70a0d، b/217399862)
  • لن يتعطّل Navigation Safe Args بعد الآن عند استخدام مساحات الأسماء وعدم توفّر AndroidManifest.xml. (I17ccf، b/227229815)

الإصدار 2.5.0-alpha03

‫23 فبراير 2022

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

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

  • يمكنك الآن إدخال CreationExtras في by navGraphViewModels لإنشاء ViewModel. (I29217، b/217618359)

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

  • تتيح NavDeepLinks الآن استخدام أحرف السطر الجديد المرمّزة والمضمّنة في مسارات/معرّفات الموارد المنتظمة (URI) للروابط لصفحات معيّنة بشكلٍ سليم. (I513d1، b/217815060)
  • ستعمل السمة CreationExtras الآن بشكل صحيح عند استخدامها مع NavBackStackEntries لإنشاء ViewModels. (I69161، b/217617710)
  • تتيح ميزة Safe Args في Navigation الآن استخدام مساحة الاسم المحدّدة في build.gradle بدلاً من الحزمة في AndroidManifest. (I659ef، b/217414933)

الإصدار 2.5.0-alpha02

‫9 فبراير 2022

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

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

  • من التنقّل 2.4.1: سيضبط NavHostFragment الآن OnBackPressedDispatcher بشكل صحيح عند استخدام viewbinding مع الرسوم البيانية المتداخلة. (Ifbb51، b/214577959)
  • من التنقّل 2.4.1: عند استخدام الروابط لصفحات في التطبيق من خلال عدة عناصر NavGraph متداخلة، ستتضمّن حزمة الأنشطة السابقة الآن وجهات بدء وسيطة بشكلٍ سليم. (I504c0، b/214383060)

الإصدار 2.5.0-alpha01

‫26 يناير 2022

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

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

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

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

Safe Args

  • يعتمد 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.2

الإصدار 2.4.2

‫6 أبريل 2022

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

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

  • تم نقل هذه الميزة من Navigation 2.5.0-alpha03: تتوافق NavDeepLinks الآن بشكلٍ سليم مع أحرف السطر الجديد المرمّزة والمضمّنة في معرّفات الموارد المنتظمة للروابط/الروابط لصفحات معيّنة. (I513d1، b/217815060)
  • تم نقل هذه الميزة من Navigation 2.5.0-alpha03: تتيح Navigation SafeArgs الآن استخدام مساحة الاسم المحدّدة في build.gradle بدلاً من الحزمة في ملف AndroidManifest. (I659ef، b/217414933)
  • تمت إعادة نقل هذا الخطأ من Navigation 2.5.0-alpha04: لن يحدث بعد الآن عطل في Navigation Safe Args عند استخدام مساحات الأسماء وعدم توفّر AndroidManifest.xml. (I17ccf، b/227229815)
  • تم نقل هذه الميزة من Navigation 2.5.0-alpha04: يتم الآن اعتبار السلسلة الفارغة وسيطًا صالحًا في الروابط لصفحات معيّنة. (I70a0d، b/217399862)

الإصدار 2.4.1

الإصدار 2.4.1

‫9 فبراير 2022

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

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

  • سيضبط NavHostFragment الآن OnBackPressedDispatcher بشكل صحيح عند استخدام viewbinding مع الرسوم البيانية المتداخلة. (Ifbb51، b/214577959)
  • عند إنشاء روابط لصفحات في التطبيق من خلال عدة عناصر NavGraph متداخلة، سيشمل الآن سجلّ الأنشطة السابقة وجهات البدء الوسيطة بشكل صحيح. (I504c0، b/214383060)
  • تم نقل إصلاح من Navigation 2.5.0-alpha01: تم إصلاح مشكلة تعذُّر الوصول إلى ViewModel تم إنشاؤه باستخدام by navGraphViewModels() من onCreate() في Fragment مع ظهور الخطأ IllegalStateException. (I8a14d)
  • تم نقل التغيير من Navigation 2.5.0-alpha01: NavDeepLinkلم يعُد يتم فك ترميز الوسيطات مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير الوسيطات التي تم فك ترميزها بشكل صحيح إلى وجهتك النهائية. (I31b0a، b/210711399)
  • تم نقل هذه الميزة من Navigation 2.5.0-alpha01: تعتمد Safe Args الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. وهذا يعني أنّ 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

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

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • تم تعديل طرق NavigationUI التي كانت تستخدم BottomNavigationView لتستخدم بدلاً من ذلك الفئة الرئيسية التي تم تقديمها في Material 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 الخاصة بالنطاق

اعتمدت الإصدارات السابقة من Navigation على توفّر معرّف عدد صحيح ثابت لكل وجهة يحدّدها بشكل فريد عن الوجهات المشابهة لها ويسمح لك navigate()بالانتقال إلى تلك الوجهة إما مباشرةً أو من خلال إجراء. على الرغم من أنّ هذا النظام لا يزال صالحًا ومفيدًا، لا سيما في الحالات التي تحدّد فيها الرسم البياني للتنقّل في تنسيق XML ويمكنك استخدام ثوابت R.id التي يتم إنشاؤها تلقائيًا أو Safe Args (التي تستخدم هذه الثوابت لإنشاء الرمز البرمجي في مدّة التصميم)، لم يستوعب نظام الأعداد الصحيحة الفريدة المعاني والتعبيرات اللازمة لدعم الرسوم البيانية الديناميكية بالكامل التي يتم إنشاؤها آليًا في وقت التشغيل من خلال Navigation Kotlin DSL.

يقدّم هذا الإصدار خيارًا جديدًا لتحديد وجهة بشكل فريد في الرسم البياني للتنقّل من خلال المسار. المسار هو String يحدّد المسار الفريد إلى وجهة معيّنة. تم الآن إيقاف جميع طرق Kotlin DSL التي كانت تستخدم معرّف وجهة نهائيًا واستبدالها بواجهة برمجة تطبيقات مكافئة تستخدم مسارًا.

يجب التعامل مع كل مسار على أنّه جزء "المسار" من Uri الذي يحدّد الوجهة، مثل home وprofile/{userId} وprofile/{userId}/friends وما إلى ذلك. وعندما تكون هوية الوجهة مرتبطة بجزء معيّن من المحتوى، يجب أن تكون هذه الوسيطات الديناميكية جزءًا من المسار، مع اتّباع القواعد نفسها المتّبعة في الروابط لصفحات معيّنة الضمنية.

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

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

  • تم إيقاف السمة popUpTo في Kotlin نهائيًا في لغة Kotlin DSL، وتم استبدالها بالسمة popUpToId.
  • تم إيقاف واجهة برمجة التطبيقات getStartDestination() نهائيًا، وأصبح بإمكانك استخدام getStartDestinationId() بدلاً منها.

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

Navigation Compose

توفّر حزمة navigation-compose إمكانية الدمج بين مكوّن Navigation وJetpack Compose. تستخدم هذه السمة دوال @Composable كوجهات في تطبيقك.

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

  • NavHost هي دالة مركّبة تتيح لك إنشاء مخطط التنقّل من خلال لغة خاصة بالنطاق (DSL) في Kotlin، وذلك باستخدام وجهتَي composable وdialog، بالإضافة إلى إمكانية استخدام أدوات التنقّل الاختيارية، مثل تلك المتوفّرة في Accompanist Navigation Material.
  • يجب توفير إمكانية التداخل التدريجي بين الوجهات. يمكن استخدام رسوم Accompanist المتحركة للتنقّل للتحكّم في عمليات الانتقال عند الدخول والخروج باستخدام واجهات برمجة تطبيقات Compose التجريبية.
  • تحديد نطاق Lifecycle لكل وجهة قابلة للإنشاء لا تصل كل وجهة إلى الحالة RESUMED إلا عند انتهاء أي انتقالات داخلة، وتنتقل على الفور إلى الحالة STARTED عند بدء أي انتقالات خارجة، ما يتيح لك تجنُّب جميع مشاكل IllegalStateException واللمس المتعدد من خلال تفعيل طلب navigate فقط عندما تكون قيمة Lifecycle هي RESUMED.
  • تحديد نطاق ViewModel (من خلال واجهة برمجة التطبيقات viewModel() الخاصة بـ Lifecycle ViewModel Compose 2.4.0 أو hiltViewModel() الخاصة بـ Hilt Navigation Compose 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()
        }
    }
}

لمزيد من المعلومات، يُرجى الاطّلاع على دليل التنقّل في Compose.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-rc01

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

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

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

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

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

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

إصلاح الأخطاء في Navigation Compose

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

إصلاح الأخطاء في Safe Args

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

الإصدار ‎2.4.0-beta02

‫3 نوفمبر 2021

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

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

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

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

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

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

  • تم إصلاح المشكلة التي كانت تؤدي إلى نقل NavBackStackEntries إلى Lifecycle.State.CREATED بعد الانتقال إلى Lifecycle.State.STARTED عند إضافة NavHost مباشرةً إلى setContent() الخاص بالنشاط. (Ia5ac1، b/203536683)
  • تم إصلاح مشكلة تداخل في التنفيذ حيث إنّ إزالة وجهة DialogFragment من سجلّ الأنشطة السابقة قبل عرض مربّع الحوار فعليًا لن يؤدي إلى إغلاق مربّع الحوار، ما يؤدي إلى حدوث عُطل عند إغلاق مربّع الحوار غير الصحيح يدويًا من قِبل المستخدم. (I687e5)
  • تم إصلاح مشكلة كانت تؤدي إلى أن تعرض الدالة onNavDestinationSelected البرمجية على NavigationUI الرمز true حتى إذا لم يتم navigate() إلى رسم بياني التنقّل هذا. تستخدم هذه السمة الآن المنطق نفسه الذي تستخدمه setupWithNavController داخليًا لاختيار MenuItem المرتبط بالوجهة الحالية فقط باستخدام hierarchy الخاص بالوجهة. (I2b053)

الإصدار 2.4.0-beta01

‫27 أكتوبر 2021

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

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

  • يمكنك الآن استخدام by navGraphViewModel مع مسار كبديل لاستخدام معرّف من أجل توفير دعم أفضل لاستخدام Navigation Kotlin DSL مع "التقسيمات". (I901e3، b/201446416)

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

  • أصبحت واجهة برمجة التطبيقات visibleEntries تجريبية الآن. (I93f6f)

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

  • لن يتم إيقاف ViewModels عند مقاطعة عمليات الانتقال من خلال التنقّل ذهابًا وإيابًا بين الشاشات نفسها (Id52d8 وb/200817333).
  • لم يعُد مطلوبًا توفير قيمة تلقائية لوسيطات NavDeepLink القابلة للقيم الخالية عند إضافة روابط لصفحات في التطبيق إلى NavDestination. (I5aad4، b/201320030)
  • لم يعُد يتم اعتبار NavBackStackEntries متساوية إذا كانت لها دورات حياة مختلفة. وهذا يعني أنّ NavHost ستعيد إنشاء جميع الوجهات بشكل صحيح عند التنقّل باستخدام singleTop وعند إعادة اختيار عناصر القائمة السفلية. (I1b351، b/196997433)
  • تم إصلاح مشكلة في AbstractListDetailFragment تسبّبت في عدم معالجة أو تجاهل السمتَين layout_width وlayout_weight في لوحة القائمة التي تعرضها onCreateListPaneView() بشكل صحيح. (f5fbf3)
  • تتزامن الآن حالة العرض المرئي لوجهات مربّعات الحوار بشكل صحيح مع حالة DialogFragmentNavigator. وهذا يعني أنّ طلب البيانات من واجهة برمجة التطبيقات غير المتزامنة dismiss() يدويًا من أجل 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 المعروضة من أجل توفير دعم أفضل لعناصر Navigator الاختيارية، مثل تلك الواردة من Accompanist Navigation Material. (I4619e)

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

  • لن يتعطّل تطبيق Dynamic Navigation بعد الآن عند إعادة إنشاء النشاط. (Ifa6a3، b/197942869)
  • تم إصلاح مشكلة في زر الرجوع في النظام تحدث فقط بعد الرجوع إلى وجهة دالة مركّبة تحتوي على NavHost. (3ed148، b/195668143)
  • تنشئ SafeArgs الآن وسيطات fromBundle() وfromSavedStateHandle() بترتيب المَعلمات الصحيح. (I824a8، b/200059831)

الإصدار 2.4.0-alpha09

‫15 سبتمبر 2021

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

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

  • يمكنك الآن استخدام الطريقة clearBackStack() لمحو أي حالة تم حفظها باستخدام popBackStack() أو popUpToSaveState. (I80a0f)
  • يمكنك الآن تمرير قائمة من الوسيطات و/أو الروابط لصفحات معيّنة إلى أداة إنشاء الرسم البياني المتداخل للتنقّل، وستتم إضافتها تلقائيًا إلى الرسم البياني الناتج. (I8a470، b/182545357)

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

  • أصبحت دالة navArgument Kotlin DSL الآن جزءًا من navigation-common بدلاً من navigation-compose. سيتطلّب ذلك تعديل عمليات الاستيراد لمواصلة استخدام هذه الدالة. (I1d095)

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

  • عند إنشاء وسيطات، تضع Safe Args الآن المَعلمات التي لا تتضمّن قيمًا تلقائية قبل تلك التي تتضمّن قيمًا تلقائية. (I89709، b/198493585)

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

  • عند استخدام Navigation Compose، لن يتم DESTROYED NavGraphs إلا بعد أن يتم 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 هذه التعديلات.

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

  • يمكن الآن توسيع نطاق فئة NavType لإنشاء أنواع NavType مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقّل آليًا، مثلاً من خلال Navigation Graph Kotlin DSL. (I78440، b/196871885)

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

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

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

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

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

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

الإصدار ‎2.4.0-alpha07

‫18 أغسطس 2021

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

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

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

الإصدار ‎2.4.0-alpha06

‫4 أغسطس 2021

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha05

‫21 يوليو 2021

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

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

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

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

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

الإصدار 2.4.0-alpha04

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

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

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

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

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

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

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

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

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

  • تم إصلاح مشكلة في <include-dynamic> حيث لا يتم تمرير الوسيطات التي تم تمريرها إلى الرسم البياني بشكل صحيح إلى الرسم البياني الذي تم تضمينه ديناميكيًا. (I3e115)
  • تم إصلاح NullPointerException عند الانتقال إلى وجهة باستخدام وسيط string[] بقيمة تلقائية تبلغ @null. (I1fbe8)
  • أضِف قواعد ProGuard إلى @Navigator.Name، مع إصلاح المشاكل عند استخدام الوضع الكامل من الإصدار 3.1 من R8. (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)
  • تم إصلاح مشكلة تراجع تم رصدها في Navigation 2.4.0-alpha01 حيث setupActionBarWithNavController() لا يزيل رمز "أعلى" بشكل صحيح عند الانتقال إلى وجهة من المستوى الأعلى. (I5d443، b/189868637)
  • تم إصلاح IllegalStateException عند استدعاء popBackStack() بعد إزالة الرسم البياني الأساسي من NavController. (I2a330، b/190265699)
  • يتم الآن تطبيق قواعد ProGuard الخاصة بـ by navArgs() بشكل صحيح عند استخدام navigation-common أو أي عناصر تعتمد عليها. (I68800، b/190082521)
  • سيتم الآن بشكل صحيح تلقّي OnDestinationChangedListener التي تستدعي navigate() للمرة الأولى التي تتلقّى فيها ردّ اتصال، ردّ اتصال ثانٍ يتضمّن الوجهة التي تم الانتقال إليها. (Ie5f9e، b/190228815)
  • لم يعُد Safe Args يتعطّل عند استخدامه مع وحدات الميزات الديناميكية والإصدار 7.0 من "مكوّن Android الإضافي لنظام Gradle" أو الإصدارات الأحدث. (I69518، b/189966576)

مشكلة معروفة

  • سيحدث خطأ Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ في Safe Args عند استخدام الإصدار 6.7.0 من Gradle بسبب الاعتماد على إصدار قديم من Kotlin. يمكن حلّ هذه المشكلة من خلال الترقية إلى الإصدار 7.0 من Gradle. (b/190739257)

الإصدار ‎2.4.0-alpha02

‫2 يونيو 2021

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

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

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

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • تم تعديل طرق NavigationUI التي كانت تستخدم BottomNavigationView لتستخدم بدلاً من ذلك الفئة الرئيسية التي تم تقديمها في الإصدار 1.4.0 وNavigationBarView من Material. يتيح ذلك استخدام هذه الطرق مع NavigationRailView. (Ib0b36، b/182938895)

  • عند إنشاء عنصر <action> من خلال XML، يمكن أن تستخدم سمات الصور المتحركة سمات تم استردادها من المظهر باستخدام بنية app:enterAnim="?attr/transitionEnter". (I07bc1، b/178291654)

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

  • تم إيقاف أدوات إنشاء Kotlin DSL التي تستخدم معرّفًا نهائيًا، ويجب استبدالها بأدوات إنشاء تستخدم مسارات (I85b42 وb/188816479) (I9f58f وb/188816479).

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

  • تستخدم DialogFragmentNavigator الآن واجهة برمجة التطبيقات NavigatorState.pop() لإبلاغ NavController عند إغلاق مربّع حوار من خلال الضغط على زر الرجوع في النظام أو النقر خارجه، ما يضمن أن تكون حالة NavController متزامنة دائمًا مع حالة Navigator. (I2ead9)
  • لم يعُد التنقّل يعرض ConcurrentModificationException عند استخدام معالجة قائمة OnDestinationChangedListeners من خلال وظيفة ردّ اتصال onDestinationChanged. (Ib1707، b/188860458)

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

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

  • أصبحت قيمة المَعلمة int في findNode هي resId بدلاً من resid. (I7711d)

تحديث الاعتمادية

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

الإصدار 2.4.0-alpha01

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

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

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

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

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

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

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

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

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

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

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

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

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

تم تعديل كل من ComposeNavigator المستخدَمة لوجهات composable في Navigation Compose وFragmentNavigator وDynamicFragmentNavigator المستخدَمتَين لوجهات <fragment> في Navigation with Fragments لاستخدام واجهات برمجة التطبيقات الجديدة Navigator API وإتاحة حفظ الحالة واستعادتها.

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

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

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

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

  • تم إيقاف السمة popUpTo في Kotlin نهائيًا في Kotlin DSL، وتم استبدالها بالسمة popUpToId. (I59c73، b/172823546)
  • تم إيقاف واجهة برمجة التطبيقات getStartDestination() نهائيًا واستبدالها بواجهة getStartDestinationId(). (I0887f، b/172823546)

بالنسبة إلى المطوّرين الذين يجرون ترقية من الإصدارات السابقة من Navigation Compose إلى الإصدار 2.4.0-alpha01 من Navigation Compose، يعني ذلك أنّ عمليات الاستيراد التالية لطُرق الإضافة لم تعُد ضرورية ويجب إزالتها:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

تم استبدال الوسيط KEY_ROUTE بالسمة route في NavDestination، ما يتيح لك استدعاء navBackStackEntry.destination.route مباشرةً.

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

  • تمت إعادة كتابة جميع عناصر Navigation في Kotlin. وقد أدّى ذلك إلى تحسين إمكانية قبول القيم الخالية في الفئات التي تستخدم الأنواع العامة (مثل الفئات الفرعية NavType). تم نقل جميع دوال الإضافة في Kotlin التي كانت جزءًا من حِزم -ktx إلى حِزمها الرئيسية. ستستمر عملية نشر القطع الأثرية -ktx، ولكنها ستكون فارغة تمامًا. (b/184292145)
  • تتيح السمة NavDeepLinkBuilder الآن إضافة وجهات متعدّدة ومختلفة إلى حزمة الأنشطة السابقة التي تم إنشاؤها. (I3ee0d، b/147913689)
  • إضافة دوال المصنع لـ DynamicNavHostFragment (Icd515، b/175222619)
  • يتم الآن عرض المعرّف الفريد NavBackStackEntry كجزء من واجهة برمجة التطبيقات العامة. (Ie033a)
  • أصبحت الحقول name وargument ودوال التفكيك الخاصة بـ NamedNavArgument متاحة للجميع. (#174، b/181320559)
  • تم تقديم إضافة NavBackStackEntry#provideToCompositionLocals جديدة توفّر NavBackStackEntry لمتغيرات التركيب ذات الصلة. (#175، b/187229439)

Safe Args

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

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • تم تعديل Safe Args ليعتمد على KotlinPoet 1.8.0. (#172، b/183990444)

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

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

توافق Compose

  • لا تتوافق androidx.navigation:navigation-compose:2.4.0-alpha01 إلا مع الإصدار 1.0.0-beta07 من Compose والإصدارات الأحدث.

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

  • تم إصلاح مشكلة كانت تتسبّب في منح الأولوية لعناصر نائبة لوسيطة لاحقة على الروابط لصفحات معيّنة التي تتضمّن لاحقة مطابقة ودقيقة. (#153، b/184072811)
  • تتيح السمة NavHostFragment الآن استخدام أدوات التنقّل المخصّصة التي تستخدم السمة @Navigator.Name("dialog") نفسها المستخدَمة في السمة DialogFragmentNavigator التلقائية. (Ib1c2c، b/175979140)
  • تم تحسين سلوك NavigatorProvider#addNavigator لضمان عدم حدوث مشاكل عند استدعائه بشكل متكرّر باستخدام المثيل نفسه. (#176، b/187443146)

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

  • نشكر simonschiller على توفير إمكانية إنشاء طريقة fromSavedStateHandle() لكل فئة NavArgs باستخدام Safe Args. (#122، b/136967621)
  • نشكر Bradleycorn على إتاحة تحليل وسيطات Enum من الروابط لصفحات معيّنة في التطبيق بدون مراعاة حالة الأحرف. (#152، b/135857840)
  • نشكر osipxd على حلّ مشكلة كانت تؤدي إلى إعطاء الأولوية للعناصر النائبة للوسيطات اللاحقة على الروابط لصفحات في التطبيق التي تتضمّن لاحقة مطابقة تمامًا. (#153، b/184072811)
  • نشكر tatocaster على تعديل Safe Args ليعتمد على KotlinPoet 1.8.0. (#172، b/183990444)
  • نشكر jossiwolf على إتاحة الحقلَين name وargument ووظائف التفكيك في NamedNavArgument للجميع. (#174، b/181320559)
  • شكرًا jossiwolf على تقديم إضافة NavBackStackEntry#provideToCompositionLocals جديدة توفّر NavBackStackEntry إلى متغيرات التركيب المحلية ذات الصلة. (#175، b/187229439)
  • نشكر jossiwolf على تحسين سلوك NavigatorProvider#addNavigator لضمان عدم حدوث مشاكل عند استدعائه بشكل متكرر باستخدام المثيل نفسه. (#176، b/187443146)

الإصدار ‎1.0.0-alpha10

‫7 أبريل 2021

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha10. يتضمّن الإصدار 1.0.0-alpha10 هذه التعديلات.

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

  • تقبل NavHost الآن Modifier يتم تمريره إلى الحاوية القابلة للإنشاء التي تتضمّن الدوال القابلة للإنشاء الخاصة بالوجهة. (I85aca، b/175125483)

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

  • تعمل NavHost الآن حتى في حال عدم العثور على OnBackPressedDispatcherOwner، كما هو الحال عند معاينة NavHost. (I7d8b4)
  • تعتمد Navigation Compose الآن على Navigation 2.3.5، ما يحلّ مشكلة عند استخدام BackHandler داخل وجهة NavHost. (I7e63b، b/182284739)

الإصدار ‎1.0.0-alpha09

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

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha09. يتضمّن الإصدار 1.0.0-alpha09 هذه التعديلات.

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

  • تعرض الدالة LocalViewModelStoreOwner.current الآن قيمة ViewModelStoreOwner قابلة للتصغير لتحديد ما إذا كان ViewModelStoreOwner متاحًا في التركيبة الحالية. ستستمر واجهات برمجة التطبيقات التي تتطلّب ViewModelStoreOwner، مثل viewModel() وNavHost، في عرض استثناء إذا لم يتم ضبط ViewModelStoreOwner. (Idf39a)

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

  • تعتمد مكتبة Navigation Compose الآن على Navigation 2.3.4 التي تتضمّن إصلاحًا لمحاولة ضبط كائن ViewModelStore نفسه بعد ضبط الرسم البياني. (I65c24، b/177825470)

الإصدار ‎1.0.0-alpha08

‫24 فبراير 2021

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha08. يتضمّن الإصدار 1.0.0-alpha08 هذه التعديلات.

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

  • تعبئ NavHost الآن LocalSavedStateRegistryOwner CompositionLocal باستخدام NavBackStackEntry الخاص بهذه الوجهة، ما يضمن حفظ أي حالة يتم حفظها مباشرةً في SavedStateRegistry واستعادتها مع الوجهة. (I435d7، b/179469431)

الإصدار ‎1.0.0-alpha07

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

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha07. يتضمّن الإصدار 1.0.0-alpha07 هذه التعديلات.

تحديثات الاعتماديات

الإصدار ‎1.0.0-alpha06

‫28 يناير 2021

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha06. يتضمّن الإصدار 1.0.0-alpha06 هذه التعديلات.

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

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

الإصدار ‎1.0.0-alpha05

‫13 يناير 2021

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha05. يتضمّن الإصدار 1.0.0-alpha05 هذه التعديلات.

تم تعديلها لتعتمد على الإصدار 1.0.0-alpha10 من Compose.

الإصدار ‎1.0.0-alpha04

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

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha04. يتضمّن الإصدار 1.0.0-alpha04 هذه التعديلات.

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

الإصدار ‎1.0.0-alpha03

‫2 ديسمبر 2020

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha03. يتضمّن الإصدار 1.0.0-alpha03 هذه التعديلات.

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

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

الإصدار ‎1.0.0-alpha02

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

تم طرح androidx.navigation:navigation-compose:1.0.0-alpha02. يتضمّن الإصدار 1.0.0-alpha02 هذه التعديلات.

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

  • تتيح أداة إنشاء التنقّل الآن استخدام NavOptions لإجراء عمليات popUpTo وlaunchSingleTop (If96c3 وb/171468994).
  • تمت إضافة دالة تنقّل تأخذ مسارًا بدلاً من رقم تعريف، ما يتيح لك إنشاء رسومات بيانية متداخلة في Navigation Compose DSL. (I1661d)
  • يظهر startDestination الآن قبل المسار في قائمة المَعلمات الخاصة بـ NavHost (Ie620e)
  • يمكنك الآن إنشاء رسم بياني باستخدام المسار كوجهة بداية خارج عنصر NavHost قابل للإنشاء. (Iceb75)

الإصدار ‎1.0.0-alpha01

‫28 أكتوبر 2020

تم طرح android.navigation:navigation-compose:1.0.0-alpha01. يتضمّن الإصدار 1.0.0-alpha01 هذه التعديلات.

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

توفّر حزمة navigation-compose إمكانية الدمج بين مكوّن Navigation وJetpack Compose. تستخدم هذه السمة دوال @Composable كوجهات في تطبيقك.

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

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

لمزيد من المعلومات، يُرجى الاطّلاع على دليل التنقّل في Compose.

الإصدار 2.3.5

الإصدار 2.3.5

‫7 أبريل 2021

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

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

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

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

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

تحديثات الاعتماديات

  • يعتمد المكوّن الإضافي لنظام Gradle الخاص بـ Safe Args في Navigation الآن على الإصدار 1.4.31 من المكوّن الإضافي لنظام Gradle المتوافق مع Kotlin. (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 الآن تعليقات توضيحية خاصة بإيقاف التحذيرات إلى الطرق المناسبة عند استخدام Java. (I8fbc5، b/179463137)

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

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

الإصدار 2.3.3

الإصدار 2.3.3

‫27 يناير 2021

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

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

  • لم يعُد يحدث تعطُّل عند إزالة NavBackStackEntry قبل نقل Lifecycle إلى CREATED. (Ie3ba3)
  • تم إصلاح مشكلة تراجع الأداء الناتجة عن b/171364502 حيث كان الانتقال إلى نشاط بقيمة مورد رسوم متحركة 0 يؤدي إلى حدوث ResourceNotFoundException. (I7aedb، b/176819931)

الإصدار 2.3.2

الإصدار 2.3.2

‫2 ديسمبر 2020

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

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

  • تم إصلاح خطأ في NavigationUI كان يؤدي إلى تعذُّر الانتقال إلى النشاط عند استخدام وجهة <activity> مع onNavDestinationSelected. (I22e34، b/171364502)
  • تم إصلاح مشكلة كانت تؤدي إلى الانتقال إلى الوجهة المثبَّتة حديثًا عدة مرات عند الضغط على navigation-dynamic-features-fragment. (aosp/1486056 وb/169636207)
  • تم إصلاح مشكلة عدم إرسال الوسيطات التلقائية إلى مثيلات OnDestinationChangedListener عند استخدام launchSingleTop. (I2c5cb)
  • تم إصلاح مشكلة عدم إنشاء مثيل جديد للرسم البياني للتنقّل المتداخل في الأنشطة السابقة عند الانتقال إليه. (Ifc831)
  • تم إصلاح مشكلة عدم إيقاف وإزالة الرسم البياني للتنقّل على الفور من سجلّ الرجوع عند استخدام navigate() مع popUpTo التي أزالت آخر وجهة في الرسم البياني للتنقّل. (I910a3)
  • تستخدم Navigation SafeArgs الآن الإصدار 1.7.2 من KotlinPoet الذي يتيح استخدام وضع واجهة برمجة التطبيقات الصريح في Kotlin. (I918b5)
  • تتحقّق NavHostFragment.findNavController(Fragment) الآن أيضًا من طريقة عرض العناصر الأساسية في DialogFragment بالإضافة إلى عمليات التحقّق الحالية من تسلسل Fragment الهرمي وهيكلية طرق العرض لـ Fragment. يتيح لك ذلك اختبار أجزاء مربّعات الحوار التي تستخدم Navigation مع FragmentScenario وNavigation.setViewNavController(). (I69e0d)

الإصدار 2.3.1

الإصدار 2.3.1

‫14 أكتوبر 2020

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

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

  • تمت إضافة موارد Animator التلقائية إلى Navigation UI، ويُنصح باستخدامها بدلاً من موارد الحركة التلقائية. (b/167430145)
  • تتجاوز NavOptions الآن طريقتَي hashcode وequals (b/161586466)
  • تتضمّن ميزة التنقّل الآن الوجهة الحالية في IllegalArgumentException "لا توجد وجهة تحمل المعرّف"، ما من شأنه تحسين تجربة تصحيح الأخطاء للمطوّرين. (b/168311416)

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

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

التغييرات في الاعتماديات

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

الإصدار 2.3.0

الإصدار 2.3.0

‫24 يونيو 2020

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

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

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

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

  • لا تتوفّر بعد إمكانية استخدام إجراءات الروابط لصفحات معيّنة وأنواع MIME في Manifest Merger. إلى أن يكتمل هذا العمل، لن تتضمّن أي عناصر <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)

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

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

الإصدار ‎2.3.0-alpha05

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

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

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

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

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

  • من Navigation 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)

تحديثات الاعتماديات

  • تعتمد عناصر Navigation Dynamic Features الآن على مكتبة Play الأساسية 1.6.5. (b/149556401)

الإصدار 2.3.0-alpha03

‫4 مارس 2020

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

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

  • بدلاً من الاعتماد على الفئة المحدّدة DrawerLayout، تستخدم AppBarConfiguration الآن الواجهة Openable التي تم تقديمها في CustomView 1.1.0-alpha02 (التي تنفّذها DrawerLayout منذ DrawerLayout 1.1.0-alpha04)، ما يتيح لك استخدام عمليات تنفيذ مخصّصة للواجهة Openable مع NavigationUI. (b/129030452)

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

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

التغييرات في الاعتماديات

  • تمت إعادة ضبط تبعية Navigation على Core 1.2.0، وأصبحت الآن تعتمد على Core 1.1.0 لتجنُّب إجبار المطوّرين على الانتقال إلى تبعية أحدث عندما لا تعتمد Navigation على أي واجهات برمجة تطبيقات جديدة في Core 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)

التغييرات في الاعتماديات

  • تعتمد عملية التنقّل الآن على Core 1.2.0.

الإصدار 2.3.0-alpha01

‫5 فبراير 2020

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

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

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

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

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

تحديثات الاعتماديات

الإصدار 2.2.2

الإصدار 2.2.2

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

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

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

  • تم إصلاح IllegalStateException عند الربط بصفحة في التطبيق تؤدي إلى وجهة البدء في الرسم البياني عندما يكون لديك عدة مثيلات NavHostFragment في "النشاط". (b/147378752)
  • لم يعُد NavigationUI يتجاهل التصنيفات الفارغة (أي الوجهة التي تتضمّن android:label=””)، وأصبح الآن يضبط العنوان بشكل صحيح على سلسلة فارغة. تم إصدار هذه الميزة سابقًا في Navigation 2.3.0-alpha04. (b/148679860)
  • تحتفظ قواعد navigation-common-ktx ProGuard الآن بشكل صحيح بفئات NavArgs المستخدَمة فقط بدلاً من جميع مثيلات NavArgs. تم إصدار هذه الميزة سابقًا في Navigation 2.3.0-alpha03. (b/150213558

تحديثات الاعتماديات

الإصدار 2.2.1

الإصدار 2.2.1

‫5 فبراير 2020

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

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

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

تحديثات الاعتماديات

الإصدار 2.2.0

الإصدار 2.2.0

‫22 يناير 2020

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

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

  • NavBackStackEntry: يمكنك الآن استدعاء NavController.getBackStackEntry()، مع تمرير معرّف وجهة أو رسم بياني للتنقّل في سجلّ الرجوع. تعرض القيمة التي تم إرجاعها NavBackStackEntry LifecycleOwner وViewModelStoreOwner (وهي القيمة نفسها التي تعرضها NavController.getViewModelStoreOwner()) وSavedStateRegistryOwner المستندة إلى Navigation، بالإضافة إلى توفير الوسيطات المستخدَمة لبدء هذه الوجهة.
  • دمج SavedState مع Lifecycle ViewModel: أصبح SavedStateViewModelFactory الآن المصنع التلقائي المستخدَم عند استخدام by navGraphViewModels() أو الدالة الإنشائية ViewModelProvider مع ViewModelStoreOwner تم إرجاعها بواسطة NavController.getBackStackEntry() أو NavController.getViewModelStoreOwner().
  • إتاحة مَعلمات طلب البحث للروابط لصفحات في التطبيق: تتوافق الروابط لصفحات في التطبيق التي تتضمّن مَعلمات طلب البحث الآن مع مَعلمات طلب البحث التي تمّت إعادة ترتيبها، كما أنّ الوسيطات التي تتضمّن قيمة تلقائية أو يمكن أن تكون فارغة أصبحت اختيارية عند مطابقة الروابط لصفحات في التطبيق.
  • تحسين إمكانية استخدام الصور المتحركة: يستخدم الإصدار NavHostFragment الآن FragmentContainerView من Fragment 1.2.0، ما يؤدي إلى إصلاح مشاكل ترتيب الصور المتحركة حسب المحور z وإرسال هوامش النافذة إلى "اللقطات".

الإصدار 2.2.0-rc04

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

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

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

  • تم تعديل الرسوم المتحركة التلقائية للتلاشي التي تستخدمها navigation-ui لتتطابق مع الرسوم المتحركة المعدَّلة للتلاشي في Fragment 1.2.0-rc04. (b/145769814)

الإصدار 2.2.0-rc03

4 كانون الأول (ديسمبر) 2019

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

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

  • تم إصلاح مشكلة في تحليل الروابط لصفحات معيّنة عند استخدام مَعلمات طلب البحث ووسيطة كالجزء الأخير من المسار، ما كان يمنع تحليل أكثر من حرف واحد من وسيطة المسار النهائية. (b/144554689)
  • تم إصلاح مشكلة في تحليل الروابط لصفحات معيّنة حيث تتلقّى المَعلمات الاختيارية القيمة "@null" بدلاً من null. (b/141613546)
  • تعمل السمة NavHostFragment الآن على استعادة الرسم البياني بشكلٍ صحيح بعد تغيير الإعدادات عند استخدامها مع السمة FragmentContainerView. (b/143752103)

التغييرات في الاعتماديات

  • تعتمد ميزة "التنقّل" الآن على Lifecycle 2.2.0-rc03 وLifecycle ViewModel SavedState 1.0.0-rc03 وActivity 1.1.0-rc03 وFragment 1.2.0-rc03 عند الاقتضاء.

الإصدار 2.2.0-rc02

‫7 نوفمبر 2019

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

التغييرات في الاعتماديات

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

الإصدار 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)
  • تحتوي فئات Java التي تم إنشاؤها باستخدام Safe Args Directions الآن على قيم تلقائية. (b/141099045)
  • تحتوي فئات Java التي تم إنشاؤها باستخدام Safe Args Args الآن على قيم تلقائية. (b/140123727)
  • عند استخدام Toolbar، لن يتم تحريك تغيير النص عند الانتقال بين وجهتَين من المستوى الأعلى باستخدام NavigationUI. (b/140848160)

الإصدار 2.2.0-alpha03

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

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

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

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

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

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

الإصدار ‎2.2.0-alpha02

‫5 سبتمبر 2019

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

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

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

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

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

الإصدار 2.2.0-alpha01

‫7 أغسطس 2019

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

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

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

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

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

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

  • يستخدم NavHostFragment الآن FragmentContainerView، ما يؤدي إلى حلّ مشاكل ترتيب العناصر حسب المحور z في المؤثرات الحركية وإرسال هوامش النافذة إلى "اللقطات". (b/137310379)

الإصدار 2.1.0

الإصدار 2.1.0

‫5 سبتمبر 2019

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

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

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

الإصدار 2.1.0-rc01

‫7 أغسطس 2019

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

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

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

الإصدار 2.1.0-beta02

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

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

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

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

الإصدار ‎2.1.0-beta01

‫17 يوليو 2019

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

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

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

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

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

الإصدار ‎2.1.0-alpha06

‫2 يوليو 2019

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

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

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

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

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

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

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

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

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

الإصدار ‎2.1.0-alpha05

‫5 يونيو 2019

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

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

  • تمت إعادة تسمية واجهات برمجة التطبيقات ذات الصلة بالمضيف على NavController ونقلها إلى فئة فرعية جديدة من NavController، وهي NavHostController. (aosp/966091)
  • تم استبدال طريقة NavController setHostOnBackPressedDispatcherOwner() بطريقة setOnBackPressedDispatcher() الخاصة بـ NavHostController، ويجب الآن استدعاء setLifecycleOwner() قبل استدعائها. (aosp/965409)
  • يحتوي NavHostController الآن على طريقة enableOnBackPressed(boolean) تحلّ محلّ الفئة NavHostOnBackPressedManager التي كانت تعرضها الطريقة setHostOnBackPressedDispatcherOwner() سابقًا. (aosp/966091)

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

  • تم إصلاح مشكلة عدم صحة سجلّ التصفّح الخلفي بعد الانتقال باستخدام معرّف الموارد المنتظم (URI). (b/132509387)
  • إنّ الروابط لصفحات معيّنة التي يتعامل معها NavController تلقائيًا لا يتم تفعيلها الآن إلا مرة واحدة. (b/132754763)

الإصدار ‎2.1.0-alpha04

‫16 أيار (مايو) 2019

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

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

  • تتعامل NavHostFragment بشكلٍ صحيح مع app:defaultNavHost عند اعتراض أحداث زر الرجوع في النظام، ما يؤدي إلى إصلاح مشكلة في الإصدارات السابقة في مكتبة Navigation 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، ما يحلّ مشكلة عند إجراء تنقّل شرطي في طرق مراحل نشاط Fragment عند الرجوع إلى Fragment. b/111598096
  • بالنسبة إلى Safe Args، يتم الآن استنتاج android:defaultValue=”@null” بدون تحديد app:argType بشكل صحيح على أنّه وسيطة string. b/129629192

الإصدار 2.1.0-alpha02

‫3 أبريل 2019

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

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

  • يمكنك الآن إنشاء ViewModels بنطاق على مستوى الرسم البياني للتنقّل من خلال أداة تفويض السمة by navGraphViewModels() لمستخدمي Kotlin أو باستخدام واجهة برمجة التطبيقات getViewModelStore() التي تمت إضافتها إلى NavController. b/111614463

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

  • يمكنك الآن إضافة app:targetPackage إلى وجهة <activity> للحدّ من اسم الحزمة المطابق. يتيح استخدام app:targetPackage="${applicationId}" لحصر الحزمة على معرّف تطبيقك. b/110975456

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

  • لم يعُد يتم تحليل android:name لوجهات <activity> إلى فئة في وقت التضخّم، ما يمنع حدوث ClassNotFoundExceptions عند استخدام الميزات الديناميكية. b/124538597

الإصدار 2.1.0-alpha01

‫19 آذار (مارس) 2019

هذا هو الإصدار الأوّلي الأول من Navigation 2.1.0.

التغييرات في الاعتماديات

  • يعتمد التنقّل الآن على androidx.core:core:1.0.1 وandroidx.fragment:fragment:1.1.0-alpha05. يزيل هذا الإصدار أيضًا التبعية على androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

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

  • تمت إضافة طريقة Navigation.createNavigateOnClickListener(NavDirections) جديدة كبديل لإنشاء متتبِّع النقرات باستخدام معرّف مورد وحزمة. b/127631752
  • تم إيقاف FragmentNavigator.instantiateFragment نهائيًا. يستخدم التنفيذ التلقائي الآن FragmentFactory لإنشاء مثيل من الفئة Fragment. b/119054429

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

  • لم يعُد التنقّل يرسل قيمة فارغة Bundle عند إرفاق وسيطات بوجهة، ما يؤدي إلى حلّ مشكلة عند استخدام android:defaultValue="@null". b/128531879
  • تعتمد Safe Args الآن على الإصدار 1.1.0 من KotlinPoet، ما يحلّ مشكلة أسماء الحِزم الطويلة جدًا. b/123654948

الإصدار 2.0.0

الإصدار 2.0.0

‫14 مارس 2019

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

الإصدار 2.0.0-rc02

‫6 مارس 2019

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

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

يجب أن يكون مشروعك قد تم نقله إلى AndroidX لاستخدام الإصدارات 2.X من Navigation. سيكون الإصدار الثابت 1.0 من Navigation هو آخر إصدار يستخدم تبعيات Support Library، وسيستند كل التطوير المستقبلي بعد الإصدار 1.0 إلى AndroidX وسيتم إنشاؤه استنادًا إلى الإصدار الثابت 2.0.

المهام التابعة قبل AndroidX

بالنسبة إلى إصدارات Navigation السابقة لإصدار AndroidX، أدرِج التبعيات التالية:

dependencies {
    def nav_version = "1.0.0"

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

بالنسبة إلى الوسيطات الآمنة، أضِف مسار الفئة التالي في ملف build.gradle المستوى الأعلى.

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

الإصدار 1.0.0

الإصدار 1.0.0

‫14 مارس 2019

تم إصدار الإصدار 1.0.0 من أداة التنقّل بدون أي تغييرات عن الإصدار 1.0.0-rc02.

الإصدار ‎1.0.0-rc02

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

هذا هو الإصدار المحتمَل الثاني للإصدار الثابت 1.0.0 من Navigation. يتضمّن هذا الإصدار عددًا من إصلاحات الأخطاء.

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

  • تم إصلاح مشكلة تجاهل popBackStack() إذا لم يكن الرسم البياني الأساسي يتضمّن معرّفًا b/126251695
  • يتعامل navigateUp() الآن بشكل صحيح مع الرجوع إلى مهمة تطبيقك عند استدعائه بعد التعامل مع رابط لصفحة في التطبيق بدون FLAG_ACTIVITY_NEW_TASK b/126082008
  • تم إصلاح مشكلة عدم تطبيق الحركة الصحيحة عند الخروج من النافذة المنبثقة في ActivityNavigator.applyPopAnimationsToPendingTransition b/126237567
  • تعمل رموز Kotlin البرمجية التي تم إنشاؤها بواسطة Safe Args الآن على إلغاء الأحرف الخاصة بشكل صحيح في كلمات Kotlin الرئيسية، مثل in وfun، في اسم الحزمة المرتبط بفئة R. b/126020455

الإصدار ‎1.0.0-rc01

‫21 فبراير 2019

هذا إصدار محتمل للإصدار الثابت 1.0.0 من Navigation. يتضمّن هذا الإصدار إصلاحًا لأحد الأخطاء.

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

  • تم إصلاح مشكلة عند استخدام "التقسيمات" وعمليات التنقّل singleTop b/124294805

الإصدار ‎1.0.0-beta02

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

يتضمّن هذا الإصدار عددًا من التحسينات البسيطة وإصلاحات مهمة للأخطاء.

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

  • يمكنك الآن استخدام 0 كـ android:defaultValue لوسيطات reference. b/124248602

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

  • تتم الآن إعطاء الأولوية لمطابقات الروابط لصفحات معيّنة التامة على الروابط لصفحات معيّنة التي تتضمّن .* أو مطابقات الوسيطات. b/123969518

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

  • تعرض الدالتان popBackStack() وnavigateUp الآن القيمة false بشكل صحيح عند إزالة آخر وجهة من حزمة الخلف، ما يؤدي إلى إصلاح مشكلة تراجع تم تقديمها في 1.0.0-beta01. b/123933201
  • تضبط Navigation الآن ClassLoader بشكل صحيح أثناء استعادة حالة المثيل المحفوظة، ما يمنع حدوث مشاكل عند استخدام فئات مخصّصة في حالة Navigator المحفوظة أو في الوسيطات المُرسَلة إلى NavDestination. b/123893858
  • لم تعُد فئات NavArgs التي تم إنشاؤها باستخدام Safe Args تتسبّب في حدوث أعطال عند استعادة وسيطة Parcelable[] من حالة المثيل المحفوظة. b/123963545
  • تعمل Safe Args الآن على إزالة فئات Kotlin غير الضرورية التي تم إنشاؤها بشكل صحيح. b/124120883

الإصدار 1.0.0-beta01

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

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

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

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

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

  • يمكن الآن استخدام Safe Args في وحدات المكتبة ووحدات الميزات على جميع إصدارات المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/121304903
  • تم إصلاح خطأ برمجي كان يؤدي إلى إزالة جميع نُسخ وجهة من أعلى حزمة الخلفية عند تنفيذ عملية popBackStack() واحدة، بدلاً من إزالة وجهة واحدة فقط في كل مرة. b/123552990
  • تم إصلاح مشكلة كانت تؤدي إلى عدم مزامنة الحالة FragmentNavigator مع حالة NavController، ما كان يتسبب في حدوث IllegalStateException عند محاولة استعادة سجلّ الرجوع. b/123803044
  • تم إصلاح مشكلة عدم ظهور سهم الرجوع الذي يتعامل معه NavigationUI عند استخدام ProGuard مع التشويش. b/123449431
  • تتعامل التعليمة البرمجية التي تم إنشاؤها بواسطة Safe Args الآن بشكل سليم مع استخدام app:argType الذي يشير إلى فئة داخلية ثابتة بالتنسيق .OuterClass$InnerClass. b/123736741
  • تتعامل تعليمات Java البرمجية التي تم إنشاؤها بواسطة Safe Args الآن بشكل صحيح مع الإجراءات العامة والوجهات المتداخلة بشكل كبير. b/123347762

الإصدار ‎1.0.0-alpha11

‫23 يناير 2019

هذا إصدار تصحيح سريع من 1.0.0-alpha10 يعمل على إصلاح مشكلة في Safe Args.

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

  • تم إصلاح مشكلة تعذُّر استيراد Safe Args لفئة Directions المرتبطة بالإجراءات العامة. b/123307342

الإصدار ‎1.0.0-alpha10

‫23 يناير 2019

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

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

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

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

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

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

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

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

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

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

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

الإصدار ‎1.0.0-alpha09

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

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

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

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

  • لن تؤدي MenuItem التي تتضمّن menuCategory="secondary" إلى إيقاف عملية الرجوع إلى الخلف عند استخدامها مع طرق NavigationUI. b/120104424
  • تتيح لك AppBarConfiguration الآن ضبط مثيل احتياطي OnNavigateUpListener سيتم استدعاؤه عندما تعرض الدالة navController.navigateUp() القيمة false. b/79993862 b/120690961

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

  • عند استخدام <argument> مع argType="reference"، لن يحلّل Navigation المرجع بعد الآن، بل سيقدّم معرّف المورد الأوّلي نفسه. b/111736515
  • تعود onNavDestinationSelected() الآن تلقائيًا إلى وجهة البدء في الرسم البياني للتنقّل، ما يجعلها متوافقة مع طرق setup. أضِف menuCategory="secondary" إلى MenuItem لتجنُّب إظهار سجلّ الأنشطة السابقة. aosp/852869
  • تتلقّى الآن طرق fromBundle() لفئات Args التي تم إنشاؤها قيمة Bundle غير فارغة بدلاً من قيمة Bundle قابلة للقيم الفارغة aosp/845616

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

  • يتم الآن تحليل الوسيطات بشكلٍ صحيح من الروابط لصفحات في التطبيق على أنّها argType بدلاً من تحليلها دائمًا على أنّها سلاسل b/110273284
  • أصبح بإمكانك الآن تصدير الموارد العامة الخاصة بالتنقل بشكل صحيح b/121059552
  • أصبح Safe Args متوافقًا الآن مع الإصدار 3.4 Canary 4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث b/119662045

الإصدار ‎1.0.0-alpha08

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

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

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

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

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

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

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

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

Safe Args

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

الإصدار ‎1.0.0-alpha07

‫29 أكتوبر 2018

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

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

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

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

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

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

Safe Args

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

الإصدار ‎1.0.0-alpha06

‫20 سبتمبر 2018

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

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

  • تغيير غير متوافق: تأخذ الطريقة navigate() في Navigator الآن المَعلمة Navigator.Extras.
  • أصبح الآن بإمكانك استخدام طريقة getGraph() في NavController NonNull b/112243286

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

  • NavigationUI.setupWithNavController() لم يعُد يعرض عدد المشاهدات إذا تم استخدامه مع عدد المشاهدات من وجهات فردية b/111961977
  • يتم الآن استدعاء Navigator onSaveState() مرة واحدة فقط b/112627079

Safe Args

  • توسيع فئات "الاتجاهات" الخاصة بوجهة التنقّل لتشمل فئة "الاتجاهات" الرئيسية إذا كانت متوفّرة b/79871405
  • تتضمّن فئتَا Directions وArgs الآن عملية تنفيذ مفيدة toString() b/111843389

الإصدار ‎1.0.0-alpha05

‫10 أغسطس 2018

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

  • تم إصلاح الخطأ الذي تسبَّب في حدوث سلوك غير صحيح في سجلّ الرجوع. b/111907708
  • إصلاح خطأ في equals() من فئات Generated Args‏ (b/111450897)
  • إصلاح خطأ في عملية الإنشاء في Safe Args‏ b/109409713
  • إصلاح عملية تحويل من معرّفات الموارد إلى أسماء Java b/111602491
  • إصلاح رسائل الخطأ المتعلّقة بقيمة Null في مكوّن Safe Args الإضافي
  • إضافة تعليقات توضيحية بشأن إمكانية قبول القيم الفارغة

الإصدار ‎1.0.0-alpha04

‫19 يوليو 2018

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

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

  • سيضبط NavHostFragment دائمًا الفئة Fragment الحالية على أنّها جزء التنقّل الأساسي، ما يضمن إيقاف مديري الأجزاء الفرعية قبل إيقاف NavController الخارجي b/111345778.

Safe Args

  • تغيير غير متوافق: تم تغيير app:type إلى app:argType لتجنُّب التعارض مع مكتبات أخرى، مثل ConstraintLayout 2.0.0-alpha1 b/111110548
  • أصبحت رسائل الخطأ من Safe Args قابلة للنقر الآن b/111534438
  • تتأكّد فئات Args الآن من أنّ سمات NonNull ليست فارغة فعلاً b/111451769
  • تمت إضافة تعليقات توضيحية إضافية NonNull إلى الفئات التي تم إنشاؤها NavDirections وArgs b/111455455 b/111455456

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

  • تم إصلاح مشكلة في زر الرجوع في النظام بعد الربط العميق بمكان جزء b/111515685

الإصدار ‎1.0.0-alpha03

‫12 يوليو 2018

يتضمّن مكوّن Navigation 1.0.0-alpha03 الإضافي لنظام Gradle الخاص بـ Safe Args عددًا من التغييرات في واجهة برمجة التطبيقات وتغييرات في السلوك وعمليات إصلاح للأخطاء.

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

  • تمت إضافة طريقة NavigationUI.setupWithNavController إلى شريط الأدوات b/109868820
  • تمت إضافة طريقة NavigationUI.setupWithNavController إلى CollapsingToolbarLayout b/110887183
  • تعرض الدالة popBackStack() الآن القيمة false عندما تكون قائمة الأنشطة السابقة فارغة أو عندما لا يكون رقم تعريف الوجهة المحدّد في قائمة الأنشطة السابقة b/110893637
  • يتجاهل FragmentNavigator الآن عمليات التنقّل بعد أن يحفظ FragmentManager الحالة، ما يؤدي إلى تجنُّب استثناءات "لا يمكن تنفيذ هذا الإجراء بعد onSaveInstanceState" b/110987825

Safe Args

  • تغيير غير متوافق مع الإصدارات القديمة: سيتم استبدال الأحرف غير الأبجدية الرقمية في أسماء الإجراءات والوسيطات بنظام الكتابة المختلطة في أسماء طرق NavDirections المعنية
    • على سبيل المثال، ستصبح DemoController.index setDemoControllerIndex b/79995048
    • على سبيل المثال، سيصبح action_show_settings actionShowSettings b/79642240
  • تغيير غير متوافق: أصبحت الوسيطات تُعتبر الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في وسيطات السلسلة والقابلة للتسلسل، أضِف app:nullable="true" b/79642307
  • يمكنك الآن استخدام app:type="long" مع defaultValues بالتنسيق "123L" b/79563966
  • أصبحت وسيطات Parcelable متاحة الآن، وذلك باستخدام اسم فئة مؤهَّل بالكامل لـ app:type. القيمة التلقائية الوحيدة المتاحة هي "@null" b/79563966
  • تتضمّن فئات Args الآن الرمزَين equals() وhashCode() b/79642246
  • يمكن الآن تطبيق مكوّن Safe Args الإضافي على مشاريع المكتبة b/80036553
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع الميزات b/110011752

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

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

الإصدار ‎1.0.0-alpha02

‫7 يونيو 2018

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

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

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

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

  • تم إصلاح IllegalStateException عند طلب التنقّل من طرق دورة حياة Fragment. b/79632233

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

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

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

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

  • تم إصلاح مشكلة تداخل "اللقطات" عند استخدام launchSingleTop. b/79407969

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

  • ستعمل NavigationUI الآن على تمييز العنصر الصحيح عند استخدام رسم بياني متداخل كـ MenuItem. b/109675998

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

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

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

الإصدار ‎1.0.0-alpha01

‫8 مايو 2018

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