التنقّل

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

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

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

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

Groovy

dependencies {
  def nav_version = "2.5.3"

  // 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.5.3"

  // 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.5"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.7.5"
        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.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 فقط عندما كان Intent الوارد يتضمن علامة FLAG_ACTIVITY_NEW_TASK. (I73c7f)

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

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

الإصدار 2.7.4

الإصدار 2.7.4

4 تشرين الأول (أكتوبر) 2023

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

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

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

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

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

الإصدار 2.7.3

الإصدار 2.7.3

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

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

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

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

الإصدار 2.7.2

الإصدار 2.7.2

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

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

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

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

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

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

الإصدار 2.7.1

الإصدار 2.7.1

23 آب (أغسطس) 2023

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

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

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

الإصدار 2.7.0

الإصدار 2.7.0

9 آب (أغسطس) 2023

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

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

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

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

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

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

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

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

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

  • يعتمد التنقّل الآن على ميزة "إنشاء 1.5.0" بدءًا من 1.1.0.

الإصدار 2.7.0-rc01

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

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

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

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

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

  • هناك مشكلة في الإصدار 2.6.x من التنقل، والتي تؤدي إلى حدوث IllegalArgumentException عند التنقل باستخدام نافذة منبثقةTo. من الممكن تجنُّب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على غرار النصائح المُقترَحة هنا. (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 alpha (0.31.2-alpha). (b/197140101)

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

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

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

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

الإصدار 2.6.0

الإصدار 2.6.0

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

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

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

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

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

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

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

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

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

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

الإصدار 2.6.0-rc02

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

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

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

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

الإصدار 2.6.0-rc01

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

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

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

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

الإصدار 2.6.0-beta01

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

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

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

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

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

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

الإصدار 2.6.0-alpha09

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

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

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

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

الإصدار 2.6.0-alpha08

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

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

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

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

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

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

الإصدار 2.6.0-alpha06

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

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

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

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

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

  • تمت الآن إضافة تعليقات توضيحية إلى كل عمليات التحميل الزائدة من 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 سينتظر الآن حتى يتم نقل DialogFragment Lifecycle إلى DESTROYED قبل الانتقال إلى DESTROYED نفسه. (I53ee5، b/261213893)

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

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

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

  • لن يتم تنفيذ حالة المستكشف الآن عند استخدام واجهات برمجة تطبيقات 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

تشرين الثاني (نوفمبر) 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 من مكوّن Android Gradle الإضافي. وهذا يعني أنها متوافقة الآن فقط مع الإصدارات 7.3.0 والإصدارات الأحدث. (I47e49)

الإصدار 2.6.0-alpha03

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

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

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

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

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

الإصدار 2.6.0-alpha02

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

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

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

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

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

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

الإصدار 2.6.0-alpha01

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

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

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

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

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

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

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

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

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

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

الإصدار 2.5

الإصدار 2.5.3

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

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

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

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

الإصدار 2.5.2

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

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

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

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

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

الإصدار 2.5.1

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

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

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

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

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

الإصدار 2.5.0

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

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

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

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

عمليات التنقل الآمنة

  • أجرى Navigation Safe Args ترقية لتبعية Android Gradle Plugin للاعتماد على 7.0.4، ما أدّى إلى خفض التوافق مع إصدارات AGP قبل 7.0.
  • تمت إتاحة استخدام سمة Build.grale في مساحة الاسم بدلاً من 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)
  • تستخدم ميزة التنقل الآمن في التنقل الآن PathSensitivity.RELATIVE في ArgumentsGenerationTask للسماح بإعادة تحديد موقع ذاكرة التخزين المؤقت. وهذا يعني أنّه يمكن الآن إعادة استخدام إدخال ذاكرة التخزين المؤقت من إصدار CI إلى إصدار محلي. (I5f67c، b/173420454)
  • تم تعديل قاعدة UnrememberedGetBackStackEntryDetector Lint لضمان أنّ الاستدعاء remember الذي تحيط بالاستدعاء getBackStackEntry() يتم أيضًا تمريره في عنصر NavBackStackEntry كمفتاح.(Ib7081، b/227382831)

الإصدار 2.5.0-beta01

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

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

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

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

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

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

الإصدار 2.5.0-alpha04

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

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

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

  • لم يعد تطبيق "visibleEntries" في مرحلة تجريبية. (I4829f، b/225394514)

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

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

الإصدار 2.5.0-alpha03

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

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

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

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

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

  • يتيح NavDeepLinks الآن استخدام أحرف أسطر جديدة مشفّرة بشكل صحيح ومضمّنة في معرّفات الموارد المنتظمة (URI) للمسارات/الروابط لصفحات في التطبيق. (I513d1، b/217815060)
  • سيعمل CreationExtras الآن بشكل صحيح عند استخدامه مع NavBackStackEntries لإنشاء نماذج عرض. (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)

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

  • تعتمد Safe Args الآن على الإصدار 7.0.4 من مكوّن Android Gradle الإضافي. يعني هذا أنّ نهج التنقل الآمن لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنّها أصبحت متوافقة الآن مع الإصدار 7.1.0 والإصدارات الأحدث من نظام التشغيل Android Gradle Plugin. (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: تعتمد Safe Args الآن على الإصدار 7.0.4 من مكوّن Android Gradle الإضافي. يعني هذا أنّ "التنقل الآمن" لن تكون متوافقة بعد الآن مع إصدارات "استوديو Android" التي تسبق الإصدار 7.0، ولكنّها أصبحت متوافقة الآن مع المكوّن الإضافي لنظام التشغيل Android Gradle Plugin 7.1.0 والإصدارات الأحدث. (I41c88 وb/213086135 وb/207670704)

الإصدار 2.4.0

الإصدار 2.4.0

26 يناير 2022

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

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

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

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

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

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

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

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

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

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

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

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

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

  • تم إيقاف سمة popUpTo Kotlin على Kotlin DSL لصالح popUpToId.
  • تم إيقاف واجهة برمجة التطبيقات getStartDestination() لصالح getStartDestinationId().

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

إنشاء التنقل

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • تم إصلاحه في التنقل 2.5.0-alpha01: سيتعذر الوصول إلى ViewModel التي تم إنشاؤها عبر by navGraphViewModels() من onCreate() للجزء مع IllegalStateException. (b/213504272)
  • تم إصلاحه في التنقل 2.5.0-alpha01: Safe Args 2.4.0 غير متوافق مع المكوِّن الإضافي Android Gradle الإضافي 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 مع مسار كبديل لاستخدام معرّف، وذلك بهدف دعم استخدام Kotlin DSL بشكلٍ أفضل مع الأجزاء. (I901e3، b/201446416)

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

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

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

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

الإصدار 2.4.0-alpha10

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

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

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

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

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

  • عند استخدام ميزة "إنشاء التنقل"، ستكون قيمة الرسومات البيانية للتنقل 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 مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء الرسم البياني للتنقُّل بطريقة آلية، مثل استخدام الرسم البياني للغة Kotlin DSL. (I78440، b/196871885)

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

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

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

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

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

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

الإصدار 2.4.0-alpha07

18 آب (أغسطس) 2021

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

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

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

الإصدار 2.4.0-alpha06

4 آب (أغسطس) 2021

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha05

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

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

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

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

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

  • تم إصلاح NoSuchElementException عند استدعاء popBackStack() من داخل LifecycleObserver مرفقًا بـ NavBackStackEntry بسبب تعديلات المستخدم على حالة 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 تتعطل عند استخدامها مع وحدات الميزات الديناميكية والإصدار 7.0 من AGP أو الإصدارات الأحدث. (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() التي يمكن استخدامها للمساعدة في تنفيذ واجهة مستخدم التنقل المخصصة. findDestination() هي دالة إضافة على NavGraph ستحدد وجهة ضمن الرسم البياني. getHierarchy() هي دالة على NavDestination يمكن استخدامها للتحقق مما إذا كانت وجهة معيّنة ضمن التسلسل الهرمي لأخرى.(I2932f، b/188183365)

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

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

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

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

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha01

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • تم إيقاف سمة popUpTo kotlin على Kotlin DSL لصالح popUpToId. (I59c73، b/172823546)
  • تم إيقاف واجهة برمجة التطبيقات getStartDestination() لصالح getStartDestinationId(). (I0887f، b/172823546)

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

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

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

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

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

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

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

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

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

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

إنشاء بيانات توافق

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

الإصدار 1.0.0-alpha07

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

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

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

الإصدار 1.0.0-alpha06

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

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

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

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

الإصدار 1.0.0-alpha05

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

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

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

الإصدار 1.0.0-alpha04

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

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

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

الإصدار 1.0.0-alpha03

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

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

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

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

الإصدار 1.0.0-alpha02

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

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

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

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

الإصدار 1.0.0-alpha01

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

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

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

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

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

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

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

الإصدار 2.3.5

الإصدار 2.3.5

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

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

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

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

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

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

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

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

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

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

الإصدار 2.3.4

الإصدار 2.3.4

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

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

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

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

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

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

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

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

الإصدار 2.3.3

الإصدار 2.3.3

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

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

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

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

الإصدار 2.3.2

الإصدار 2.3.2

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

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

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

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

الإصدار 2.3.1

الإصدار 2.3.1

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

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

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

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

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

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

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

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

الإصدار 2.3.0

الإصدار 2.3.0

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

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

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

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

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

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

الإصدار 2.3.0-rc01

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

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

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

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

الإصدار 2.3.0-beta01

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

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

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

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

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

الإصدار 2.3.0-alpha06

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

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha05

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha04

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

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

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

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

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

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

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

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

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

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

الإصدار 2.3.0-alpha03

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

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

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

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

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

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

التغييرات التي تطرأ على التبعية

  • أعاد التنقل اعتماده على 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، بالإضافة إلى توفير الوسيطات المستخدمة لبدء تلك الوجهة.
  • دمج الملف المحفوظ في نموذج دورة الحياة: أصبح "SavedStateViewModelFactory" هو الإعداد التلقائي المستخدَم الآن عند استخدام الدالة by navGraphViewModels() أو الدالة الإنشائية ViewModelProvider مع دالة ViewModelStoreOwner التي يتم عرضها من خلال NavController.getBackStackEntry() أو NavController.getViewModelStoreOwner().
  • دعم مَعلمات طلب البحث للروابط التي تؤدي إلى صفحات في التطبيق: أصبحت الروابط لصفحات في التطبيق التي تتضمّن مَعلمات طلب البحث متوافقة الآن مع مَعلمات طلب البحث المُعاد ترتيبها. وأصبحت الوسيطات التي تحتوي على قيمة تلقائية أو قابلة للقيم فارغة الآن اختيارية عند مطابقة الروابط لصفحات في التطبيق.
  • دعم محسَّن للصور المتحركة: يستخدم NavHostFragment الآن FragmentContainerView من Fragment 1.2.0، لإصلاح مشاكل ترتيب z للصور المتحركة وإدخال التفاصيل داخل النوافذ الذي يتحوّل إلى Fragment.

الإصدار 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)
  • يتجنّب NavInflater الآن الاتصال برقم getResourceName() بدون داعٍ، ما يؤدي إلى تسريع وقت التضخم بنسبة تصل إلى %40. (b/139213740)

الإصدار 2.2.0-alpha01

7 آب (أغسطس) 2019

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

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

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

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

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

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

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

الإصدار 2.1.0

الإصدار 2.1.0

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

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

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

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

الإصدار 2.1.0-rc01

7 آب (أغسطس) 2019

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

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

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

الإصدار 2.1.0-beta02

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

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

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

  • تمت إزالة التبعية غير المقصودة لجاكوكو التي تم تقديمها في العام 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() API على NavController لاعتماد طريقة getViewModelStoreOwner() الجديدة التي تعرض ViewModelStoreOwner. (aosp/987010)
  • تم تعميم تنفيذ وجهات النوافذ العائمة، مثل وجهات <dialog>، في واجهة العلامة FloatingWindow التي تستخدمها الآن جميع وجهات <dialog>. تتجاهل الآن طرق TablesUI للتفاعل مع شريط التطبيق العلوي وجهات 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". يمكن الاطّلاع هنا على الالتزامات المضمَّنة في هذا الإصدار.

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

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

الإصدار 2.0.0

الإصدار 2.0.0

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

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

الإصدار 2.0.0-rc02

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

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

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

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

التبعيات السابقة لنظام التشغيل AndroidX

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

dependencies {
    def nav_version = "1.0.0"

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

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

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

الإصدار 1.0.0

الإصدار 1.0.0

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

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

الإصدار 1.0.0-rc02

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

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

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

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

الإصدار 1.0.0-rc01

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

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

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

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

الإصدار 1.0.0-beta02

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

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

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

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

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

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

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

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

الإصدار 1.0.0-beta01

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

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

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

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

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

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

الإصدار 1.0.0-alpha11

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

هذا إصدار إصلاح عاجل من 1.0.0-alpha10 يعمل على إصلاح مشكلة متعلقة بـ Safe Args.

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

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

الإصدار 1.0.0-alpha10

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha09

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

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

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

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

  • لن تؤدي MenuItems التي تتضمن menuCategory="secondary" إلى عرض المكدس الخلفي عند استخدامها مع طرق NavigationUI. b/120104424
  • يتيح لك AppBarConfiguration الآن ضبط مثيل OnNavigateUpListener الاحتياطي الذي يتم طلبه عند عودة navController.navigateUp() false. b/79993862 b/120690961

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

  • عند استخدام <argument> مع argType="reference"، لن تعمل ميزة التنقّل على تحليل المرجع، بل توفّر معرّف المورد الأوّلي نفسه. b/111736515
  • onNavDestinationSelected() تعود الآن تلقائيًا إلى وجهة البداية للرسم البياني للتنقل، مما يجعلها متسقة مع طرق setup. يجب إضافة menuCategory="secondary" إلى MenuItem لتجنُّب إيقاف الحزمة مرة أخرى. aosp/852869
  • fromBundle() طرق إنشاء Args الصفوف تأخذ الآن قيمة غير فارغة Bundle بدلاً من Bundle aosp/845616

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

  • يتم الآن تحليل الوسيطات بشكلٍ صحيح من الروابط لصفحات في التطبيق على أنها argType الصحيحة بدلاً من أن تكون دائمًا كسلاسل b/110273284
  • يصدّر التنقل الآن موارده العامة بشكل صحيح b/121059552
  • Safe Args متوافقة الآن مع المكوّن الإضافي Android Gradle 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
  • تم final aosp/835681 العديد من الفئات والطرق غير المخصصة للفئات الفرعية، مثل NavOptions وNavInflater وNavDeepLinkBuilder وAppBarConfiguration .
  • تمت إزالة طريقة NavHostFragment.setGraph() المتوقّفة نهائيًا aosp/835684
  • لقد أزلنا طريقة NavigationUI.navigateUp(DrawerLayout, NavController) المتوقّفة نهائيًا. aosp/835684
  • تم نقل إنشاء الجزء إلى FragmentNavigator، لتسهيل تفويض إنشاء جزء إلى FragmentFactory. b/119054429
  • لم تعُد الدالة الإنشائية لـ NavGraphNavigator تستخدم Context aosp/835340
  • أصبح NavigatorProvider فئة الآن بدلاً من واجهة. لم يتم تغيير وظائف NavigatorProvider التي يعرضها getNavigatorProvider(). aosp/830660
  • تمّت إزالة NavDestination.navigate(). يمكنك الاتصال بـ navigate() على Navigator بدلاً من ذلك. aosp/830663
  • إعادة هيكلية كبيرة لـ Navigator، ما يؤدّي إلى إلغاء الحاجة إلى OnNavigatorNavigatedListener وبدلاً من ذلك جعل navigate يعيد NavDestination الذي تم الانتقال إليه.
  • لم يعُد بإمكان Navigator مثيل إرسال أحداث منبثقة إلى NavController. ننصحك باستخدام OnBackPressedCallback لاعتراض ضغطات زر الرجوع والاتصال بـ navController.popBackStack(). aosp/833716

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

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

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

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

الإصدار 1.0.0-alpha07

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha06

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

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

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

  • تغيير مهم: تأخذ طريقة المستكشف navigate() الآن المعلَمة Navigator.Extras.
  • طريقة getGraph() في NavController أصبحت الآن NonNull b/112243286

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

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

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

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

الإصدار 1.0.0-alpha05

10 آب (أغسطس) 2018

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

  • إصلاح الخطأ الذي يتسبب في حدوث سلوك غير صحيح لحزمة Backstack. b/111907708
  • إصلاح خطأ في equals() بفئات Args التي تم إنشاؤها. b/111450897
  • يجب إصلاح إخفاق الإصدار في Safe Args. b/109409713
  • إصلاح إحالة ناجحة من معرّفات الموارد إلى أسماء JavaScript b/111602491
  • إصلاح رسائل الخطأ بشأن قابلية القيم الفارغة في المكوِّن الإضافي Safe Args
  • أضِف تعليقات توضيحية غير متوفّرة حول القيم الفارغة.

الإصدار 1.0.0-alpha04

July 19, 2018

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

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

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

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

  • تغيير مهم: تم تغيير app:type إلى app:argType لتجنُّب التعارضات مع المكتبات الأخرى مثل ConstraintLayout 2.0.0-alpha1 b/111110548
  • يمكن الآن النقر على رسائل الخطأ الواردة من Safe Args b/111534438
  • تؤكد فئات Args الآن أن سمات NonNull ليست فارغة b/111451769
  • تمت إضافة تعليقات NonNull التوضيحية الإضافية إلى الفئات التي تم إنشاؤها بواسطة NavDirections وARgs b/111455455 b/111455456.

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

  • تم إصلاح مشكلة زر الرجوع في النظام بعد الربط بصفحة معيّنة بوجهة جزء b/111515685

الإصدار 1.0.0-alpha03

12 تموز (يوليو) 2018

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

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

  • تمت إضافة طريقة NavigationUI.setupWithNavController لشريط الأدوات b/109868820
  • تمت إضافة طريقة NavigationUI.setupWithNavController لـ CollapsingToolbarLayout b/110887183
  • تعرض PopBackStack() الآن القيمة "false" عندما يكون المكدس الخلفي فارغًا أو عندما لا يكون رقم تعريف الوجهة المحدد في الحزمة الخلفية من b/110893637.
  • يتجاهل FragmentNavigator الآن عمليات التنقل بعد حفظ FragmentManager للحالة، مع تجنب "لا يمكن تنفيذ هذا الإجراء بعد استثناءات onSaveInstanceState" b/110987825

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

  • تغيير مهم: سيتم استبدال الأحرف غير الأبجدية الرقمية في اسم الإجراء وأسماء الوسيطات بحالة الجمل في أسماء طرق NavDirections ذات الصلة.
    • على سبيل المثال، سيصبح DemoController.index setDemoControllerIndex b/79995048.
    • على سبيل المثال، سيصبح action_show_settings actionShowSettings b/79642240.
  • تغيير قد يؤدي إلى عطل: تُعتبر الوسيطات الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في السلسلة والوسيطات القابلة للفصل، أضِف app:nullable="true" b/79642307.
  • يمكنك الآن استخدام app:type="long" مع القيم التلقائية على شكل "123L" b/79563966.
  • أصبحت الوسيطات القابلة للدمج متاحة الآن، باستخدام اسم فئة مؤهل بالكامل لـ app:type. إنّ القيمة التلقائية الوحيدة المتوافقة هي "@null" b/79563966.
  • تنفِّذ صفوف Args الآن equals() وhashCode() b/79642246
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع الميزات b/110011752

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

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

الإصدار 1.0.0-alpha02

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha01

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

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