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

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

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

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

رائع

dependencies {
  def nav_version = "2.7.7"

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

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

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

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

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

Kotlin

dependencies {
  val nav_version = "2.7.7"

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

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

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

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

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

Safe Args

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

رائع

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

Kotlin

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

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

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

رائع

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

رائع

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

Kotlin

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

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

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

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

ملاحظات

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

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

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

الإصدار 2.8

الإصدار 2.8.0-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 على عمليات التنفيذ هذه.

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

تستخدم هذه الوظيفة تسلسل 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( 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 وI17b}95} وI17b}73

الإصدار 2.8.0-alpha06

3 أبريل 2024

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

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

  • بدأ دعم "العمليات الآمنه" في ميزة "إنشاء التنقل" باستخدام نهج يستند إلى تسلسل Kotlin. لم يتم الانتهاء من واجهات برمجة التطبيقات هذه وتم وضع علامة عليها بالتعليق التوضيحي ExperimentalSafeArgsApi. ستتم إزالة هذا التعليق التوضيحي عند اكتمال مساحة عرض واجهة برمجة التطبيقات بالكامل في إصدار مستقبلي. (I644e7 وI98896 وI2a1c5 وI43a51 وI836a1 وIc5eec وI39407 وI24e41 وI24e41 إذا}17}

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

  • يستخدم 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)
  • إنّ إضافة أجزاء إلى FragmentManager في FragmentNavigator بدون استخدام التنقّل لن تتسبب بعد الآن في حدوث عطل. (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)
  • لن يفكّ NavDeepLinks الوسيطات بدون داعٍ بعد الآن، ما يعني أنّه يتم الآن إرسال الوسيطات المناسبة إلى وجهتك النهائية. (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() للجزء باستخدام 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 مخصّصة. لا تتوفّر الأنواع المخصَّصة إلا عند إنشاء الرسم البياني للتنقّل آليًا، مثلاً من خلال Navigation Graph 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() للجزء عند استخدام IllegalStateException. (b/213504272)
  • تم الإصلاح في التنقل 2.5.0-alpha01: الإصدار 2.4.0 من الوسيطات الآمنة غير متوافق مع المكوّن الإضافي لنظام Gradle المتوافق مع Android 7.1.0 والإصدارات الأحدث. (b/213086135)
  • لا يؤدي الربط بموضع معين باستخدام عدة رسوم بيانية متداخلة للتنقل بشكل صحيح إلى إنشاء تسلسل استدعاء الدوال البرمجية الكامل بشكل صحيح. (b/214383060)

الإصدار 2.4.0-rc01

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-beta02

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

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

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

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

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

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

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

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

الإصدار 2.4.0-beta01

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha07

18 آب (أغسطس) 2021

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

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

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

الإصدار 2.4.0-alpha06

4 آب (أغسطس) 2021

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

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

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

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

  • عند التنقّل باستخدام الصور المتحركة (مثل Crossfade)، لن تصل الآن Lifecycle في الوجهة الجديدة إلى RESUMED إلا عند اكتمال الحركة. (If0543 وb/172112072 وb/194301889)
  • يضبط NavHost في ميزة "إنشاء التنقل" الآن الرسم البياني كجزء من المقطوعة الأولى. (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)
  • لم تعد Safe Args تتعطّل عند استخدامها مع وحدات الميزات الديناميكية وAGP 7.0 أو الإصدارات الأحدث. (I69518، وb/189966576)

مشكلة معروفة

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

الإصدار 2.4.0-alpha02

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

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

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

  • أصبحت المسارات متاحة الآن لوجهات "النشاط" و"الجزء" و"مربّع الحوار"، وكذلك في جميع صفحات 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)

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

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

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

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

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

  • تمت إضافة تعليقات توضيحية إلى طريقة setId في NavDestination في 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 على هذه عمليات التنفيذ.

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

الإصدار 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)
  • يأتي startDestination الآن قبل المسار في قائمة معلمات NavHost (Ie620e)
  • يمكنك الآن إنشاء رسم بياني باستخدام المسار كوجهة بدء خارج NavHost قابل للإنشاء. (Iceb75)

الإصدار 1.0.0-alpha01

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

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

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

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

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

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

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

الإصدار 2.3.5

