التنقّل

التنقل هو إطار عمل تنقُّل بين "الوجهات" داخل أحد تطبيقات Android التي توفر واجهة برمجة تطبيقات متسقة سواء تم تنفيذ الوجهات كأجزاء أو أنشطة والمكونات الأخرى.
التعديل الأخير الإصدار المستقر سحب المرشح الإصدار التجريبي إصدار أولي
4 سبتمبر 2024 2.8.0 - - -

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

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

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

Groovy

dependencies {
  def nav_version = "2.8.0"

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

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

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

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

}

Kotlin

dependencies {
  val nav_version = "2.8.0"

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

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

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

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

}

Safe Args

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

Groovy

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

Kotlin

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

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

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

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

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

ملاحظات

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

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

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

الإصدار 2.8

الإصدار

4 سبتمبر 2024

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

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

التنقل في Kotlin DSL Type-Safety

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

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

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

يُرجى الاطّلاع على مشاركة مدونة أمان الكتابة أثناء التنقل للحصول على مزيد من المعلومات.

إنشاء رجوع قائم على التوقّعات في التنقّل

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

إمكانية إنشاء جزء من التنقّل

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

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

تغييرات أخرى

  • تعتمد ميزة إنشاء التنقل الآن على الإصدار 1.7.0 من الإنشاء.
  • توفّر ميزة التنقّل الآن فئة CollectionNavType<T> جديدة، وهي فئة فرعية من NavType<T> للوسيطات المستندة إلى المجموعات، مثل القائمة والصفائف والخرائط. يتم اكتساب جميع صفائف NavType التلقائية (IntArrayType وLongArrayType وFloatArrayType وBoolArrayType وStringArrayType) من هذه الفئة الجديدة.
  • يتوافق تطبيق "NavType" الآن مع قوائم Int وString وBoolean وFloat وlong.

الإصدار 2.8.0-rc01

21 آب (أغسطس) 2024

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

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

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

الإصدار 2.8.0-beta07

7 أغسطس 2024

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

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

  • بسبب b/358137294، لا يتم دعم سوى التعدادات المدمجة في فئة أخرى في كل مرة. سيتم توفير تعدادات المستوى الأعلى في الإصدار التالي.

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

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

الإصدار 2.8.0-beta06

24 يوليو 2024

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

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

  • تم إصلاح مشكلة عدم فحص أداة Lint لـ WrongStartDestinationType بحثًا عن عناصر Companion على المحتوى الذي تم تمريره في الفئة، ما تسبّب في تعذُّر اكتشاف الخطأ من خلال أداة Lint. (I92b09)

الإصدار 2.8.0-beta05

10 يوليو 2024

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

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

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

الإصدار 2.8.0-beta04

26 يونيو 2024

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

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

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

الإصدار 2.8.0-beta03

12 يونيو 2024

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

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

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

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

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

الإصدار 2.8.0-beta02

29 مايو 2024

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

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

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

الإصدار 2.8.0-beta01

14 مايو 2024

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

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

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

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

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

الإصدار 2.8.0-alpha08

1 مايو 2024

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

الوسيطات الآمنة في ميزة "إنشاء التنقل"

  • لقد اكتمل العمل على توفير الأمان من نوع وقت التجميع في ميزة Navigation Compose ومستخدمي Navigation Kotlin DSL المستنِد إلى تسلسل Kotlin، وأصبحت واجهات برمجة التطبيقات التجريبية في السابق مستقرة.

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

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

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

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

يُرجى الاطّلاع على مشاركة مدونة أمان الكتابة أثناء التنقل للحصول على مزيد من المعلومات.

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

  • توفّر العناصر navigation-fragment-compose الآن مقطوعة LocalFragment محلية في الطرق القابلة للإنشاء داخل ComposableFragment. (If35e5)
  • يتوافق تطبيق "NavType" الآن مع قوائم Int وString وBoolean وFloat وlong. (I4b6dd وIa914c وb/188693139)

الإصدار 2.8.0-alpha07

