التنقّل

التنقّل هو إطار عمل للتنقّل بين "الوجهات" ضمن تطبيق Android يقدّم واجهة برمجة تطبيقات متّسقة سواء تم تنفيذ الوجهات كشرائح أو أنشطة أو مكونات أخرى.
آخر تعديل الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار التجريبي الأول
11 كانون الأول (ديسمبر) 2024 2.8.5 - - 2.9.0-alpha04

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

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

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

رائع

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

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

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

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

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

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

Kotlin

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

dependencies {
  val nav_version = "2.8.4"

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

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

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

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

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

Safe Args

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

رائع

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

Kotlin

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

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

لإنشاء رمز لغة Java مناسب لوحدات 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.9

الإصدار 2.9.0-alpha04

11 كانون الأول (ديسمبر) 2024

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

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

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

تم تحويلها إلى كائن KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

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

  • يتم إخفاء وظائف NavGraph.setStartDestination الزائدة الخاصة بتنسيق kotlin لأمان النوع من مصادر Java. (Ic640c، b/364634035)

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

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

الإصدار 2.9.0-alpha03

13 تشرين الثاني (نوفمبر) 2024

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

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

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

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

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

الإصدار 2.9.0-alpha02

30 تشرين الأول (أكتوبر) 2024

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

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

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

الإصدار 2.9.0-alpha01

16 أكتوبر 2024

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

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

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

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

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

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

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

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

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

الإصدار 2.8

الإصدار 2.8.5

11 كانون الأول (ديسمبر) 2024

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

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

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

الإصدار 2.8.4

13 تشرين الثاني (نوفمبر) 2024

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

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

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

الإصدار 2.8.3

16 أكتوبر 2024

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

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

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

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

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

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

  • سيُظهر مدقّق الأخطاء في مسار التنقّل خطأ في التحقّق من الأخطاء المخصّصة القديمة عند محاولة تشغيل مدقّق الأخطاء باستخدام Lint 16 (AGP 8.7) أو إصدار أحدث. (b/371926651)

الإصدار 2.8.2

2 أكتوبر 2024

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

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

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

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

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

الإصدار 2.8.1

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

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

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

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

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

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

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

  • تعتمد Navigation Safe Args الآن على Kotlin 1.9.24 بدلاً من Kotlin 2.X، ما يضمن عدم إجبار المطوّرين على التحديث. (a4129a)
  • يعتمد الآن رمز التنقّل "إنشاء" على رمز إنشاء 1.7.2.

الإصدار 2.8.0

4 أيلول (سبتمبر) 2024

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

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

أمان أنواع لغة Kotlin DSL للتنقّل

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

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

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

اطّلِع على مقالتنا المنشورة في مدوّنة "التنقّل والإنشاء يلتقيان بأمان النوع" للحصول على مزيد من المعلومات.

التنقّل في ميزة "الكتابة التنبؤية" للرجوع

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

العنصر القابل للتجميع لجزء التنقّل

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

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

تغييرات أخرى

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

الإصدار 2.8.0-rc01

21 آب (أغسطس) 2024

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

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

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

الإصدار 2.8.0-beta07

7 آب (أغسطس) 2024

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

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

  • بسبب b/358137294، لا تتوفّر سوى أنواع Enums المُدمجة في فئة أخرى بشكل تلقائي. ستتوفّر فئات Enumerations من المستوى الأعلى في الإصدار التالي.

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

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

الإصدار 2.8.0-beta06

24 تموز (يوليو) 2024

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

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

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

الإصدار 2.8.0-beta05

10 تموز (يوليو) 2024

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

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

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

الإصدار 2.8.0-beta04

26 حزيران (يونيو) 2024

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

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

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

الإصدار 2.8.0-beta03

12 يونيو 2024

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

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

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

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

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

الإصدار 2.8.0-beta02

29 أيار (مايو) 2024

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

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

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

الإصدار 2.8.0-beta01

14 أيار (مايو) 2024

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

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

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

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

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

الإصدار 2.8.0-alpha08

1 مايو 2024

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

Safe Args في ميزة "إنشاء التنقّل"

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

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

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

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

اطّلِع على مقالتنا المنشورة في مدوّنة Navigation Compose meet Type Safety للحصول على مزيد من المعلومات.

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

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

الإصدار 2.8.0-alpha07

17 نيسان (أبريل) 2024

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

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

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

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

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

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

الإصدار 2.8.0-alpha06

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

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

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

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

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

الإصدار 2.8.0-alpha05

20 مارس 2024

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

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

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

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

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

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

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

الإصدار 2.8.0-alpha04

‫6 مارس 2024

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

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

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

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

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

الإصدار 2.8.0-alpha03

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

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

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

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

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

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

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

الإصدار 2.8.0-alpha02

7 شباط (فبراير) 2024

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

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

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

الإصدار 2.8.0-alpha01

24 كانون الثاني (يناير) 2024

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

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

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

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

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

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

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

الإصدار 2.7.7

الإصدار 2.7.7

7 شباط (فبراير) 2024

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

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

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

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

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

الإصدار 2.7.6

الإصدار 2.7.6

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

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

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

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

الإصدار 2.7.5

الإصدار 2.7.5

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

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

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

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

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

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

تعديلات على التبعيات

  • يعتمد التنقّل باستخدام "المقاطع" الآن على الإصدار 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)

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

  • تم إصلاح مشكلة تؤدي إلى تعطُّل FragmentNavigator عند مقاطعة عملية تنقّل باستخدام popUpTo. (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 Lifecycle. (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 في Navigation Compose الذي كان سيؤدي إلى عدم استعادة حالة rememberSaveable للوجهات وأيّ نُسخ من SavedStateHandle يملكها ViewModel بشكلٍ صحيح بعد إنهاء العملية وإعادة إنشائها. (b/298059596، b/289436035)
  • تم إصلاح مشكلة عند عرض مربّعات حوار متعدّدة في ميزة "التنقّل والإنشاء" في الوقت نفسه، حيث تكون مربّعات الحوار التي تم حجبها جزئيًا (مثلاً، ليس مربّع الحوار الأهم) في حالة CREATED Lifecycle بدلاً من الحالة STARTED. (aosp/2728520، b/289257213)
  • تم حلّ مشكلة عند عرض مربّعات حوار متعدّدة في ميزة "التنقّل والإنشاء" في الوقت نفسه، حيث يؤدي إغلاق مربّع الحوار العلوي إلى تعليق مربّع الحوار العلوي الجديد في حالة STARTED Lifecycle بدلاً من الانتقال بشكل صحيح إلى RESUMED. (aosp/2629401، b/286371387)
  • لم تعُد Navigation Safe Args تنشئ مهمتها بشكلٍ شغوف إذا لم يتم تنفيذها فعليًا. (I0e385، b/260322841)

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

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

الإصدار 2.7.1

الإصدار 2.7.1

23 آب (أغسطس) 2023

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

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

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

الإصدار 2.7.0

الإصدار 2.7.0

9 آب (أغسطس) 2023

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

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

الصور المتحركة من "مساعد Google"

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

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

لن يتم إجراء أي تغييرات إضافية على "الرسوم المتحركة للتنقّل في المحتوى" في "مساعد التنقّل"، وسنوقف استخدامه رسميًا قريبًا، إلى جانب إرشادات حول كيفية نقل البيانات مرة أخرى إلى "أداة إنشاء التنقّل" نفسها، ولكن سيكون ذلك عكس دليل نقل البيانات بدون الحاجة إلى إجراء تغييرات أخرى على واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار تجريبي من "مساعد التنقّل" (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 من Navigation، وهي أنّه عند التنقّل باستخدام popUpTo، من الممكن أن يؤدي ذلك إلى حدوث IllegalArgumentException. من الممكن تجنُّب هذا الاستثناء من خلال إعادة هيكلة الرسم البياني، على غرار النصيحة المقترَحة هنا. (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 في ميزة "إنشاء" ضمن "التنقّل" الآن بشكلٍ صحيح مع المكالمات الخلفية للنظام حتى بعد STOPPED وRESUMED Activity. (Icb6de، b/279118447)

الإصدار 2.7.0-alpha01

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

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

الصور المتحركة من "مساعد Google"

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

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

لن يتم إجراء أي تغييرات إضافية على "الرسوم المتحركة للتنقّل في المحتوى" في "مساعد التنقّل"، وسنوقف استخدامه رسميًا قريبًا، إلى جانب إرشادات حول كيفية نقل البيانات مرة أخرى إلى "أداة إنشاء التنقّل" نفسها، ولكن سيكون ذلك عكس دليل نقل البيانات بدون الحاجة إلى إجراء تغييرات أخرى على واجهة برمجة التطبيقات إذا كنت تستخدم حاليًا أحدث إصدار تجريبي من "مساعد التنقّل" (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 إلى ظهور تحذير lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى 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 وعرضها. وهذا يعني أنّ NavBackStackEntry Lifecycle سينتظر الآن اكتمال التأثيرات الخاصة للدخول إلى المقطع والخروج منه قبل نقل Lifecycle.State النهائي.
  • يستخدم DialogFragmentNavigator الآن واجهات برمجة التطبيقات الخاصة بالانتقال عند التنقّل في NavBackStackEntries وعرضها. وهذا يعني أنّ NavBackStackEntry Lifecycle سينتظر الآن نقل DialogFragment Lifecycle إلى DESTROYED قبل الانتقال إلى DESTROYED نفسها.
  • يتيح لك NavHostFragment الآن استرداد NavController فور إرفاق NavHostFragment بـ FragmentManager، بدلاً من بعد onCreate() فقط.
  • يعتمد توفّر ميزة "التنقّل" لوحدات الميزات الديناميكية الآن على مكتبة "عرض الميزات في Play" الدقيقة.
  • تعتمد Navigation Safe Args الآن على الإصدار 7.3.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". وهذا يعني أنّه متوافق الآن مع الإصدار 7.3.0 والإصدارات الأحدث فقط.

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

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

الإصدار 2.6.0-rc02

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

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

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

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

الإصدار 2.6.0-rc01

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

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

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

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

الإصدار 2.6.0-beta01

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

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

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

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

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

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

الإصدار 2.6.0-alpha09

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

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

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

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

الإصدار 2.6.0-alpha08

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

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

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

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

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

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

تعديلات على التبعيات

الإصدار 2.6.0-alpha07

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

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

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

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

الإصدار 2.6.0-alpha06

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

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

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

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

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

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

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

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

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

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

الإصدار 2.6.0-alpha05

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

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

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

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

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

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

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

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

الإصدار 2.6.0-alpha04

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

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

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

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

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

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

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

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

الإصدار 2.6.0-alpha03

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

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

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

  • من التنقّل 2.5.3: لن يؤدي NavHost بعد الآن إلى ظهور NoSuchElementException عندما لا تتوفّر وجهة لإنشاء Crossfade. سيتم الآن تخطّي التركيب. (Ieb46e، b/253299416)
  • من التنقّل 2.5.3: تم إصلاح مشكلة عدم نسيان حالة ميزة "الإنشاء" المحفوظة (مثل استخدامات 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 الآن على إصدار 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 إلى ظهور تحذير lint يشير إلى أنّ الرابط لصفحة في التطبيق يحتاج إلى uri و/أو إجراء و/أو mimetype ليكون صالحًا. (I08d2f، b/154038883)

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

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

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

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

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

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

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

تغييرات أخرى

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

الإصدار 2.5.0-rc02

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

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

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

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

الإصدار 2.5.0-rc01

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

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

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

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

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

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

الإصدار 2.5.0-beta01

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

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

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

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

تعديلات على التبعيات

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

الإصدار 2.5.0-alpha04

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

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

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

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

  • يعتمد NavHost الآن على visibleEntries من NavController لتحديد الإدخالات التي سيتم إنشاؤها. وهذا يعني أنّه عند استخدام NavHost مُدمَج في NavHost، من المفترض أن يتم الآن عرض NavHost الداخلي بشكل متحرك بشكل صحيح. (I4ba2b، b/225394514)
  • يستند الآن visibleEntries StateFlow المقدَّم من NavController إلى الحد الأقصى لحالة "مرحلة النشاط" بدلاً من حالة "مرحلة النشاط" الحالية. وهذا يعني أنّه حتى إذا انخفضت دورة حياة المضيف لعنصر navController إلى ما دون "مُبدوء"، ستظل قائمة الإدخالات المرئية كما هي. (I9e2a8، b/225394514)
  • يتيح SavedStateViewFactory الآن استخدام CreationExtras حتى إذا تم إعداده باستخدام SavedStateRegistryOwner. في حال تقديم عناصر إضافية، يتم تجاهل الوسيطات التي تمّت تهيئتها. (I6c43b، b/224844583)
  • يمكن الآن لخدمة NavDeepLink تحليل عناوين URL باستخدام مَعلمة طلب بحث واحدة بدون قيمة. (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 الآن بشكل صحيح أحرف السطر الجديد المشفَّرة المضمّنة في مسارات/معرّفات الموارد المنتظمة للروابط لصفحات في التطبيق. (I513d1، b/217815060)
  • سيعمل CreationExtras الآن بشكل صحيح عند استخدامه مع NavBackStackEntries لإنشاء ViewModels. (I69161، b/217617710)
  • تتيح الآن Navigation Safe Args استخدام مساحة الاسم المحدّدة في 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 ترميز args مرتين بدون داعٍ، ما يعني أنّه يتم الآن تمرير args المناسبة إلى وجهتك النهائية. (I31b0a، b/210711399)

Safe Args

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

الإصدار 2.4.2

الإصدار 2.4.2

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

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

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

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

الإصدار 2.4.1

الإصدار 2.4.1

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

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

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

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

الإصدار 2.4.0

الإصدار 2.4.0

26 كانون الثاني (يناير) 2022

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

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

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

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

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

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

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

مسارات التنقّل ولغة Kotlin DSL

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

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

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

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

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

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

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

التنقّل في ميزة "الكتابة الذكية"

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

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

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

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

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

اطّلِع على دليل التنقّل في ميزة "إنشاء" للحصول على مزيد من المعلومات.

تجميعات خلفية متعددة

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

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

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

الإصدار 2.4.0-rc01

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

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

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

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

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

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

إصلاح الأخطاء في ميزة "التنقّل" في Compose

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

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

  • لم يعُد SafeArgs يتعطّل عند محاولة استعادة صفائف قابلة للتقسيم مخصّصة بعد إنهاء العملية. (I618e8، b/207315994)
  • تم إصلاح خلل في safe args لا يسمح للصفائف المنطقية بقيمة 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 API على NavigationUItrue حتى إذا لم تكن قد navigate() إلى رسم بياني التنقّل هذا. ويستخدم الآن المنطق نفسه الذي يستخدمه setupWithNavController داخليًا لتحديد MenuItem المرتبط بالوجهة الحالية فقط باستخدام hierarchy الوجهة. (I2b053)

الإصدار 2.4.0-beta01

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

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha10

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

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

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

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

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

  • عند إنشاء الوسيطات، تضع ميزة Safe Args الآن المَعلمات التي لا تحتوي على قيم تلقائية قبل المَعلمات التي تحتوي على قيم تلقائية. (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 مخصّصة. لا تتوفّر الأنواع المخصّصة إلا عند إنشاء رسم بياني للتنقّل آليًا، مثل استخدام Navigation Graph 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)
  • من المفترض ألا يتسبب مُنشئ java في SafeArgs في تحذيرات lint عند إنشاء فئات Args. (I1a666، b/185843837)

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

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

الإصدار 2.4.0-alpha07

18 آب (أغسطس) 2021

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

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

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

الإصدار 2.4.0-alpha06

4 آب (أغسطس) 2021

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

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

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

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

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

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

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

الإصدار 2.4.0-alpha05

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

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

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

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

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

  • تم إصلاح NoSuchElementException عند استدعاء popBackStack() من داخل LifecycleObserver مرفق بـ NavBackStackEntry بسبب التعديلات المتكررة على حالة NavController. (I64621)
  • يسمح AbstractListDetailFragment الآن بإزالة SlidingPaneLayout بالكامل من حزمة APK عندما لا يتم استخدام AbstractListDetailFragment. (I611ad)
  • تُلغي NavGraph وNavDestination الآن طريقة equals لكي يُعتبَر كائنان يتضمّنان القيم نفسها متساويين. (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()، ما يضمن أن تعمل واجهة برمجة التطبيقات هذه على النحو المتوقّع عند استهداف Android 12. (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()إزالة رمز Up بشكلٍ صحيح عند الانتقال إلى وجهة في أعلى المستوى. (I5d443، b/189868637)
  • تم إصلاح IllegalStateException عند استدعاء popBackStack() بعد إزالة الرسم البياني الجذر لـ NavController سابقًا. (I2a330، b/190265699)
  • أصبحت قواعد ProGuard الخاصة بـ by navArgs() تنطبق بشكلٍ سليم الآن عند استخدام navigation-common أو أي عناصر تعتمد عليه. (I68800، b/190082521)
  • إنّ OnDestinationChangedListener الذي يتصل navigate() في المرة الأولى التي يتلقّى فيها ردّ اتصال يتلقّى الآن ردّ اتصال ثانٍ بشكلٍ سليم مع الوجهة التي انتقَل إليها. (Ie5f9e، b/190228815)
  • لم يعُد تطبيق Safe Args يتعطّل عند استخدامه مع وحدات ميزة الديناميكية وAGP 7.0 والإصدارات الأحدث. (I69518، b/189966576)

مشكلة معروفة

  • ستتعذّر قراءة Safe Args مع ظهور خطأ 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 على هذه المراجعات.

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

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

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • تم تعديل طرق NavigationUI التي كانت تأخذ BottomNavigationView لتأخذ بدلاً من ذلك فئة Superclass التي تم تقديمها في 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() لإعلام NavController عند إغلاق مربّع حوار من خلال الضغط على زر الرجوع في النظام أو النقر خارج مربّع الحوار، ما يضمن أن تتم مزامنة حالة NavController دائمًا مع حالة المستكشف. (I2ead9)
  • لم تعُد ميزة التنقّل تعرِض ConcurrentModificationException عند استخدام التلاعب بقائمة OnDestinationChangedListeners من خلال طلب onDestinationChanged. (Ib1707، b/188860458)

  • لم يعُد تطبيق Safe Args يتعطّل عند محاولة إنشاء سمات direction في Kotlin. (Id2416، b/188564435)

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

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

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

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

الإصدار 2.4.0-alpha01

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

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

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

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

تجميعات خلفية متعددة

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

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

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

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

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

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

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

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

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

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

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

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

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

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

بالنسبة إلى المطوّرين الذين يُجريون الترقية من الإصدارات السابقة من Navigation Compose إلى Navigation Compose 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

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

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

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

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

توافق تطبيق Compose

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

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

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

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

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

الإصدار 1.0.0-alpha10

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

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

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

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

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

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

الإصدار 1.0.0-alpha09

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

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

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

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

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

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

الإصدار 1.0.0-alpha08

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

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

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

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

الإصدار 1.0.0-alpha07

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

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

تعديلات على التبعيات

الإصدار 1.0.0-alpha06

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

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

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

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

الإصدار 1.0.0-alpha05

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

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

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

الإصدار 1.0.0-alpha04

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

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

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

الإصدار 1.0.0-alpha03

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

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

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

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

الإصدار 1.0.0-alpha02

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

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

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

  • تتيح ميزة إنشاء التنقّل الآن استخدام NavOptions لاستخدام عمليات popUpTo وlaunchSingleTop (If96c3، b/171468994)
  • تمت إضافة دالة تنقّل تستخدِم مسارًا بدلاً من رقم تعريف يسمح لك بإنشاء رسوم بيانية متداخلة في لغة برمجة تشكلة التنقّل. (I1661d)
  • تأتي startDestination الآن قبل المسار في قائمة المَعلمات الخاصة بخادم التنقّل (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 بشكل صحيح عند إرسالها كجزء من معرّف الموارد المنتظم لرابط لصفحة في التطبيق. يتيح هذا الخيار استخدام القيمة الصحيحة الأوّلية بالإضافة إلى القيم الست عشرية التي تسبقها 0x. (‎#127، b/179166693)
  • تتيح لك الدالة android:defaultValue لوسيطات تحتوي على app:argType="float" الآن استخدام القيم الصحيحة التلقائية، ما يتيح لك استخدام android:defaultValue="0" بدلاً من استخدام 0.0. (‎#117، b/173766247)

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

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

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

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

الإصدار 2.3.3

الإصدار 2.3.3

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

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

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

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

الإصدار 2.3.2

الإصدار 2.3.2

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

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

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

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

الإصدار 2.3.1

الإصدار 2.3.1

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

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

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

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

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

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

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

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

الإصدار 2.3.0

الإصدار 2.3.0

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

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

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

  • دمج وحدات الميزات: تتيح لك عناصر navigation-dynamic-features-runtime وnavigation-dynamic-features-fragment الانتقال إلى الوجهات المحدّدة في وحدات الميزات، ما يؤدي تلقائيًا إلى معالجة تثبيت وحدات الميزات حسب الحاجة. اطّلِع على التنقّل باستخدام وحدات الميزات للحصول على مزيد من المعلومات.
  • اختبار التنقّل: يقدّم العنصر navigation-testing TestNavHostController يتيح لك ضبط الوجهة الحالية والتحقّق من الحزمة الخلفية بعد عمليات التنقّل. يُرجى الاطّلاع على اختبار التنقّل للحصول على مزيد من المعلومات.
  • عرض نتيجة: يتيح لك الآن الرمز NavBackStackEntry المرتبط بكل وجهة في تسلسل الاستناد إلى الخلف في التنقّل الوصول إلى SavedStateHandle مناسب لتخزين كميات صغيرة من الحالة المحفوظة التي يجب أن تكون مرتبطة بعنصر معيّن في تسلسل الاستناد إلى الخلف. اطّلِع على عرض نتيجة في الوجهة السابقة للحصول على مزيد من المعلومات.
  • توافق NavigationUI مع Openable: تم استبدال جميع استخدامات DrawerLayout في NavigationUI بواجهة Openable الأكثر عمومية التي تمت إضافتها في CustomView 1.1.0 وتنفيذها بواسطة DrawerLayout في DrawerLayout 1.1.0.
  • إتاحة نوعَي البيانات Action و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)
  • يعرِض Navigation Graph Kotlin DSL الآن defaultArguments Map للإجراءات، ما يعكس إمكانية ضبط القيم التلقائية لعناصر <action> في ملفات XML للتنقّل. (b/150345605)

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

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

تعديلات على التبعيات

الإصدار 2.3.0-alpha04

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

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

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

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

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

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

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

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

تعديلات على التبعيات

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

الإصدار 2.3.0-alpha03

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

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

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

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

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

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

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

  • تمّ إيقاف الاعتماد على Core 1.2.0 في Navigation وأصبح يعتمد الآن على Core 1.1.0 لتجنُّب إجبار المطوّرين على الانتقال إلى عنصر اعتماد أحدث عندما لا يعتمد Navigation على أي واجهات برمجة تطبيقات جديدة في Core 1.2.0.

الإصدار 2.3.0-alpha02

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

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

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

  • يتيح لك الرمز NavBackStackEntry الآن الوصول إلى SavedStateHandle مناسب لتخزين كميات صغيرة من الحالة المحفوظة التي يجب أن تكون مرتبطة بعنصر محدّد في تسلسل الاستدعاء للنشاطات السابقة. اطّلِع على عرض نتيجة للحصول على مثال على حالة استخدام. (b/79672220)

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

  • تمت إضافة طريقتَي تسهيل getCurrentBackStackEntry() وgetPreviousBackStackEntry() لتسهيل استرداد NavBackStackEntry للوجهتَين الحالية والسابقة. (b/79672220)

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

  • يُرسِل navigateUp() الآن مَعلمات الوجهة الحالية وKEY_DEEP_LINK_INTENT إلى الوجهة السابقة عند تشغيل تطبيقك في حِزمة المهام الخاصة بك. (b/147456890)

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

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

الإصدار 2.3.0-alpha01

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

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

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

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

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

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

تعديلات على التبعيات

الإصدار 2.2.2

الإصدار 2.2.2

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

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

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

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

تعديلات على التبعيات

الإصدار 2.2.1

الإصدار 2.2.1

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

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

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

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

تعديلات على التبعيات

الإصدار 2.2.0

الإصدار 2.2.0

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

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

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

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

الإصدار 2.2.0-rc04

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

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

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

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

الإصدار 2.2.0-rc03

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

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

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

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

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

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

الإصدار 2.2.0-rc02

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

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

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

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

الإصدار 2.2.0-rc01

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

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

الإصدار 2.2.0-beta01

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

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

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

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

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

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

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

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

الإصدار 2.2.0-alpha03

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

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

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

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

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

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

الإصدار 2.2.0-alpha02

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

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

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

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

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

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

الإصدار 2.2.0-alpha01

7 آب (أغسطس) 2019

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

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

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

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

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

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

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

الإصدار 2.1.0

الإصدار 2.1.0

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

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

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

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

الإصدار 2.1.0-rc01

7 آب (أغسطس) 2019

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

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

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

الإصدار 2.1.0-beta02

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

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

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

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

الإصدار 2.1.0-beta01

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

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

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

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

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

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

الإصدار 2.1.0-alpha06

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

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

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

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

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

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

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

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

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

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

الإصدار 2.1.0-alpha05

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

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

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

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

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

  • تم إصلاح مشكلة عدم صحة تسلسل الرجوع بعد التنقّل باستخدام عنوان URL. (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
  • بالنسبة إلى Safe Args، يتم الآن استنتاج أنّ android:defaultValue=”@null” مع app:argType غير محدّد هو وسيطة string بشكل صحيح. b/129629192

الإصدار 2.1.0-alpha02

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

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

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

  • يمكنك الآن إنشاء نماذج ViewModel التي يتم تحديد نطاقها على مستوى مخطّط التنقّل من خلال by navGraphViewModels() property delegate لمستخدمي 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

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

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

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

التبعيات التي تم استخدامها قبل AndroidX

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

dependencies {
    def nav_version = "1.0.0"

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

بالنسبة إلى Safe args، أضِف 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 من Navigation. يتضمّن هذا الإصدار إصلاحًا واحدًا للأخطاء.

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

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

الإصدار 1.0.0-beta02

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

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

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

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

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

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

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

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

الإصدار 1.0.0-beta01

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

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

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

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

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

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

الإصدار 1.0.0-alpha11

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

هذا إصدار سريع الإصلاح من 1.0.0-alpha10 يحلّ مشكلة في Safe Args.

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

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

الإصدار 1.0.0-alpha10

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

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

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

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

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

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

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

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

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

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

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

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

الإصدار 1.0.0-alpha09

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

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

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

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

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

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

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

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

  • يتم الآن تحليل الوسيطات بشكل صحيح من الروابط لصفحات في التطبيق على أنّها argType الصحيحة بدلاً من استخدام سلاسل رمزية دائمًا b/110273284
  • يتم الآن تصدير موارد Navigation المتاحة للجميع بشكل صحيح b/121059552
  • أصبحت حِزم Safe Args متوافقة الآن مع الإصدار 3.4 Canary 4 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" والإصدارات الأحدث b/119662045.

الإصدار 1.0.0-alpha08

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

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

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

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

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

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

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

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

Safe Args

  • تتوافق 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

Safe Args

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

الإصدار 1.0.0-alpha06

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

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

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

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

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

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

Safe Args

  • تمديد فئات "اتّجاهات" لوجهة التنقّل الآن إلى فئة "اتّجاهات" الأصل إذا كانت متوفّرة b/79871405
  • تتضمّن الآن صفتا Directions وArgs تنفيذًا مفيدًا toString() b/111843389

الإصدار 1.0.0-alpha05

10 آب (أغسطس) 2018

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

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

الإصدار 1.0.0-alpha04

July 19, 2018

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

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

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

Safe Args

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

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

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

الإصدار 1.0.0-alpha03

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

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

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

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

Safe Args

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

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

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

الإصدار 1.0.0-alpha02

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

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

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

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

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

  • تم إصلاح IllegalStateException عند استدعاء التنقّل من طرق دورة حياة "القطعة". b/79632233

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

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

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

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

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

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

  • سيُبرز NavigationUI الآن العنصر الصحيح عند استخدام رسم بياني متداخل كMenuItem. b/109675998

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

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

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

الإصدار 1.0.0-alpha01

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

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