الإصدار 2.3.5

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

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

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

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

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

  • تمت إضافة OnBackPressedCallbacks إلى جهة الإرسال باستخدام NavBackStackEntry لأنّ مالك النشاطSTOPPEDSTARTED
  • أصبح تحليل نطاقات الروابط المؤدية إلى صفحات في التطبيق غير حسّاس لحالة الأحرف، ما يضمن تطابق 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 باستخدام الكائن نفسه الذي تم ضبطه من قبل أمر No-op (Idf491، b/177825470)
  • تضيف أداة Safe-Args الآن تعليقات توضيحية لإيقاف التعليقات التوضيحية بالطرق الصحيحة عند استخدام JavaScript. (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
  • تعتمد أداة Safe Args الآن على الإصدار 1.1.0 من KotlinPoet، ما يتيح إصلاح المشكلة التي تتعلّق بأسماء الحِزم الطويلة جدًا. b/123654948

الإصدار 2.0.0

الإصدار 2.0.0

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

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

الإصدار 2.0.0-rc02

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

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

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

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

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

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

dependencies {
    def nav_version = "1.0.0"

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

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

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

الإصدار 1.0.0

الإصدار 1.0.0

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

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

الإصدار 1.0.0-rc02

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

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

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

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

الإصدار 1.0.0-rc01

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

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

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

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

الإصدار 1.0.0-beta02

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

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

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

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

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

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

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

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

الإصدار 1.0.0-beta01

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

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

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

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

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

  • يمكن الآن استخدام Safe Args في المكتبة ووحدات الميزات على جميع إصدارات مكوّن Android Gradle الإضافي. b/121304903
  • تم إصلاح الانحدار الذي قد يتسبب في ظهور جميع نُسخ الوجهة من أعلى الحزمة الخلفية بدلاً من طرح وجهة واحدة في كل مرة بسبب إجراء popBackStack() واحد. b/123552990
  • تم إصلاح مشكلة عدم مزامنة حالة FragmentNavigator مع حالة NavController، ما أدى إلى ظهور IllegalStateException عند محاولة استعادة حزمة الخلفية. b/123803044
  • تم إصلاح مشكلة عدم ظهور سهم الرجوع الذي تمت معالجته لـ NavigationUI عند استخدام ProGuard مع إخفاء مفاتيح فك التشفير. b/123449431
  • يتعامل الرمز الذي تنشئه أداة "الوسيطات الآمنة" الآن بشكل صحيح مع 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 التي تم إنشاؤها من خلال أداة Safe Args في Activity أو Fragment. b/122603367
  • تتيح لك أداة Safe Args الآن إنشاء رمز Kotlin من خلال تطبيق المكوّن الإضافي androidx.navigation.safeargs.kotlin. تم إنشاء رمز Kotlin خصيصًا لوحدات Kotlin فقط، باستخدام الوسيطات التلقائية والفئات غير القابلة للتغيير على نمط أداة الإنشاء الذي لا يزال متاحًا عبر المكوّن الإضافي androidx.navigation.safeargs السابق. b/110263087

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

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

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

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

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

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

الإصدار 1.0.0-alpha09

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

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

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

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

  • لن تبرز 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 من Support Library. b/120293333

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

  • تمت إعادة تسمية "OnNavigatedListener" إلى OnDestinationChangedListener b/118670572
  • تمرر OnDestinationChangedListener الآن Bundle من الوسيطات aosp/837142
  • وتمّت إزالة السمتَين app:clearTask وapp:launchDocument والطرق المرتبطة بهما. ويمكنك استخدام app:popUpTo مع جذر الرسم البياني لإزالة جميع الوجهات من الحزمة الخلفية. b/119628354
  • يستخدم ActivityNavigator.Extras الآن النمط Builder ويضيف إمكانية ضبط أي علامات Intent.FLAG_ACTIVITY_ على aosp/828140.
  • تمت إعادة تسمية "NavController.onHandleDeepLink" إلى handleDeepLink aosp/836063
  • تم إنشاء العديد من الفئات والطرق التي لا تهدف إلى التصنيف الفرعي، مثل 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
  • تتوافق أداة Safe Args مع الصفائف من جميع الأنواع المتوافقة b/111487504.
  • تتجاهل "الوسيطات الآمنة" الآن المجلدات الفرعية لأدلة الموارد b/117893516
  • تضيف Safe Args تعليقات @Override التوضيحية عند اللزوم b/117145301

الإصدار 1.0.0-alpha07

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha06

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

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

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

  • تغيير قد يؤدي إلى عطل: تستخدم طريقة المستكشف navigate() الآن مَعلمة Navigator.Extras.
  • طريقة getGraph() في NavController هي الآن NonNull b/112243286

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

  • لم تعُد ميزة "NavigationUI.setupWithNavController()" تسريب على المشاهدات في حال استخدامها مع مشاهدات من وجهات فردية b/111961977.
  • يتم الآن تسمية المستكشف onSaveState() مرة واحدة فقط b/112627079

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

  • تعمل فئات الاتجاهات الخاصة بوجهة التنقل الآن على توسيع فئة الاتجاهات الرئيسية إذا كانت موجودة b/79871405
  • تحتوي فئات الاتجاهات والوسيطات الآن على تنفيذ toString() مفيد b/111843389

الإصدار 1.0.0-alpha05

10 آب (أغسطس) 2018

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

  • إصلاح الخطأ الذي يؤدي إلى سلوك غير صحيح في تسلسل استدعاء الدوال البرمجية. b/111907708
  • إصلاح خطأ في equals() من صفوف Args التي تم إنشاؤها. b/111450897
  • إصلاح تعذُّر الإصدار في "الوسيطات الآمنة" 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 وArgs 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.