17 أبريل 2024

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

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

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

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

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

  • تابعنا دعم الوسيطات الآمنة في ميزة "إنشاء التنقل" باستخدام منهج يستند إلى تسلسل Kotlin. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه وتم وضع علامة عليها بالتعليق التوضيحي ExperimentalSafeArgsApi. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة عرض واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي. (Iefd95، وI409c8، I5b5ac وI7e753 وI960f8 وI3eabd وI8ed5a وIed2c9 وI9b73c وI9b73c وI554db02I3eabd وI8ed5a

الإصدار 2.8.0-alpha06

3 أبريل 2024

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

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

  • بدأ دعم "العمليات الآمنه" في ميزة "إنشاء التنقل" باستخدام نهج يستند إلى تسلسل Kotlin. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه وتم وضع علامة عليها بالتعليق التوضيحي ExperimentalSafeArgsApi. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة عرض واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي.

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

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

الإصدار 2.8.0-alpha05

20 مارس 2024

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

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

  • يمكنك الآن تمرير الوسيطات إلى startDestination في NavGraph مباشرةً من خلال المسار startDestination بدون الاعتماد على defaultValue. وينطبق ذلك على NavGraph startDestinations المدمجة أيضًا. (I0e0b5، وb/109505019، وb/188693139)

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

  • تمت إضافة فئة CollectionNavType<T> مجردة جديدة، وهي فئة فرعية من NavType<T> للوسيطات المستندة إلى المجموعات، مثل القائمة والصفائف والخرائط. (Ic6d63، b/188693139)
  • جميع صفائف NavType التلقائية (IntArrayType وLongArrayType وFloatArrayType وBoolArrayType وStringArrayType) هي الآن من النوع CollectionNavType (Idcf79 وb/188693139)
  • توفّر NavType الآن واجهة برمجة تطبيقات valueEquals جديدة ومفتوحة تحدّد ما إذا كانت قيمتان من النوع نفسه متساويتين. (I6cb97، b/327229511)

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

  • أصبحت الآن مَعلمات طلب البحث في الروابط لصفحات في التطبيق تسمح باستخدام القيم على شكل أقواس معقوفة حول اسم الوسيطة (أي {argName}) كقيم صالحة لـ NavTypes المستندة إلى السلسلة. يؤدي ذلك إلى حلّ مشكلة تُعتبر هذه القيمة غير صالحة (أو عدم توفّر قيمة) لجميع الأنواع. (I18302، b/327274038)
  • يمكن الآن لدوال NavController التي تتيح مسارات، مثل navigate أو popBackStack أن تتطابق بشكل صحيح مع مسارات مليئة بوسيطات المصفوفة NavTypes. (Iea805، b/327229511)

الإصدار 2.8.0-alpha04

‫6 مارس 2024

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

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

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

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

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

الإصدار 2.8.0-alpha03

21 فبراير 2024

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

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

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

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

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

تعديل بشأن التبعية

الإصدار 2.8.0-alpha02

7 فبراير 2024

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

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

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

الإصدار 2.8.0-alpha01

24 يناير 2024

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

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

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

تعديل بشأن التبعية

  • تعتمد ميزة "إنشاء التنقل" الآن على إنشاء 1.7.0-alpha01، ما يؤدي إلى إصلاح مشكلة قد تؤدي إلى تغيير حجم الصور المتحركة بشكل غير متوقّع. (b/297258205)

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

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

الإصدار 2.7.7

الإصدار 2.7.7

7 فبراير 2024

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

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

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

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

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

الإصدار 2.7.6

الإصدار 2.7.6

13 كانون الأول (ديسمبر) 2023

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

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

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

الإصدار 2.7.5

الإصدار 2.7.5

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

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

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

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

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

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

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

  • يعتمد التنقل باستخدام أجزاء الآن على Fragment 1.6.2، ما يؤدي إلى إصلاح مشكلة عدم محو مثيلات ViewModel من الأجزاء المتداخلة عند استدعاء clearBackStack.

الإصدار 2.7.4

الإصدار 2.7.4

‫4 أكتوبر 2023

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

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

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

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

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

الإصدار 2.7.3

الإصدار 2.7.3

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

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

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

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

الإصدار 2.7.2

الإصدار 2.7.2

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

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

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

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

تعديل بشأن التبعية

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

الإصدار 2.7.1

الإصدار 2.7.1

23 آب (أغسطس) 2023

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

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

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

الإصدار

الإصدار

9 آب (أغسطس) 2023

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

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

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

والآن بعد أن أصبحت ميزة AnimatedContent مستقرة، استطعنا نقل الرمز من Accompanist Navigation Animation إلى Navigation Compose نفسه.

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

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

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

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

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

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

الإصدار 2.7.0-rc01

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

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

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

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

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

  • هناك مشكلة في الإصدار 2.6.x من ميزة التنقل، والتي من الممكن أن تؤدي إلى ظهور IllegalArgumentException عند التنقل باستخدام POPUpTo. ومن الممكن تجنب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على نحو مشابه للنصيحة المقترحة هنا. (b/287133013)

الإصدار 2.7.0-beta02

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

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

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

  • تحصل ميزة "إنشاء التنقل" الآن على الترتيب z المناسب للانتقالات المخصصة التي تستخدم التنقل مع الخيار popUpTo.(/Ib1c3a، b/285153947)

الإصدار 2.7.0-beta01

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

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

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

  • تعمل ميزة NavHost في ميزة "إنشاء التنقل" الآن على اعتراض طلبات معاودة النظام بشكل صحيح حتى بعد إجراء Activity STOPPED وRESUMED. (Icb6de، b/279118447)

الإصدار 2.7.0-alpha01

24 أيار (مايو) 2023

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

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

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

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

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

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

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

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

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

الإصدار

الإصدار

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

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

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

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

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

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

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

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

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

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

الإصدار 2.6.0-rc02

24 أيار (مايو) 2023

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

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

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

الإصدار 2.6.0-rc01

10 أيار (مايو) 2023

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

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

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

الإصدار 2.6.0-beta01

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

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

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

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

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

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

الإصدار 2.6.0-alpha09

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

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

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

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

الإصدار 2.6.0-alpha08

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

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

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

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

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

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

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

الإصدار 2.6.0-alpha07

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

تم طرح androidx.navigation:navigation-*:2.6.0-alpha07. يحتوي الإصدار 2.6.0-alpha07 على هذه عمليات التنفيذ.

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

  • تتّبع صيغ واجهات برمجة التطبيقات getBackStackEntry وpopBackStack وclearBackStack التي تسلك المسارات الآن أنماط مسار تتضمن وسيطات قابلة للقيم ومَعلمات طلب بحث قابلة للقيم الفارغة (I22294 وb/269302500).
  • تم إصلاح مشكلة كانت تؤدّي إلى عدم محو الحالة المحفوظة في مدير الأجزاء المرتبط بالحزمة الخلفية التي تم محوها عند استدعاء clearBackStack() من NavController. (Ic1cce، b/271190202)
  • تم إصلاح الانحدار في الإصدار 2.6.0-alpha06 الذي تسبَّب في تسليط الضوء على MenuItem الخطأ في BottomNavigationView عند استخدام "النظام" مرة أخرى بين علامات التبويب. (I634f6، b/270447657)
  • تم إصلاح الانحدار في الإصدار 2.6.0-alpha06 الذي تسبَّب في عدم نقل NavBackStackEntry إلى حالة "تم الاستئناف" عند استخدام Animation. (Ib3589، b/269646882)

الإصدار 2.6.0-alpha06

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

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

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

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

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

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

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

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

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

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

الإصدار 2.6.0-alpha05

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

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

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

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

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

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

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

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

الإصدار 2.6.0-alpha04

9 تشرين الثاني (نوفمبر) 2022

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

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

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

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

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

تعديل بشأن التبعية

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

الإصدار 2.6.0-alpha03

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

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

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

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

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

الإصدار 2.6.0-alpha02

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

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

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

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

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

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

الإصدار 2.6.0-alpha01

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

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

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

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

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

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

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

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

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

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

الإصدار 2.5

الإصدار 2.5.3

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

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

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

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

الإصدار 2.5.2

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

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

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

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

تعديل بشأن التبعية

الإصدار 2.5.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 Integration: أصبح بإمكان Navigation الآن توفير ViewModelProvider.Factory بدون حالة عبر CreationExtras في دورة الحياة 2.5.0.

السجلات الآمنة أثناء التنقّل

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

تغييرات أخرى

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

الإصدار 2.5.0-rc02

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

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

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

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

الإصدار 2.5.0-rc01

11 أيار (مايو) 2022

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

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

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

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

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

الإصدار 2.5.0-beta01

20 نيسان (أبريل) 2022

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

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

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

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

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

الإصدار 2.5.0-alpha04

6 نيسان (أبريل) 2022

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

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

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

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

الإصدار 2.5.0-alpha03

23 شباط (فبراير) 2022

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

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

  • يمكنك الآن التنقّل بعد CreationExtras إلى by navGraphViewModels لإنشاء ViewModel. (I29217، b/217618359)

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

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

الإصدار 2.5.0-alpha02

9 شباط (فبراير) 2022

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

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

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

الإصدار 2.5.0-alpha01

26 يناير 2022

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

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

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

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

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

  • تعتمد ميزة "الوسيطات الآمنة" الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. يعني هذا أنّ منصات التنقّل الآمنة لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنها متوافقة الآن مع الإصدار 7.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث (I41c88، b/213086135، b/207670704)

الإصدار 2.4.2

الإصدار 2.4.2

6 نيسان (أبريل) 2022

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

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

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

الإصدار 2.4.1

الإصدار 2.4.1

9 شباط (فبراير) 2022

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

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

  • سيضبط NavHostFragment الآن OnBackPressedDispatcher بشكل صحيح عند استخدام ربط العرض مع الرسوم البيانية المدمجة. (Ifbb51 ، b/214577959)
  • عند إنشاء روابط لصفحات في التطبيق من خلال عدة عناصر NavGraph مدمَجة، ستتضمّن حزمة الخلفية وجهات البدء المتوسطة بشكل صحيح. (I504c0، b/214383060)
  • الرجوع إلى الإصدار السابق من التنقل 2.5.0-alpha01: تم إصلاح مشكلة تم فيها إنشاء الوصول إلى نموذج عرض. عبر by navGraphViewModels() من onCreate() الخاص بـ Fragment سيفشل باستخدام IllegalStateException. (I8a14d)
  • تم الرجوع من خلال التنقل 2.5.0-alpha01: NavDeepLinkلم يعُد فك ترميز الوسيطات غير ضروري مرتين، مما يعني أنه يتم تمرير الوسيطات التي تم فك ترميزها بشكل صحيح إلى وجهتك النهائية. (I31b0a، b/210711399)
  • تم الرجوع إلى إصدار سابق من التنقّل 2.5.0-alpha01: تعتمد الوسيطات الآمنة الآن على الإصدار 7.0.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. ويعني هذا أنّ منصات التنقّل الآمنة لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنّها متوافقة الآن مع المكوّن الإضافي "7.1.0" لنظام Gradle المتوافق مع Android والإصدارات الأحدث. (I41c88، b/213086135، b/207670704)

الإصدار

الإصدار

26 يناير 2022

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

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

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

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

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

  • تُنشئ أداة "الوسيطات الآمنة" الآن طريقة fromSavedStateHandle() لكل فئة NavArgs. (#122، b/136967621)

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

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

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

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

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

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

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

  • تم إيقاف موقع popUpTo Kotlin على Kotlin DSL نهائيًا لصالح popUpToId
  • تم إيقاف getStartDestination() API لصالح الخدمة. من getStartDestinationId().

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

إنشاء التنقل

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

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

  • عنصر NavHost قابل للإنشاء يتيح لك إنشاء رسم بياني للتنقّل من خلال لغة Kotlin DSL، باستخدام وجهتَي composable وdialog، بالإضافة إلى إتاحة استخدام برامج التنقّل الاختيارية، مثل مواد التنقّل المصاحبة.
  • دعم إلزامي للتداخل بين الوجهات يمكن استخدام حركة التنقل المصاحب للتحكم في انتقالات الدخول والخروج باستخدام واجهات برمجة تطبيقات Compose التجريبية.
  • نطاق Lifecycle لكل وجهة قابلة للإنشاء لا تصل كل وجهة إلى الحالة RESUMED إلا عند انتهاء أي انتقالات دخول وتنخفض فورًا إلى STARTED عند بدء أي عمليات انتقال تؤدّي إلى الخروج، ما يسمح لك بتجنُّب جميع مشاكل IllegalStateException واللمس المتعدد من خلال بدء استدعاء navigate فقط عندما يكون Lifecycle هو RESUMED.
  • نطاق ViewModel (عبر واجهة برمجة تطبيقات viewModel() لـ Lifecycle ViewModel Compose 2.4.0 أو hiltViewModel() من ميزة إنشاء التنقّل في Hilt 1.0.0 على مستوى الوجهة، ما يوفّر نطاقًا يبقى يحافظ على التغييرات في الإعدادات ويظهر في الحزمة الخلفية (عندما يتم التخلص من المحتوى القابل للإنشاء بطريقة أخرى) وإشارة في نموذج ViewonCleared() تشير إلى التخلص الدائم وتنظيف الحالة المرتبطة بهذا NavBackStackEntry.
  • تحديد نطاق rememberSaveable على مستوى الوجهة، مع ضمان حفظ جميع الحالات القابلة للإنشاء واستعادتها تلقائيًا عند العودة إلى الوجهة
  • الدعم الكامل لحفظ واستعادة حالة NavController وحالة الوجهة بعد وفاة العملية وإعادة إنشائها
  • الدمج التلقائي مع زر الرجوع للنظام
  • دعم تمرير الوسيطات، وإرفاق روابط لصفحات في التطبيق بالوجهات، وعرض نتيجة إلى وجهات سابقة.

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

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

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

عدة حزم إضافية

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

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-rc01

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

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

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

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

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

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

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

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

إصلاح أخطاء الوسيطات الآمنة

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

الإصدار 2.4.0-beta02

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

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

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

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

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

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

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

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

الإصدار 2.4.0-beta01

27 تشرين الأول (أكتوبر) 2021

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

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

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

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

  • لا تزال واجهة برمجة التطبيقات visibleEntries في مرحلة تجريبية. (I93f6f)

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

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

الإصدار 2.4.0-alpha10

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

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

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

  • توفّر NavController الآن القدرة على استرداد قائمة بجميع NavBackStackEntry مثيلات عبر visibleEntries StateFlow (Ia964e)
  • على rememberNavController() إجراء خطوة اختيارية الآن مجموعة من Navigator مثيل ستتم إضافتها إلى تم إرجاع NavController للحصول على دعم أفضل بشكل اختياري المتنقلون مثل أولئك الذين يجرون مواد التنقّل المصاحبة: (I4619e)

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

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

الإصدار 2.4.0-alpha09

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

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

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

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

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

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

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

  • عند إنشاء الوسيطات، تضع "الوسيطات الآمنة" الآن المعلَمات بدون القيم الافتراضية قبل تلك ذات القيم الافتراضية. (I89709، b/198493585)

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

  • عند استخدام ميزة "إنشاء التنقل"، ستصبح NavGraphs DESTROYED بعد بلوغ كل أطفالهم DESTROYED. (I86552، b/198741720)
  • لم تعد وسيطات NavDeepLink فارغة. تتطلب قيمة افتراضية. (Ia14ef، b/198689811)
  • الاتصال بالرقم setGraph() باستخدام رسم بياني جديد سنمحو الآن أيضًا أي حزم خلفية محفوظة بالإضافة إلى إلى سلوكه السابق المتمثل في تمييز المكدس الخلفي. (I97f96)
  • تم إصلاح المشكلة المتمثلة في OnDestinationChangedListener مثيل و لم يتم إشعار currentBackStackEntryFlow عندما باستخدام launchSingleTop. (Iaaebc)

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

الإصدار 2.4.0-alpha08

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha07

18 آب (أغسطس) 2021

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

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

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

الإصدار 2.4.0-alpha06

4 آب (أغسطس) 2021

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha05

21 يوليو 2021

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

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

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

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

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

الإصدار 2.4.0-alpha04

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha03

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

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

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

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

مشكلة معروفة

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

الإصدار 2.4.0-alpha02

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

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

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

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

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

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

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

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

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

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

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

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

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

تعديل بشأن التبعية

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

الإصدار 2.4.0-alpha01

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

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

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

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

عدة حزم إضافية

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

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

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

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

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

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

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

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

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

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

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

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

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

  • تم إيقاف موقع kotlin popUpTo على Kotlin DSL نهائيًا لصالح popUpToId (I59c73، b/172823546)
  • تم إيقاف getStartDestination() API لصالح الخدمة. من getStartDestinationId(). (I0887f، b/172823546)

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

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

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

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

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

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

  • تُنشئ أداة "الوسيطات الآمنة" الآن طريقة fromSavedStateHandle() لكل فئة NavArgs. (#122، b/136967621)

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

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

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

التوافق مع إنشاء الرسائل

  • يتوافق "androidx.navigation:navigation-compose:2.4.0-alpha01" فقط مع الإصدار 1.0.0-beta07 والإصدارات الأحدث من ميزة إنشاء الرسائل.

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

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

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

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

الإصدار 1.0.0-alpha10

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

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

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

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

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

  • أصبح تطبيق "NavHost" متاحًا الآن حتى عند عدم العثور على OnBackPressedDispatcherOwner، هكذا عند معاينة NavHost. (I7d8b4)
  • تعتمد ميزة إنشاء التنقّل الآن على التنقل 2.3.5، ما يؤدي إلى إصلاح مشكلة عند استخدام BackHandler داخل وجهة NavHost. (I7e63b، b/182284739)

الإصدار 1.0.0-alpha09

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

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

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

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

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

  • تعتمد ميزة "إنشاء التنقل" الآن على التنقل 2.3.4 والذي يتضمن الإصلاح لمحاولة تعيين نفس واجهة ViewModelStore بعد تعيين الرسم البياني. (I65c24، b/177825470)

الإصدار 1.0.0-alpha08

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

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

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

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

الإصدار 1.0.0-alpha07

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

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

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

  • تعتمد ميزة "إنشاء التنقل" الآن على Lifecycle ViewModel Compose 1.0.0-alpha01 لإتاحة viewModel() لوجهات composable. (I7a374)
  • يستخدم تطبيق "NavHost" الآن الميزة الجديدة LocalOnBackPressedDispatcherOwner من ميزة Activity-Compose 1.3.0-alpha01 للحصول على OnBackPressedDispatcher التي يتم ضبطها على NavController. (I65b12)

الإصدار 1.0.0-alpha06

28 يناير 2021

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

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

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

الإصدار 1.0.0-alpha05

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

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

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

الإصدار 1.0.0-alpha04

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

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

  • تم التحديث للتوافق مع ميزة "إنشاء" 1.0.0-alpha09.

الإصدار 1.0.0-alpha03

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

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

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

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

الإصدار 1.0.0-alpha02

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

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

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

  • ميزة إنشاء التنقل تدعم الآن NavOptions لاستخدام المنبثقات وLaunchsingleTop (If96c3 وb/171468994)
  • تمت إضافة دالة تنقل تأخذ مسارًا بدلاً من رقم تعريف يسمح لك بإنشاء رسوم بيانية مدمجة في ميزة "إنشاء التنقل" DSL. (I1661d)
  • تبدأ الوجهة الآن قبل المسار في قائمة مَعلمات NavHost (Ie620e)
  • يمكنك الآن إنشاء رسم بياني باستخدام المسار كبداية وجهة خارج NavHost قابل للإنشاء. (Iceb75)

الإصدار 1.0.0-alpha01

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

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

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

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

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

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

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

الإصدار 2.3.5

الإصدار 2.3.5

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

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

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

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

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

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

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

  • يعتمد المكوّن الإضافي "التنقل الآمن" لـ Gradle المتوافق مع نظام Gradle المتوافق مع Kotlin على الإصدار 1.4.31 من المكوّن الإضافي Kotlin Gradle. (aosp/1661058، b/181156413)

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

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

الإصدار 2.3.4

الإصدار 2.3.4

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

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

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

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

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

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

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

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

الإصدار 2.3.3

الإصدار 2.3.3

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

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

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

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

الإصدار 2.3.2

الإصدار 2.3.2

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

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

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

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

الإصدار 2.3.1

الإصدار 2.3.1

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

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

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

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

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

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

التغييرات في التبعية

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

الإصدار 2.3.0

الإصدار 2.3.0

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

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

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

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

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

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

الإصدار 2.3.0-rc01

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

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

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

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

الإصدار 2.3.0-beta01

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

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

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

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

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

الإصدار 2.3.0-alpha06

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

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha05

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha04

18 آذار (مارس) 2020

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

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

  • تمت إضافة دعم لأنشطة وحدة الميزات ووجهات الأجزاء في Navigation Kotlin DSL. (b/148969800)

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

  • لم تعُد الفئة DynamicExtras تستخدم نمطًا أداة إنشاء ويمكن إنشاؤها مباشرةً. (aosp/1253671)
  • تستخدم DynamicActivityNavigator الآن Context في الدالة الإنشائية بدلاً من Activity. (aosp/1250252)

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

  • لم يعد NavigationUI يتجاهل التصنيفات الفارغة (أي الوجهة التي تتضمن android:label=””)، والآن يضبط العنوان على سلسلة فارغة بشكلٍ صحيح. (b/148679860)

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

  • تعتمد عناصر "الميزات الديناميكية للتنقل" الآن على إصدار "1.6.5" الأساسي في Play. (b/149556401)

الإصدار 2.3.0-alpha03

4 آذار (مارس) 2020

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

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

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

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

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

التغييرات في التبعية

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

التغييرات في التبعية

الإصدار 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: تم تعديل قواعد ProGuard navigation-ui في DrawerArrowDrawable لضمان أن android.enableJetifier=true ليس مطلوبًا. (b/147610424)
  • من التنقل 2.2.1: تحتوي وحدة navigation-common-ktx الآن على اسم فريد لحزمة البيان بدلاً من مشاركة اسم حزمة البيان نفسه مثل navigation-runtime-ktx. (aosp/1141947)

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

الإصدار 2.2.2

الإصدار 2.2.2

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

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

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

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

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

الإصدار 2.2.1

الإصدار 2.2.1

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

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

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

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

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

الإصدار 2.2.0

الإصدار 2.2.0

22 كانون الثاني (يناير) 2020

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

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

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

الإصدار 2.2.0-rc04

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

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

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

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

الإصدار 2.2.0-rc03

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

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

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

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

التغييرات في التبعية

  • يعتمد التنقّل الآن على "رحلة المستخدِم" 2.2.0-rc03 و"حفظ النموذج على مراحل النشاط" 1.0.0-rc03 و"النشاط 1.1.0-rc03" و"الجزء 1.2.0-rc03" عندما يكون ذلك مناسبًا.

الإصدار 2.2.0-rc02

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

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

التغييرات في التبعية

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

الإصدار 2.2.0-rc01

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

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

الإصدار 2.2.0-beta01

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

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

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

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

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

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

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

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

الإصدار 2.2.0-alpha03

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

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

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

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

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

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

الإصدار 2.2.0-alpha02

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

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

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

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

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

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

الإصدار 2.2.0-alpha01

7 آب (أغسطس) 2019

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

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

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

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

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

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

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

الإصدار

الإصدار

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

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

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

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

الإصدار 2.1.0-rc01

7 آب (أغسطس) 2019

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

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

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

الإصدار 2.1.0-beta02

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

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

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

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

الإصدار 2.1.0-beta01

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

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

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

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

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

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

الإصدار 2.1.0-alpha06

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

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

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

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

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

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

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

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

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

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

الإصدار 2.1.0-alpha05

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

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

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

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

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

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

الإصدار 2.1.0-alpha04

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

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

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

  • يلتزم NavHostFragment بشكل صحيح بـ app:defaultNavHost عند اعتراض أحداث زر الرجوع للنظام، ما يؤدي إلى إصلاح تراجع في التنقل 2.1.0-alpha03. b/132077777
  • يعالج تطبيق DialogFragmentNavigator الآن العمليتَين popBackStack() وnavigateUp() بشكل صحيح. b/132576764
  • تم إصلاح مشكلة IllegalStateException: unknown destination during restore عند التنقل المتكرّر بين الرسوم البيانية المدمجة. b/131733658

الإصدار 2.1.0-alpha03

7 أيار (مايو) 2019

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

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

  • يواصل NavHostFragment اعتراض زر "الرجوع" للنظام على الرغم من استخدام app:defaultNavHost="false" b/132077777.

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

  • يمكنك الآن إنشاء <dialog> وجهة تعرض DialogFragment عند إجراء navigate لها. يتيح NavHostFragment وجهات مربّعات الحوار تلقائيًا. b/80267254
  • بالإضافة إلى طلب navigate باستخدام معرّف مورد أو NavDirections، يمكنك الآن التنقّل عبر Uri، الذي يستخدم <deepLink> الذي أضفته إلى وجهة للانتقال إلى الوجهة الصحيحة. b/110412864

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

  • تم تسريع الرسوم المتحركة الافتراضية التي تقدمها NavigationUI من 400 ملي ثانية إلى 220 ملي ثانية لمطابقة سرعة الرسوم المتحركة الافتراضية للأنشطة والأجزاء. b/130055522

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

  • تم إيقاف طريقة createFragmentNavigator() في NavHostFragment نهائيًا وتم نقل وظائفها إلى طريقة onCreateNavController() الجديدة لتوضيح أنّ هذه هي نقطة الدخول الصحيحة لإضافة المستكشفين المخصّصين عند التصنيف NavHostFragment. b/122802849
  • تمت إضافة طريقة hasDeepLink() إلى NavDestination للسماح لك بالتحقّق مما إذا كان يمكن التعامل مع Uri معيّن من خلال تلك الوجهة، أو أي وجهة في الرسم البياني للتنقّل في حال استخدام NavGraph. b/117437718

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

  • تم تمرير الوسيطات التلقائية الآن بشكل صحيح إلى مثيلين (OnDestinationChangedListener). b/130630686
  • يعترض NavHostFragment الآن أحداث الرجوع للنظام باستخدام OnBackPressedDispatcher، ما يؤدي إلى إصلاح مشكلة عند الانتقال المشروط في طرق مراحل نشاط "الأجزاء" عند الرجوع إلى جزء. b/111598096
  • بالنسبة إلى الوسيطات الآمنة، يتم الآن استنتاج android:defaultValue=”@null” باستخدام app:argType غير محدّدة بشكل صحيح على أنها وسيطة string. b/129629192

الإصدار 2.1.0-alpha02

3 نيسان (أبريل) 2019

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

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

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

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

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

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

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

الإصدار 2.1.0-alpha01

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

هذا هو الإصدار الأولي الأول من ميزة التنقّل 2.1.0.

التغييرات في التبعية

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

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

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

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

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

الإصدار 2.0.0

الإصدار 2.0.0

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

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

الإصدار 2.0.0-rc02

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

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

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

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

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

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

dependencies {
    def nav_version = "1.0.0"

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

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

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

الإصدار 1.0.0

الإصدار 1.0.0

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

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

الإصدار 1.0.0-rc02

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

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

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

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

الإصدار 1.0.0-rc01

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

وهو مرشح للإصدار الثابت 1.0.0 من ميزة التنقل. هذا النمط يحتوي الإصدار على إصلاح واحد للخطأ.

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

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

الإصدار 1.0.0-beta02

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

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

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

  • يمكنك الآن استخدام 0 كـ android:defaultValue في reference وسيطة. b/124248602

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

  • تُعطى الآن الأولوية للمطابقات التامة لصفحات معيّنة في التطبيق على الروابط لصفحات معيّنة في التطبيق باستخدام .* أو تطابقات الوسيطة. b/123969518

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

  • يعرض كل من popBackStack() وnavigateUp الآن false بشكل صحيح عند الفرقعة الوجهة الأخيرة على الحزمة الخلفية، وإصلاح الانحدار المقدم في 1.0.0-beta01. b/123933201
  • تضبط ميزة التنقّل الآن ClassLoader بشكل صحيح أثناء استعادة. حالة المثيل المحفوظ، مما يؤدي إلى تجنب المشكلات عند استخدام الفئات المخصصة في تم حفظ حالة Navigator أو في الوسيطات التي تم إرسالها إلى NavDestination. b/123893858
  • أنشأت Safe Args فئات NavArgs لم تعد تتعطل عند استعادة الوسيطة Parcelable[] من حالة المثيل المحفوظ. b/123963545
  • تُظهر أداة Safe Args الآن بشكل صحيح فئات Kotlin غير الضرورية التي تم إنشاؤها. b/124120883

الإصدار 1.0.0-beta01

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

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

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

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

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

  • يمكن الآن استخدام Safe Args في المكتبة ووحدات الميزات في جميع الإصدارات. المكوّن الإضافي لنظام Gradle المتوافق مع Android. b/121304903
  • تم إصلاح الانحدار الذي يؤدي إلى تنفيذ عملية popBackStack() واحدة فصل جميع نسخ الوجهة من أعلى الحزمة الخلفية، بدلاً من وجهة واحدة فقط في كل مرة. b/123552990
  • تم إصلاح مشكلة عدم مزامنة حالة "FragmentNavigator" مع حالة NavController، ما يؤدي إلى ظهور IllegalStateException عندما محاولة استعادة المكدس الخلفي. b/123803044
  • تم إصلاح مشكلة عدم التعامل مع سهم الرجوع الذي تمت معالجته في NavigationUI عند استخدام ProGuard مع إخفاء مفاتيح فك التشفير. b/123449431
  • أصبح الرمز الذي تنشئه أداة Safe Args يعالج بشكل صحيح الآن عند استخدام app:argType. تشير إلى فئة داخلية ثابتة بالتنسيق .OuterClass$InnerClass. b/123736741
  • يعالج رمز Java الذي تم إنشاؤه بواسطة Safe Args الآن الإجراءات العامة بشكل صحيح. ووجهات متداخلة بعمق. b/123347762

الإصدار 1.0.0-alpha11

23 كانون الثاني (يناير) 2019

هذا إصدار إصلاح عاجل من 1.0.0-alpha10 يعمل على إصلاح مشكلة "الوسيطات الآمنة".

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

  • إصلاح مشكلة تعذُّر استيراد فئة "الاتجاهات" من خلال أداة "الوسيطات الآمنة" المرتبطة بالإجراءات العامة. b/123307342

الإصدار 1.0.0-alpha10

23 كانون الثاني (يناير) 2019

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

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

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha09

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

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

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

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

  • لن تعود "MenuItem" التي تستخدم "menuCategory="secondary"" تبرز الجهة الخلفية. تكديس عند استخدامه مع طرق NavigationUI. b/120104424
  • يتيح لك AppBarConfiguration الآن إعداد إجراء احتياطي OnNavigateUpListener المثيل الذي سيتم استدعاؤه عند إرجاع navController.navigateUp() false b/79993862 b/120690961

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

  • عند استخدام <argument> مع argType="reference"، لن يعود التنقل يحلّل المرجع، وبدلاً من ذلك يقدّم معرّف المورد الأولي نفسه. b/111736515
  • onNavDestinationSelected() يعود الآن إلى وجهة بداية الرسم البياني للتنقل افتراضيًا، لجعلها متسقة مع طرق setup. إضافة menuCategory="secondary" إلى MenuItem لتجنُّب إزالة الحزمة الخلفية. aosp/852869
  • يتم الآن استخدام طريقة fromBundle() لصف Args تم إنشاؤه Bundle بدلاً من قيمة Bundle قابلة للقيم الفارغة aosp/845616

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

  • تم تحليل الوسيطات الآن بشكل صحيح من الروابط المؤدية إلى صفحات في التطبيق على أنّها argType الصحيحة. بدلاً من أن تكون دائمًا كسلاسل b/110273284
  • يعمل التنقل الآن على تصدير موارده العامة بشكل صحيح b/121059552
  • إنّ أداة Safe Args متوافقة الآن مع المكوّن الإضافي Android Gradle Plugin 3.4 Canary 4 والإصدارات الأحدث b/119662045

الإصدار 1.0.0-alpha08

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

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha07

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha06

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

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

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

  • تغيير قد يؤدي إلى عطل: تستخدم طريقة المستكشف navigate() الآن مَعلمة Navigator.Extras.
  • طريقة getGraph() في NavController هي الآن NonNull b/112243286

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

  • لم تعُد ميزة "NavigationUI.setupWithNavController()" تسريب على المشاهدات في حال استخدامها مع مشاهدات من وجهات فردية b/111961977.
  • يتم الآن تسمية المستكشف onSaveState() مرة واحدة فقط b/112627079

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

  • تعمل فئات الاتجاهات الخاصة بوجهة التنقل الآن على توسيع فئة الاتجاهات الرئيسية إذا كانت موجودة b/79871405
  • تحتوي فئات الاتجاهات والوسيطات الآن على تنفيذ toString() مفيد b/111843389

الإصدار 1.0.0-alpha05

10 آب (أغسطس) 2018

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

  • إصلاح الخطأ الذي يؤدي إلى سلوك غير صحيح في تسلسل استدعاء الدوال البرمجية b/111907708
  • إصلاح خطأ في equals() من صفوف Args التي تم إنشاؤها. b/111450897
  • إصلاح تعذُّر الإصدار في "الوسيطات الآمنة" b/109409713
  • إصلاح إحالة ناجحة من معرّفات الموارد إلى أسماء JavaScript b/111602491
  • إصلاح رسائل الخطأ الخاصة بقابلية القيم الفارغة في المكوّن الإضافي "الوسيطات الآمنة"
  • أضِف التعليقات التوضيحية التي لا تشير إلى إمكانية قبول القيم الفارغة.

الإصدار 1.0.0-alpha04

July 19, 2018

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

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

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

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

  • تغيير قد يؤدي إلى عطل: تم تغيير app:type إلى app:argType لتجنُّب التضارب مع المكتبات الأخرى مثل ConstraintLayout 2.0.0-alpha1 b/111110548
  • يمكن الآن النقر على رسائل الخطأ الواردة من "الوسيطات الآمنة" b/111534438.
  • تؤكد فئات الوسيطات الآن أن سمات NonNull ليست فارغة في الواقع b/111451769
  • تمت إضافة تعليقات NonNull توضيحية إضافية إلى الفئات التي تم إنشاؤها بواسطة NavDirections وAgs b/111455455 b/111455456

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

  • تم إصلاح مشكلة زر الرجوع في النظام بعد الربط لموضع معيّن بوجهة مجزأة b/111515685

الإصدار 1.0.0-alpha03

12 تموز (يوليو) 2018

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

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

  • تمت إضافة طريقة NavigationUI.setupWithNavController لشريط الأدوات b/109868820.
  • تمت إضافة طريقة NavigationUI.setupWithNavController لـ CollapsingToolbarLayout b/110887183.
  • الآن تُرجع POPBackStack() القيمة false عندما تكون الحزمة الخلفية فارغة أو عندما لا يكون معرّف الوجهة المحدد في الحزمة الخلفية b/110893637.
  • يتجاهل الآن FragmentNavigator عمليات التنقل بعد حفظ FragmentManager الحالة، مع تجنب استثناءات "لا يمكن تنفيذ هذا الإجراء بعد onSaveInstanceState" b/110987825

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

  • كسر التغيير: سيتم استبدال الأحرف غير الأبجدية الرقمية في الإجراءات وأسماء الوسيطات بغلاف الجمل في أسماء طرق NavDirections المعنية.
    • مثلاً: سيصبح DemoController.index setDemoControllerIndex b/79995048.
    • مثلاً: سيصبح action_show_settings actionShowSettings b/79642240.
  • كسر التغيير: تُعتبر الوسيطات الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في وسيطات السلسلة والنقاط القابلة للفصل، أضِف app:nullable="true" b/79642307.
  • يمكنك الآن استخدام app:type="long" مع defaultValues على شكل "123L" b/79563966.
  • أصبحت الوسيطات القابلة للتعديل متاحة الآن باستخدام اسم فئة مؤهل بالكامل للسمة app:type. إنّ القيمة التلقائية الوحيدة المسموح بها هي "@null" b/79563966.
  • تنفِّذ فئات الوسيطات الآن equals() وhashCode() b/79642246
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553.
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على المشاريع المميّزة b/110011752.

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

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

الإصدار 1.0.0-alpha02

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

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

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

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

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

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

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

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

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

  • تم إصلاح IllegalArgumentException عند الرجوع إلى رسم بياني مدمج. b/80453447

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

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

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

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

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

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

الإصدار 1.0.0-alpha01

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

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