ناوبری

ناوبری چارچوبی برای پیمایش بین «مقصدها» در یک برنامه اندرویدی است که یک API ثابت را ارائه می‌کند، خواه مقصدها به‌عنوان بخش‌ها، فعالیت‌ها یا سایر مؤلفه‌ها اجرا شوند.
آخرین به روز رسانی انتشار پایدار کاندید را آزاد کنید نسخه بتا انتشار آلفا
13 نوامبر 2024 2.8.4 - - 2.9.0-alpha03

اعلام وابستگی ها

برای افزودن وابستگی به 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"
}

کاتلین

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 به پروژه خود، classpath زیر را در فایل build.gradle سطح بالای خود قرار دهید:

شیار

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

کاتلین

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

همچنین باید یکی از دو افزونه موجود را اعمال کنید.

برای ایجاد کد زبان جاوا مناسب برای جاوا یا ماژول های ترکیبی جاوا و کاتلین، این خط را به فایل build.gradle برنامه یا ماژول خود اضافه کنید:

شیار

plugins {
  id 'androidx.navigation.safeargs'
}

کاتلین

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

از طرف دیگر، برای تولید کد Kotlin مناسب برای ماژول های فقط Kotlin اضافه کنید:

شیار

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

کاتلین

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

شما باید android.useAndroidX=true را در فایل gradle.properties خود مطابق با مهاجرت به AndroidX داشته باشید.

برای اطلاعات در مورد استفاده از پسوندهای Kotlin، به مستندات ktx مراجعه کنید.

برای اطلاعات بیشتر درباره وابستگی‌ها، به افزودن وابستگی‌های ساخت مراجعه کنید.

بازخورد

بازخورد شما به بهتر شدن Jetpack کمک می کند. اگر مسائل جدیدی کشف کردید یا ایده هایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبل از ایجاد کتابخانه جدید، به مسائل موجود در این کتابخانه نگاهی بیندازید. با کلیک کردن روی دکمه ستاره می توانید رای خود را به یک موضوع موجود اضافه کنید.

یک شماره جدید ایجاد کنید

برای اطلاعات بیشتر به مستندات ردیاب مشکل مراجعه کنید.

نسخه 2.9

نسخه 2.9.0-alpha03

13 نوامبر 2024

androidx.navigation:navigation-*:2.9.0-alpha03 منتشر شد. نسخه 2.9.0-alpha03 حاوی این commit ها است.

ویژگی های جدید

  • ایمنی نوع ناوبری اکنون از کلاس‌های مقدار به عنوان مسیر یا به عنوان نوع آرگومان مسیر پشتیبانی می‌کند. ( I9344a , b/374347483 )

رفع اشکال

  • وقتی LifecycleObserver متصل به NavBackStackEntry ، هنگامی که LifecycleOwner میزبان مانند Activity یا Fragment حالت چرخه عمر خود را تغییر می‌دهد، تغییری در پشته پشتی ایجاد می‌کند، یک ConcurrentModificationException برطرف کرد. ( Ia9494 )

نسخه 2.9.0-alpha02

30 اکتبر 2024

androidx.navigation:navigation-*:2.9.0-alpha02 منتشر شد. نسخه 2.9.0-alpha02 حاوی این commit ها است.

مشارکت خارجی

  • متد متداول جدید NavController.handleDeepLink(request: NavDeepLinkRequest) . با تشکر کنستانتین تسخوربوف! ( I3e228 )

نسخه 2.9.0-alpha01

16 اکتبر 2024

androidx.navigation:navigation-*:2.9.0-alpha01 منتشر شد. نسخه 2.9.0-alpha01 حاوی این commit ها است.

ویژگی های جدید

  • ناوبرهای سفارشی اکنون می توانند مقصد خود را به عنوان در حال پیاده سازی رابط SupportingPane علامت گذاری کنند که به NavController نشان می دهد که این مقاصد در کنار سایر مقاصد نشان داده خواهند شد. به عنوان مثال، با استفاده از این رابط، چندین مقصد را می توان به طور همزمان RESUMED . ( شناسه 5559 )
  • از Navigation 2.8.3 : بررسی‌های پرز جدید برای ماژول‌های navigation-common ، navigation-runtime و navigation-compose اضافه شد تا به شناسایی مسیرهای ایمن که به درستی با @Serializable حاشیه‌نویسی نشده‌اند کمک کند. این بررسی برای همه توابع افزونه NavGraphBuilder و NavDeepLinkBuilder اعمال می شود. ( I4a259 , I95402 , Ie601a , Id8c6e , I28bda , b/362725816 )
  • از Navigation 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 )

مسائل شناخته شده

  • در قوانین جدید پرز که در Navigation 2.8.* اضافه شده‌اند مشکلی وجود دارد که هنگام تلاش برای اجرای لینت با افزونه Android Gradle نسخه 8.4 و بالاتر، خطای Obsolete custom lint check را ایجاد می‌کند. ( b/368070326 , b/371463741 )

نسخه 2.8

نسخه 2.8.4

13 نوامبر 2024

androidx.navigation:navigation-*:2.8.4 منتشر شد. نسخه 2.8.4 حاوی این commit ها است.

ویژگی های جدید

  • از Navigation 2.9.0-alpha03 : ایمنی نوع ناوبری اکنون از کلاس مقدار به عنوان مسیر یا به عنوان نوع آرگومان یک مسیر پشتیبانی می کند ( I9344a , b/374347483 )

رفع اشکال

نسخه 2.8.3

16 اکتبر 2024

androidx.navigation:navigation-*:2.8.3 منتشر شد. نسخه 2.8.3 شامل این commit ها است.

ویژگی های جدید

  • بررسی‌های پرز جدید برای ماژول‌های 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 )

رفع اشکال

  • مشکلی را برطرف کرد که در آن قوانین پرزهای جدید که در Navigation 2.8.* اضافه شده بودند، هنگام تلاش برای اجرای لینت با پلاگین Android Gradle نسخه 8.4 و بالاتر، باعث خطای Obsolete custom lint check می شد. ( I1be3d , b/368070326 , b/371463741 )

مسائل شناخته شده

  • هنگام تلاش برای اجرای لینت با لینت 16 (AGP 8.7) یا بالاتر، خط ناوبری خطای بررسی پرزهای سفارشی منسوخ را ایجاد می کند. ( b/371926651 )

نسخه 2.8.2

2 اکتبر 2024

androidx.navigation:navigation-*:2.8.2 منتشر شد. نسخه 2.8.2 شامل این commit ها است.

ویژگی های جدید

  • Navigation Type Safety اکنون از کلاس‌های 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 حاوی این commit ها است.

ویژگی های جدید

  • برای اطمینان از استفاده از تابع popBackStack که هنگام تلاش برای popBackStack با استفاده از APIهای ایمن نوع، یک نوع کلاس اصلاح‌شده می‌گیرد، یک قانون پرز جدید اضافه کرد. ( Ief161 , b/358095343 )

رفع اشکال

  • اکنون پیمایش مستلزم آن است که مسیری که به startDestination یک NavGraph ارسال می‌شود حاوی مقادیری برای همه آرگومان‌های مورد نیاز باشد، که شامل آرگومان‌هایی است که غیر قابل تهی هستند و مقدار پیش‌فرض ندارند. ( I18e74 , b/362594265 )
  • args ایمن ناوبری پشتیبانی از رشته‌های غیر قابل تهی را اضافه کرده است، به طوری که مقادیر «تهی» تجزیه و به همان صورت در بسته ذخیره می‌شوند. این از رفتار موجود که در آن مقادیر "تهی" به یک شی تهی تجزیه می شوند، فاصله می گیرد. این تغییر فقط برای انواع رشته های غیر تهی اعمال می شود. رشته های پوچ بدون تغییر باقی می مانند. ( I08b4a , b/348936238 )
  • به NavDestination دیگر نمی توان به جز از طریق پیوند عمیقی که صریحاً به مقصد اضافه شده است، به آن پیوند عمیق داد. این همچنین به این معنی است که شما فقط می توانید با اضافه بار تابع پیمایش که مسیر رشته ای را طی می کند، به مسیر مقصد بروید. این یک آسیب‌پذیری را برطرف می‌کند که پیوند عمیق به یک مقصد بالقوه محافظت شده را ممکن می‌سازد. ( Ie30e6 )

به روز رسانی وابستگی

  • Navigation Safe Args اکنون به جای Kotlin 2.X به Kotlin 1.9.24 بستگی دارد و اطمینان می دهد که توسعه دهندگان مجبور به به روز رسانی نیستند. ( a4129a )
  • Navigation Compose اکنون به Compose 1.7.2 بستگی دارد.

نسخه 2.8.0

4 سپتامبر 2024

androidx.navigation:navigation-*:2.8.0 منتشر شد. نسخه 2.8.0 شامل این commit ها است.

تغییرات مهم از 2.7.0

Navigation Kotlin DSL Type-Safety

  • اکنون Navigation با استفاده از Kotlin Serialization، ایمنی نوع را برای Kotlin DSL (که توسط Navigation Compose استفاده می‌شود) فراهم می‌کند تا به شما امکان می‌دهد مقصدها را در نمودار ناوبری خود از طریق نوع اشیاء امن و کلاس‌های داده تعریف کنید:
    // 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)
        }
    }

برای اطلاعات بیشتر به پست وبلاگ ناوبری نوشتن meet Type Safety مراجعه کنید.

ناوبری نوشتن بازگشت پیشگو

  • Navigation Compose اکنون از طریق APIهای SeekableTransitionState جدید از compose-animation از Predictive درون برنامه ای پشتیبانی می کند. این به شما امکان می دهد قبل از تصمیم به انجام تراکنش از طریق ژست تکمیل شده یا لغو، از ژست برگشت برای دیدن مقصد قبلی با Transition سفارشی خود استفاده کنید.

Navigation Fragment Composable

  • یک مصنوع navigation-fragment-compose جدید اضافه شده است که شامل یک ComposableNavHostFragment جایگزین برای NavHostFragment است که به شما امکان می دهد مقصدهای قابل ترکیب را به فایل های Navigation XML خود اضافه کنید. هر مقصد composable باید به عنوان یک روش سطح بالا، بدون @Composable بیان شود android:name هنگام حرکت به یکی از این مقاصد، یک قطعه حاوی برای نمایش محتوای قابل ترکیب ایجاد می شود.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

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

سایر تغییرات

  • Navigation Compose اکنون به Compose 1.7.0 بستگی دارد.
  • اکنون 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 حاوی این commit ها است.

رفع اشکال

  • رفع خرابی ناوبری هنگام عبور از کلاس‌های Enum سطح بالا به عنوان آرگومان‌های امن تایپ. ( I0ba76 , b/358137294 )
  • Navigation 2.8 اکنون به درستی با SDK 34 کار می کند و تا زمان انتشار نسخه 2.9 به همراه بقیه کتابخانه های AndroidX به SDK 35 تعویض نمی شود. ( b/358798728 )

نسخه 2.8.0-beta07

7 آگوست 2024

androidx.navigation:navigation-*:2.8.0-beta07 منتشر شد. نسخه 2.8.0-beta07 حاوی این تعهدات است.

مسائل شناخته شده

  • به دلیل b/358137294 ، فقط Enum های تو در تو در یک کلاس دیگر خارج از جعبه پشتیبانی می شوند. Enums سطح بالا در نسخه بعدی پشتیبانی خواهد شد.

رفع اشکال

  • هنگام پیمایش به مقصدهای تکراری یا مشترک، ناوبری رفتن به نزدیکترین مقصد منطبق از مکان فعلی در نمودار را اولویت بندی می کند. ( Ic89a4 , b/352006850 )
  • پیمایش در args ایمن اکنون یک NavType.EnumType جدید اضافه کرده است. این بدان معناست که انواع Enum دیگر نیازی به NavType سفارشی ندارند. توجه داشته باشید که SerialName Enum باید نام پیش‌فرض کاملا واجد شرایط باشد. ( I66d22 , b/346475493 )
  • پیمایش در args ایمن، پشتیبانی داخلی برای انواع آرگومان‌های باطل از جمله Int? ، Long? Float? ، Boolean? و Enum<*>? . ( I32d13 , I1c580 , Ifba66 , I978b0 , Ide076 , b/351994237 )
  • اگر مسیر startDestination ارسال شده به NavGraph دقیقاً برابر با startDestination.route باشد، startDestination NavGraph اکنون از مقادیر آرگومان پیش‌فرض استفاده می‌کند. ( I13762 , b/354046047 )

نسخه 2.8.0-beta06

24 جولای 2024

androidx.navigation:navigation-*:2.8.0-beta06 منتشر شد. نسخه 2.8.0-beta06 حاوی این تعهدات است.

رفع اشکال

  • مشکلی را برطرف کرد که در آن بررسی‌های WrongStartDestinationType اشیاء Companion را در نوع کلاس بررسی نمی‌کردند و باعث می‌شد که lint خطا را تشخیص ندهد. ( I92b09 )

نسخه 2.8.0-beta05

10 جولای 2024

androidx.navigation:navigation-*:2.8.0-beta05 منتشر شد. نسخه 2.8.0-beta05 حاوی این تعهدات است.

رفع اشکال

  • هنگامی که NavGraphs تودرتو مسیر startDestination را به اشتراک می گذارند، خرابی پیمایش singleTop را برطرف کنید. ( I17b94 , b/294408596 )

نسخه 2.8.0-beta04

26 ژوئن 2024

androidx.navigation:navigation-*:2.8.0-beta04 منتشر شد. نسخه 2.8.0-beta04 حاوی این تعهدات است.

رفع اشکال

  • اکنون Navigation از پیمایش با رشته های خالی در آرگومان های مسیر پشتیبانی می کند. ( Ic5dbd , b/339481310 )
  • پیام خطا را برای سریالسازهای سفارشی که مستقیماً در فیلدهای کلاس از طریق @Serializable(with =...) اعلام شده است، بهبود دهید تا مشخص شود که این ویژگی در حال حاضر پشتیبانی نشده است. ( I052b0 , b/341319151 )
  • Api تست SavedStateHandleFactory اکنون می‌تواند در تست‌های غیر اندرویدی استفاده شود، اما به Robolectric برای پشتیبانی از تجزیه آرگومان با Bundles نیاز دارد. ( I76cdc , b/340966212 )
  • رفع خرابی از حالت بازیابی هنگام از سرگیری برنامه پس از مرگ فرآیند با استفاده از ناوبری Type-Safe در نوشتن. ( Ia8f38 , b/341801005 )
  • مشکلی در Navigation Compose برطرف شد که در آن پس از لغو ژست بازگشت پیش‌بینی‌کننده، NavBackStackEntry که کاربر به آن برمی‌گرداند، هرگز به حالت RESUMED Lifecycle باز نمی‌گردد. این همچنین تضمین می‌کند که مقصد برگشتی به‌جای اینکه پس از پرت کردن در جای خود قرار گیرد، به‌درستی به داخل حرکت می‌کند. ( I97a0c , b/346608857 )
  • هنگام استفاده از Predictive Back با Navigation Compose، مقصدی که ظاهر می شود اکنون دارای ترتیب z مناسب است و به درستی در بالای مقصد ورودی متحرک می شود. ( I2077b , b/345993681 )

نسخه 2.8.0-beta03

12 ژوئن 2024

androidx.navigation:navigation-*:2.8.0-beta03 منتشر شد. نسخه 2.8.0-beta03 حاوی این تعهدات است.

تغییرات API

  • CollectionNavType یک متد انتزاعی emptyCollection() دارد. برای مدیریت یک مجموعه خالی که به عنوان آرگومان ارسال شده است، این مورد را لغو کنید. ( Ie4d84 , b/341723133 )

رفع اشکال

  • اسنادی در NavType.serializeAsValue و serializeAsValues ​​اضافه شد تا مشخص شود که خروجی های نهایی باید با کد Uri باشند. ( Ida6bd , b/344943214 )
  • رفع خرابی هنگام فراخوانی toRoute<T> با آرگومان تهی CollectionNavType . هنگام پیمایش با CollectionNavType تهی، آرگومان خروجی مقدار پیش‌فرض اعلام‌شده در کلاس Serializable شما، یا مقدار بازگشتی emptyCollection() در صورت عدم وجود مقدار پیش‌فرض خواهد بود. ( I84158 , Id630f , b/342672856 )

نسخه 2.8.0-beta02

29 مه 2024

androidx.navigation:navigation-*:2.8.0-beta02 منتشر شد. نسخه 2.8.0-beta02 حاوی این تعهدات است.

رفع اشکال

  • رفع خرابی ClassCastException هنگام استفاده از NavBackStackEntry.toRoute با NavType سفارشی قابل پاک کردن. ( I1c29b , b/342239473 )
  • رفع مشکلات مربوط به بازیابی وضعیت پشته پشته ناوبری که هنگام تلاش برای بازیابی ورودی پشته پشته که از طریق شناسه از مقصد فعلی قابل دسترسی نیست، ایجاد شد. از آنجایی که مسیرها توسط شناسه پشتیبانی می شوند، مقاصد ساخته شده با مسیرها نیز تحت تأثیر قرار گرفتند. این همچنین خرابی ناشی از فراخوانی clearBackStack() که همان مشکل اساسی را داشت برطرف می کند. ( I423c3 , b/339908057 )

نسخه 2.8.0-beta01

14 مه 2024

androidx.navigation:navigation-*:2.8.0-beta01 منتشر شد. نسخه 2.8.0-beta01 حاوی این تعهدات است.

تغییرات API

  • SavedStateHandle.toRoute() اکنون یک پارامتر typeMap برای انواع آرگومان سفارشی می گیرد. ( Ie39fb , b/339026523 )
  • برای ایجاد یک SavedStateHandle از یک شی Kotlin Serializable، یک API آزمایشی به navigation-testing اضافه کرد. ( ID4867 , b/339080702 )

رفع اشکال

  • اسناد پارامتری موجود برای توابع Navigation Kotlin DSL اضافه شده است. ( I26a36 )

نسخه 2.8.0-alpha08

1 مه 2024

androidx.navigation:navigation-*:2.8.0-alpha08 منتشر شد. نسخه 2.8.0-alpha08 حاوی این commit ها است.

Safe Args در Navigation Compose

این قابلیت از Kotlin Serialization استفاده می کند تا به شما امکان می دهد مقصدها را در نمودار ناوبری خود از طریق تایپ اشیاء امن و کلاس های داده تعریف کنید:

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

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

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

برای اطلاعات بیشتر به پست وبلاگ ناوبری نوشتن 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 حاوی این commit ها است.

ویژگی های جدید

  • یک مصنوع navigation-fragment-compose جدید که شامل ComposableNavHostFragment جایگزینی برای NavHostFragment است اضافه می کند که به شما امکان می دهد مقصدهای composable را به فایل های Navigation 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" />
    

تغییرات API

  • پشتیبانی از Safe Args در Navigation Compose با استفاده از رویکردی مبتنی بر سریال سازی Kotlin ادامه یافت. این APIها تمام نشده اند و با حاشیه نویسی ExperimentalSafeArgsApi علامت گذاری شده اند. هنگامی که کل سطح API در نسخه بعدی تکمیل شود، این حاشیه نویسی حذف خواهد شد. ( Iefd95 , I409c8 , I5b5ac , I7e753 , I960f8 , I3eabd , I8ed5a , Ied2c9 , I9b73c , I554db , Ib3aba , Ia668d , b/1396 )

نسخه 2.8.0-alpha06

3 آوریل 2024

androidx.navigation:navigation-*:2.8.0-alpha06 منتشر شد. نسخه 2.8.0-alpha06 حاوی این commit ها است.

تغییرات API

رفع اشکال

  • NavHost اکنون از Alignment.TopStart به عنوان آرگومان پیش فرض contentAlignment استفاده می کند. این آن را در راستای پیش‌فرض AnimatedContent قرار می‌دهد و برخی از نمونه‌های مقیاس غیرمنتظره از انتقال مرکز را برطرف می‌کند. ( I09e72 , b/330111602 )
  • هنگامی که در حین استفاده از Navigation Compose، ژست پیش‌بینی کننده به عقب را تکان می‌دهید، NavHost اکنون به‌جای اتمام فوری، انتقال سفارشی را به درستی تکمیل می‌کند. ( I99017 , b/327292110 )

نسخه 2.8.0-alpha05

20 مارس 2024

androidx.navigation:navigation-*:2.8.0-alpha05 منتشر شد. نسخه 2.8.0-alpha05 حاوی این commit ها است.

ویژگی های جدید

  • اکنون می توانید آرگومان ها را مستقیماً در مسیر startDestination به startDestination NavGraph بدون اتکا به defaultValue ارسال کنید. این در مورد NavGraph startDestinations تودرتو نیز صدق می کند. ( I0e0b5 , b/109505019 , b/188693139 )

تغییرات API

  • کلاس انتزاعی جدید CollectionNavType<T> ، یک زیر کلاس از NavType<T> برای آرگومان های مبتنی بر مجموعه مانند لیست، آرایه ها، نقشه ها اضافه شد. ( Ic6d63 , b/188693139 )
  • همه آرایه های پیش فرض NavType ( IntArrayType ، LongArrayType ، FloatArrayType ، BoolArrayType ، و StringArrayType ) اکنون از نوع CollectionNavType هستند ( Idcf79 ، b/188693139 )
  • NavType اکنون یک API باز جدید valueEquals ارائه می دهد که تعیین می کند آیا دو مقدار از یک نوع با یکدیگر برابر هستند یا خیر. ( I6cb97 , b/327229511 )

رفع اشکال

  • پارامترهای پرس و جو در پیوندهای عمیق اکنون به مقادیری به شکل پرانتزهای فرفری در اطراف نام آرگومان (یعنی {argName} ) به عنوان مقادیر معتبر برای NavTypes مبتنی بر رشته اجازه می دهد. این مشکل را برطرف می کند که در آن چنین مقداری برای همه انواع نامعتبر (یا عدم وجود مقدار) در نظر گرفته می شود. ( I18302 , b/327274038 )
  • توابع NavController که از مسیرهایی مانند navigate یا popBackStack پشتیبانی می کنند، اکنون می توانند مسیرهای پر شده با آرگومان های Array NavTypes را به درستی مطابقت دهند. ( Iea805 , b/327229511 )

نسخه 2.8.0-alpha04

6 مارس 2024

androidx.navigation:navigation-*:2.8.0-alpha04 منتشر شد. نسخه 2.8.0-alpha04 حاوی این commit ها است.

ویژگی های جدید

  • اکنون می‌توانید SizeTranform را برای انتقال‌های خود در Navigation Compose با تعریف آن‌ها به عنوان بخشی از مقداردهی اولیه برای توابع composable و/یا navigation مشخص کنید. ( I91062 , b/296912651 )

رفع اشکال

  • مشکلی را که در آن NavHost در Compose Navigation در هنگام استفاده از System Back بدون اشاره به درستی انتقال را نشان نداد، برطرف شد. ( Iceeae , b/325998468 )

نسخه 2.8.0-alpha03

21 فوریه 2024

androidx.navigation:navigation-*:2.8.0-alpha03 منتشر شد. نسخه 2.8.0-alpha03 حاوی این commit ها است.

تغییرات API

  • NavBackStackEntry.savedStateHandle اکنون به عنوان @MainThread علامت گذاری شده است زیرا از کدی استفاده می کند که به هر حال باید در رشته اصلی باشد. ( Ibb988 , b/299523245 )

رفع اشکال

  • مشکلی در Navigation برطرف شد که باعث شد NavGraph ViewModels خیلی زود DESTROYED زیرا ViewModel ورودی مرتبط بخشی از حالت ذخیره شده نبود. ( Ib6bb7 , b/317581849 )

به روز رسانی وابستگی

نسخه 2.8.0-alpha02

7 فوریه 2024

androidx.navigation:navigation-*:2.8.0-alpha02 منتشر شد. نسخه 2.8.0-alpha02 حاوی این commit ها است.

ویژگی های جدید

  • Navigation Compose اکنون از طریق APIهای SeekableTransitionState جدید از compose-animation از Predictive درون برنامه ای پشتیبانی می کند. این به شما امکان می دهد قبل از تصمیم به انجام تراکنش از طریق ژست تکمیل شده یا لغو، از ژست برگشت برای دیدن مقصد قبلی با Transition سفارشی خود استفاده کنید. ( I8b8e9 )

نسخه 2.8.0-alpha01

24 ژانویه 2024

androidx.navigation:navigation-*:2.8.0-alpha01 منتشر شد. نسخه 2.8.0-alpha01 حاوی این commit ها است.

رفع اشکال

  • رفع نشت BackStackState که در آن چندین تماس saveState در یک مقصد منجر به ذخیره چندین حالت می‌شود، اما تنها حالت اول می‌تواند بازیابی شود. ( I598b0 , b/309559751 )
  • مشکلی را برطرف کرد که در آن هنگام استفاده از کمک‌کننده‌های NavigationUI برای پر کردن عنوان نوارهای برنامه، آرگومان‌های غیر رشته‌ای به درستی نمایش داده نمی‌شدند. ( #636 , b/316676794 )

به روز رسانی وابستگی

  • Navigation Compose اکنون به Compose 1.7.0-alpha01 بستگی دارد که مشکلی را برطرف کند که می‌تواند باعث ایجاد انیمیشن در مقیاس غیرمنتظره شود. ( b/297258205 )

مشارکت خارجی

  • از SimonMarquis برای رفع مشکل نمایش آرگومان‌های غیر رشته‌ای در هنگام استفاده از کمک‌کننده‌های NavigationUI برای پر کردن عنوان نوارهای برنامه تشکر می‌کنیم.

نسخه 2.7.7

نسخه 2.7.7

7 فوریه 2024

androidx.navigation:navigation-*:2.7.7 منتشر شد. نسخه 2.7.7 حاوی این commit ها است.

رفع اشکال

  • بکپورت شده از Navigation 2.8.0-alpha01 : رفع نشت BackStackState که در آن چندین saveState() در یک NavBackStackEntry منفرد باعث ذخیره چندین حالت می شد، اما فقط اولین حالت ذخیره شده می تواند بازیابی شود. ( I598b0 , b/309559751 )
  • پس‌پورت‌شده از Navigation 2.8.0-alpha01 : مشکلی را برطرف کرد که در آن هنگام استفاده از کمک‌های NavigationUI برای پر کردن عنوان نوارهای برنامه، آرگومان‌های غیر رشته‌ای به درستی نمایش داده نمی‌شدند. ( #636 , b/316676794 )

مشارکت خارجی

  • از SimonMarquis برای رفع مشکل نمایش آرگومان‌های غیر رشته‌ای در هنگام استفاده از کمک‌کننده‌های NavigationUI برای پر کردن عنوان نوارهای برنامه تشکر می‌کنیم.

نسخه 2.7.6

نسخه 2.7.6

13 دسامبر 2023

androidx.navigation:navigation-*:2.7.6 منتشر شد. نسخه 2.7.6 حاوی این commit ها است.

رفع اشکال

  • تابع NavGraph equals() اکنون به‌جای گره فراخوان گره‌های گراف دیگر را به درستی در نظر می‌گیرد. این تضمین می‌کند که نمودارهایی که دارای گره‌هایی با شناسه‌های مختلف هستند دیگر برابر در نظر گرفته نخواهند شد ( I401cb , b/311414915 )

نسخه 2.7.5

نسخه 2.7.5

1 نوامبر 2023

androidx.navigation:navigation-*:2.7.5 منتشر شد. نسخه 2.7.5 حاوی این commit ها است.

بهبود عملکرد

  • عملکرد مقایسه دو نمودار (هم از نظر زمان و هم از نظر تعداد تخصیص) را به شدت بهبود بخشید. این بدان معنی است که فراخوانی هایی مانند setGraph که به صورت داخلی نمودار جدید را با نمودار موجود مقایسه می کند بسیار سریعتر است و منجر به فریم های کمتری می شود که رد شده اند. متشکرم Michał Z برای تجزیه و تحلیل کاملی که منجر به این بهبود شد. ( I6ad62 )
  • NavHost اکنون به جای اینکه برای خواندن وضعیت به روز شده منتظر پاس دوم باشد، مقصد شروع را در اولین پاس ترکیبی ارائه می کند. ( I439a7 , b/304852206 )

رفع اشکال

  • اگر بیش از یک بار با همان نمودار setGraph تماس بگیرید، تنها در صورتی که مقصدی در نمودار شما وجود داشته باشد که حاوی عملکردی باشد که دو مقصد را به هم مرتبط می‌کند، مشکلی را برطرف می‌کند. ( Ieaed7 )
  • دیالوگ‌هایی که به‌سرعت پیمایش شده و رد شده‌اند، دیگر به فهرست NavController.visibleEntries نشت خواهند کرد. ( I67586 , b/287969970 )
  • هنگامی که یک ورودی ظاهر می شود و به دنبال آن تغییری در پیکربندی ایجاد می شود، اگر saveState نادرست باشد، ViewModel ورودی به درستی پاک می شود. ( Idf242 , b/298164648 )
  • اگر پشته پشتی قبل از تغییر پیکربندی یا فراخوانی setGraph کاملاً خالی بود، فقط زمانی که Intent دارای پرچم FLAG_ACTIVITY_NEW_TASK تنظیم شده بود، NavController می‌توانست یک پیوند عمیق را بیش از یک بار مدیریت کند. ( I73c7f )

به روز رسانی های وابستگی

  • پیمایش با Fragments اکنون به Fragment 1.6.2 بستگی دارد و مشکلی را برطرف می کند که در آن نمونه های ViewModel قطعات تودرتو هنگام فراخوانی clearBackStack پاک نمی شوند.

نسخه 2.7.4

نسخه 2.7.4

4 اکتبر 2023

androidx.navigation:navigation-*:2.7.4 منتشر شد. نسخه 2.7.4 حاوی این commit ها است.

ویژگی های جدید

  • پشتیبانی از popUpTo اضافه شد تا از مسیرهایی با آرگومان استفاده کند تا امکان بازگشت به ورودی خاصی را فراهم کند که از همان آرگومان‌های دقیق استفاده می‌کند، مطابق با پشتیبانی موجود در popBackStack . ( I731f4 , b/299255572 )

رفع اشکال

  • مشکلی را برطرف کنید که در آن قطع کردن یک پیمایش با ناوبری دیگر با popUpTo باعث از کار افتادن FragmentNavigator می شود. ( I3c848 , b/301887045 )
  • رفع مشکلی که در آن فشار دادن سیستم باعث می‌شد مقصد currentDestination به‌درستی برای مطابقت با قطعه نمایش داده شده به‌روزرسانی نشود. ( Id0d6c , b/289877514 )
  • چرخه عمر DialogFragment اکنون به درستی به حالت RESUMED منتقل می شود که گفتگوی بالای آن رد شود. ( I88f0d , b/301811387 )

نسخه 2.7.3

نسخه 2.7.3

20 سپتامبر 2023

androidx.navigation:navigation-*:2.7.3 منتشر شد. نسخه 2.7.3 حاوی این commit ها است.

رفع اشکال

  • مشکلی در Navigation with Fragments که باعث می شد لیست visibleEntries حاوی ورودی های نادرست باشد، برطرف شد. ( I5caa9 , b/288520638 )
  • مشکلی که باعث می‌شد مقصد پنجره شناور (مانند Dialogs ، Bottomsheets ، و غیره) هرگز پاسخی به چرخه حیات RESUMED دریافت نکند، برطرف شد. ( I3b866 , b/287505132 )

نسخه 2.7.2

نسخه 2.7.2

6 سپتامبر 2023

androidx.navigation:navigation-*:2.7.2 منتشر شد. نسخه 2.7.2 حاوی این commit ها است.

رفع اشکال

  • پیمایش اکنون به Lifecycle 2.6.2 بستگی دارد، که تعاملی بین rememberSaveable و NavHost Navigation Compose را برطرف می‌کند که باعث می‌شود وضعیت rememberSaveable مقصدها و هر نمونه SavedStateHandle متعلق به ViewModel به درستی پس از مرگ فرآیند و بازیابی بازیابی شود. ( b/298059596 , b/289436035 )
  • مشکلی در نمایش همزمان چند دیالوگ در Navigation Compose که در آن دیالوگ‌های تا حدی مبهم (مثلاً نه بالاترین محاوره) در حالت CREATED Lifecycle به جای حالت STARTED هستند، برطرف شد. ( aosp/2728520 , b/289257213 )
  • مشکلی در نمایش همزمان چند دیالوگ در «نوشتن پیمایش» برطرف شد که رد کردن بالاترین گفتگو باعث می‌شد که بالاترین گفتگوی جدید به جای انتقال صحیح به RESUMED در وضعیت چرخه حیات STARTED گیر کند. ( aosp/2629401 , b/286371387 )
  • Navigation Safe Args دیگر اگر واقعاً اجرا نشود، کار خود را مشتاقانه انجام نمی دهد. ( I0e385 , b/260322841 )

به روز رسانی وابستگی

  • Navigation Compose اکنون به Compose 1.5.1 بستگی دارد.

نسخه 2.7.1

نسخه 2.7.1

23 آگوست 2023

androidx.navigation:navigation-*:2.7.1 منتشر شد. نسخه 2.7.1 حاوی این commit ها است.

رفع اشکال

  • مشکلی را در Navigation با Compose برطرف کرد که در آن هنگام استفاده از Scaffold ممکن بود برای دسترسی به Lifecycle.State.DESTROYED ViewModel خطا دریافت شود. ( I1dc11 , b/268422136 )

نسخه 2.7.0

نسخه 2.7.0

9 آگوست 2023

androidx.navigation:navigation-*:2.7.0 منتشر شد. نسخه 2.7.0 حاوی این commit ها است.

تغییرات مهم از 2.6.0

انیمیشن ها از Accompanist

اکنون که AnimatedContent پایدار است، توانستیم کد را از Accompanist Navigation Animation به خود Navigation Compose برگردانیم.

این به این معنی است که تمام پشتیبانی برای تنظیم انتقال های سفارشی که در AnimatedNavHost وجود داشت مستقیماً در NavHost پشتیبانی می شود.

هیچ تغییر دیگری در Accompanist Navigation Animation اعمال نمی‌شود و به‌زودی آن را به‌طور رسمی منسوخ خواهیم کرد، همراه با راهنمایی در مورد نحوه بازگشت به خود Navigation Compose، اما این برعکس راهنمای مهاجرت خواهد بود و نیازی به تغییرات API دیگری نیست. اگر در حال حاضر از آخرین آلفای Accompanist ( 0.31.2-alpha ) استفاده می کنید. ( b/197140101 )

رفع اشکال

  • NavHost در Navigation Compose اکنون حتی پس از توقف و ازسرگیری فعالیت، تماس‌های سیستم را به درستی قطع می‌کند. ( Icb6de , b/279118447 )

به روز رسانی های وابستگی

  • اکنون پیمایش به Compose 1.5.0 از 1.1.0 بستگی دارد.

نسخه 2.7.0-rc01

26 جولای 2023

androidx.navigation:navigation-*:2.7.0-rc01 منتشر شد. نسخه 2.7.0-rc01 حاوی این commit ها است.

رفع اشکال

  • مشکلی را برطرف کرد که در آن لامبداهای EnterTransition و ExitTransition ایجاد شده به عنوان بخشی از NavHost می‌توانند به طور بالقوه در حافظه باقی بمانند، حتی پس از حذف NavHost از ترکیب. ( I893d0 )

مسائل شناخته شده

  • مشکلی از Navigation 2.6.x وجود دارد که هنگام پیمایش با popUpTo ممکن است یک IllegalArgumentException ایجاد شود. ممکن است با تغییر ساختار نمودار خود، مانند توصیه‌ای که در اینجا پیشنهاد شده است، از این استثنا جلوگیری شود. ( b/287133013 )

نسخه 2.7.0-beta02

28 ژوئن 2023

androidx.navigation:navigation-*:2.7.0-beta02 منتشر شد. نسخه 2.7.0-beta02 حاوی این تعهدات است.

رفع اشکال

  • Navigation Compose اکنون ترتیب z مناسب را برای انتقال‌های سفارشی دارد که از navigate با گزینه popUpTo استفاده می‌کنند. ( /Ib1c3a ، b/285153947 )

نسخه 2.7.0-beta01

7 ژوئن 2023

androidx.navigation:navigation-*:2.7.0-beta01 منتشر شد. نسخه 2.7.0-beta01 حاوی این تعهدات است.

رفع اشکال

  • NavHost در Navigation Compose اکنون به درستی تماس های سیستم را حتی پس از STOPPED و RESUMED Activity رهگیری می کند. ( Icb6de , b/279118447 )

نسخه 2.7.0-alpha01

24 مه 2023

androidx.navigation:navigation-*:2.7.0-alpha01 منتشر شد. نسخه 2.7.0-alpha01 حاوی این commit ها است.

انیمیشن ها از Accompanist

اکنون که AnimatedContent پایدار است، توانستیم کد را از Accompanist Navigation Animation به خود Navigation Compose برگردانیم.

این به این معنی است که تمام پشتیبانی برای تنظیم انتقال های سفارشی که در AnimatedNavHost وجود داشت مستقیماً در NavHost پشتیبانی می شود.

هیچ تغییر دیگری در Accompanist Navigation Animation اعمال نمی‌شود و به‌زودی آن را به‌طور رسمی منسوخ خواهیم کرد، همراه با راهنمایی در مورد نحوه بازگشت به خود Navigation Compose، اما این برعکس راهنمای مهاجرت خواهد بود و نیازی به تغییرات API دیگری نیست. اگر در حال حاضر از آخرین آلفای Accompanist ( 0.31.2-alpha ) استفاده می کنید. ( b/197140101 )

رفع اشکال

  • From Navigation 2.6.0-rc02 : مشکلی در Navigation در Fragments برطرف شد که در آن پیمایش با popUpTo و بیرون آوردن یک قطعه از پشته پشتی بدون ایجاد مجدد نمای آن باعث می‌شود سیستم از کار بیفتد. ( Ieb8d4 , b/281726455 )

به روز رسانی های وابستگی

  • پیمایش اکنون به Compose 1.5.0-beta01 بستگی دارد.

نسخه 2.6.0

نسخه 2.6.0

7 ژوئن 2023

androidx.navigation:navigation-*:2.6.0 منتشر شد. نسخه 2.6.0 حاوی این commit ها است.

تغییرات مهم در Navigation از 2.5.0

  • arguments NavBackStackEntry و arguments ارسال شده به OnDestinationChangedListener اکنون فقط یک کپی از آرگومان‌های تغییرناپذیر هستند که هنگام حرکت به مقصد ایجاد شده‌اند. این بدان معناست که هرگونه تغییری که در آن دسته‌ها ایجاد شده باشد، در دسترسی‌های بعدی به arguments یا سایر نمونه‌های OnDestinationChangedListener منعکس نخواهد شد.
  • NavDeepLink اکنون از مقادیر پیش‌فرض برای آرایه‌ها پشتیبانی می‌کند، که امکان پشتیبانی از پارامترهای پرس و جوی مکرر را فراهم می‌کند که به نوع آرایه آرگومان نگاشت می‌شوند. NavType همچنین اکنون شامل یک روش پیش فرض است که می تواند برای ترکیب دو مقدار تجزیه شده لغو شود.
  • زیر کلاس‌های سفارشی NavType اکنون می‌توانند serializeAsValue برای سریال‌سازی یک مقدار در یک رشته لغو کنند، و اجازه می‌دهند هم سریال‌سازی و هم deserialization (از طریق parseValue ) به طور کامل در کلاس NavType کپسوله شوند. StringType اکنون این روش را لغو می کند تا Uri.encode در String داده شده فراخوانی کند.

تغییرات مهم در Navigation Compose از نسخه 2.5.0

  • هنگام پیش‌نمایش یک Composable با NavHost ، اکنون به طور پیش‌فرض startDestination NavGraph را نشان می‌دهد.
  • NavController.popBackStack(route) ، NavController.getBackStackEntry(route) ، NavController.clearBackStack(route) اکنون همه مسیرهایی را پشتیبانی می کنند که آرگومان هایی به طور جزئی یا کامل پر شده است. توجه داشته باشید که آرگومان ها باید دقیقاً با آرگومان های ورودی مطابقت داشته باشند.
  • تلاش برای ایجاد یک NavDeepLink خالی با استفاده از navDeepLink Kotlin DSL اکنون منجر به یک اخطار پرز می شود که نشان می دهد پیوند عمیق برای معتبر بودن به uri، اقدام و/یا mimetype نیاز دارد.

تغییرات مهم در Navigation with Fragments از نسخه 2.5.0

  • NavHostFragment دیگر خود دکمه بازگشت سیستم را قطع نمی کند. این به FragmentManager زیربنایی اجازه می دهد تا سیستم را مدیریت کند. این به Fragment 1.7.0-alpha01 و بالاتر اجازه می‌دهد تا یک انیمیشن بازگشتی پیش‌بینی‌کننده درون برنامه‌ای را در دستگاه‌های Android U ارائه دهد.
  • هنگام استفاده از ناوبری با قطعات ، تلاش برای انجام دستی یک FragmentTransaction قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه IllegalArgumentException FragmentManager صورت دستی اضافه می کند. شما همیشه باید قطعات را از طریق API navigate() اضافه کنید.
  • هنگام استفاده از رشته دقیق ${applicationId} به عنوان نگهدارنده مکان در app:data و app:dataPattern در عنصر فعالیت یک پرونده XML ناوبری ، محل نگهدارنده به طور خودکار با packageName متن پس از تورم پر می شود.
  • FragmentNavigator اکنون از API های انتقال در هنگام پیمایش و ظاهر شدن NavBackStackEntries استفاده می کند. این بدان معنی است که Lifecycle NavBackStackEntry اکنون منتظر ورود و خروج جلوه های ویژه قطعات قبل از حرکت Lifecycle.State نهایی خود هستند.
  • DialogFragmentNavigator اکنون هنگام پیمایش و ظاهر شدن NavBackStackEntries از API های انتقال استفاده می کند. این بدان معناست که Lifecycle NavBackStackEntry اکنون منتظر Lifecycle DialogFragment می شود تا قبل از حرکت به سمت DESTROYED خود ، به DESTROYED حرکت کند.
  • NavHostFragment اکنون به شما امکان می دهد تا به محض وصل کردن NavHostFragment به FragmentManager ، به جای اینکه فقط پس از onCreate() وصل شود NavController بازیابی کنید.
  • پشتیبانی ناوبری از ماژول های ویژگی پویا اکنون به کتابخانه تحویل ویژگی بازی گرانول بستگی دارد.
  • Navigation Safe Args اکنون به افزونه Android Gradle نسخه 7.3.0 بستگی دارد. این بدان معنی است که اکنون فقط با نسخه های 7.3.0+ سازگار است.

تغییرات مهم در ناوبری از 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 قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه قطعه IllegalArgumentException FragmentManager صورت دستی اضافه می کند. شما همیشه باید قطعات را از طریق API navigate() اضافه کنید. ( i6d38e )
  • هنگامی که یک navigate وجود دارد که یک ورودی و یک popBackStack اضافه می کند که آن را در همان قاب حذف می کند ، ورود بالای آن در پشته پشتی اکنون به طور مداوم آن را به Lifecycle.State RESUMED سر گرفته می کند. ( id8067 ، b/276495952 )

نسخه 2.6.0-alpha09

5 آوریل 2023

androidx.navigation:navigation-*:2.6.0-alpha09 منتشر می شود. نسخه 2.6.0-alpha09 شامل این تعهدات است.

رفع اشکال

  • چک های ثابت برای مسیر نامعتبر به گونه ای که اگر یک NavDestination حاوی NavArgument غیر قابل کنترل باشد ، این مسیر این مقصد باید دارای متغیرهایی باشد که برای استدلال هایی به نام های غیر قابل تحمل NavArgument نامگذاری شده است. ( IC62BF ، B/274697949 )
  • اگر عملیات ناوبری از دست نرود یک NavArgument غیر قابل تهی مورد نیاز توسط NavDestination که Action/MimeType با آن مطابقت دارد ، اکنون ناوبری های Deeplink بر اساس 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 اکنون به شما امکان می دهد تا به محض وصل کردن NavHostFragment به FragmentManager ، به جای اینکه فقط پس از onCreate() وصل شود NavController بازیابی کنید. ( 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 API که مسیرها را طی می کنند ، اکنون الگوهای مسیر را با آرگومان های قابل برگشت و پارامترهای پرس و جو قابل تهی می گیرند ( I22294 ، B/269302500 )
  • مسئله ای که فراخوانی clearBackStack() از NavController وضعیت ذخیره شده را در مدیر قطعه مرتبط با پشته پشت پاک شده پاک نمی کند. ( IC1CCE ، B/271190202 )
  • رگرسیون را در 2.6.0-alpha06 برطرف کرد که باعث شد MenuItem اشتباه در BottomNavigationView هنگام استفاده از سیستم بین زبانه ها برجسته شود. ( i634f6 ، b/270447657 )
  • رگرسیون ثابت در 2.6.0-alpha06 که باعث شد NavBackStackEntry S هنگام استفاده از 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 )

API تغییر می کند

  • تمام اضافه بار NavController اکنون با @MainThread navigate نویسی شده اند تا اطمینان حاصل شود که از آنها در موضوع اصلی فراخوانی می شوند. ( I2C0B0 ، B/263427111 )

رفع اشکال

  • هنگام تلاش برای حرکت در حین استفاده از ناوبری قطعات پویا ، تصادف را برطرف کرد. ( i3ee29 ، b/268360479 )
  • اشکال ثابت که در آن حرکت به قطعه دیگر از طریق دکمه پشت سیستم ، نوار پایین را به مورد انتخاب شده صحیح به روز نمی کند ( IF559F ، B/269044426 )

مسائل شناخته شده

  • هنگام استفاده از ناوبری با قطعات ، چرخه عمر NavBackStackEntry هنگام استفاده از API های Animation نتواند RESUMED . ( b/269646882 )
  • هنگام استفاده از ناوبری با قطعات و پیمایش با BottomNavigation ، اگر سعی می کنید یک پشته پشتی را با ورودی های متعدد بازیابی کنید ، BottomMenuItem به درستی به روز نمی شود. ( b/270447657 )
  • هنگام استفاده از ناوبری با قطعات ، پس از بازگرداندن حالت ، Lifecycle NavBackStackEntry هنگام DESTROYED قطعه آن DESTROYED نمی رود. ( b/270610768 )

نسخه 2.6.0-alpha05

8 فوریه 2023

androidx.navigation:navigation-*:2.6.0-alpha05 منتشر می شود. نسخه 2.6.0-alpha05 شامل این تعهدات است.

ویژگی های جدید

  • NavController.popBackStack(route) ، NavController.getBackStackEntry(route) ، NavController.clearBackStack(route) اکنون همه مسیرهای پشتیبانی را با آرگومان های جزئی یا کاملاً پر از آن پشتیبانی می کنند. توجه داشته باشید که آرگومان ها باید با استدلال های ورودی یک مسابقه دقیق باشند. ( IEBD28 ، IC678C ، I3B37B ، B/257514373 )
  • FragmentNavigator اکنون از API های انتقال در هنگام پیمایش و ظاهر شدن NavBackStackEntries استفاده می کند. این بدان معنی است که Lifecycle NavBackStackEntry اکنون منتظر ورود و خروج جلوه های ویژه قطعات قبل از حرکت Lifecycle.State نهایی خود هستند. ( i3cb19 ، b/238686802 )
  • DialogFragmentNavigator اکنون هنگام پیمایش و ظاهر شدن NavBackStackEntries از API های انتقال استفاده می کند. این بدان معناست که Lifecycle NavBackStackEntry اکنون منتظر Lifecycle DialogFragment می شود تا قبل از حرکت به سمت DESTROYED خود ، به DESTROYED حرکت کند. ( i53ee5 ، b/261213893 )

API تغییر می کند

  • NavigatorState اکنون API prepareForTransition فراهم می کند تا Navigator بتواند NavBackStackEntries به Lifecycle.State متوسط ​​منتقل کند. ( i42c21 ، b/238686802 )
  • اکنون می توانید از طریق یک ویژگی backstack به پشته پشتی مرتبط با یک NavGraphNavigator یا یک ComposeNavigator استفاده کنید. ComposeNavigator همچنین اکنون پاسخ به تماس onTransitionComplete() را برای علامت گذاری یک NavBackStackEntry که یک عملیات پیمایش یا popBackStack را انجام داده است ، در معرض نمایش قرار می دهد. ( I02062 ، I718DB ، B/257519195 )

رفع اشکال

  • Navigator State هنگام استفاده از API های push/popWithTransition اکنون بدون آنکه باشد و از قبل وارد آن می شود. ( IADBFA ، B/261213893 )
  • هنگام استفاده از launchSingleTop با یک NavGraph تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو startDestination در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو در تو است. ( id4bea ، b/253256629 )
  • ناوبری اکنون هنگام حرکت به همان مقصد با پرچم launchSingleTop که روی True قرار دارد ، به درستی جایگزین نمونه DialogFragment می شود. ( i45b5a ، b/149572817 )
  • Safeargs Navigation در هنگام استفاده از آرگوارهایی که دقیقاً 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 )

به روزرسانی وابستگی

  • پشتیبانی ناوبری از ماژول های ویژگی پویا اکنون به کتابخانه تحویل ویژگی بازی گرانول بستگی دارد. ( IB4DDC )
  • Navigation Safe Args اکنون به افزونه Android Gradle نسخه 7.3.0 بستگی دارد. این بدان معنی است که اکنون فقط با نسخه های 7.3.0+ سازگار است. ( i47e49 )

نسخه 2.6.0-alpha03

24 اکتبر 2022

androidx.navigation:navigation-*:2.6.0-alpha03 منتشر می شود. نسخه 2.6.0-alpha03 شامل این تعهدات است.

رفع اشکال

  • از ناوبری 2.5.3 : NavHost دیگر باعث ایجاد NoSuchElementException نمی شود وقتی که هیچ مقصدی برای تهیه Crossfade در دسترس نباشد. اکنون فقط از این ترکیب پرش خواهد کرد. ( IEB46E ، B/253299416 )
  • از ناوبری 2.5.3 : مسئله ای را که در آن حالت صرفه جویی شده (به عنوان مثال ، استفاده از rememberSaveable ) فراموش نشده و هنگام بیرون آمدن یک مقصد از پشته پشتی فراموش نشده و حذف نمی شود. ( i64949 )

به روز رسانی های وابستگی

نسخه 2.6.0-alpha02

5 اکتبر 2022

androidx.navigation:navigation-*:2.6.0-alpha02 منتشر می شود. نسخه 2.6.0-alpha02 شامل این تعهدات است.

تغییرات رفتار

  • هنگام انتقال شناسه نمودار ناوبری به AppBarConfiguration (مانند از طریق Menu ) ، NavigationUI اکنون فقط مقصد شروع آن نمودار ناوبری را به عنوان یک مقصد سطح بالا می داند ، نه اینکه به طور نادرست هر مقصد را در نمودار به عنوان یک مقصد سطح بالا مشخص کنید. رفتار عبور از شناسه یک مقصد فردی بدون تغییر است. این عملکرد مشابه از طریق عملکرد جدید isTopLevelDestination در AppBarConfiguration در دسترس است. ( IE936E ، B/238496771 )

رفع اشکال

  • navigation:navigation-fragment اکنون به نسخه 1.5.2 قطعه بستگی دارد. ( i00ba4 )
  • مورد منوی انتخاب شده دیگر هنگام حرکت به یک مقصد FloatingWindow مانند گفتگو ، دیگر به روز نمی شود. ( i4cde8 ، b/240308330 )

نسخه 2.6.0-alpha01

7 سپتامبر 2022

androidx.navigation:navigation-*:2.6.0-alpha01 منتشر می شود. نسخه 2.6.0-alpha01 شامل این تعهدات است.

ویژگی های جدید

  • ادغام های setupWithNavController در NavigationUI برای کار با نوار برنامه برتر ، اکنون مقادیر R.string را برای آرگومان های ReferenceType موجود در android:label . ( i5f803 ، b/167959935 )
  • NavDeepLink اکنون از مقادیر پیش فرض برای آرایه ها پشتیبانی می کند ، که امکان پشتیبانی از پارامترهای پرس و جو مکرر را فراهم می کند که به نوع آرایه آرگومان می پردازد. NavType همچنین اکنون یک روش پیش فرض را شامل می شود که می تواند برای ترکیب دو مقدار تجزیه شده بیش از حد باشد. ( id68c3 ، b/209977108 )
  • هنگام استفاده از رشته دقیق ${applicationId} به عنوان نگهدارنده مکان در app:data و app:dataPattern در عنصر فعالیت یک پرونده XML ناوبری ، محل نگهدارنده به طور خودکار با packageName متن پس از تورم پر می شود. ( iaabde ، b/234223561 )
  • تلاش برای ایجاد یک NavDeepLink خالی با استفاده از navDeepLink Kotlin DSL اکنون منجر به هشدار خط می شود که نشان می دهد یک پیوند عمیق به یک URI ، عمل و/یا mimetype نیاز دارد تا معتبر باشد. ( I08D2F ، B/154038883 )

API تغییر می کند

  • عملکرد جدید پسوند NavDestination را برای تجزیه برچسب های پویا با آرگومان در قالب android:label="{arg}" به رشته. با تجزیه مقادیر R.string در مقادیر رشته خود ، آرگومان های ReferenceType را پشتیبانی می کند. ( I07D89 ، B/236269380 )

تغییرات رفتار

  • arguments های Navbackstackentry و arguments منتقل شده به OnDestinationChangedListener اکنون فقط یک نسخه از استدلال های تغییر ناپذیر است که هنگام حرکت به مقصد ایجاد شده است. این بدان معناست که هرگونه تغییر در آن دسته از بسته ها در دسترسی های بعدی به arguments یا سایر موارد OnDestinationChangedListener منعکس نمی شود. ( i676f5 )

رفع اشکال

  • از ناوبری 2.5.2 : ناوبری پویا اکنون به درستی سعی در نصب مقصد فعالیت از سایر ماژول ها قبل از حرکت به آنها دارد. ( IA2C16 ، B/240292838 )
  • از ناوبری 2.5.2 : ناوبری اکنون هنگام حرکت به همان مقصد و تنظیم پرچم launchSingleTop به درستی ، نمونه قطعه را به درستی جایگزین می کند. ( i5a2f1 ، b/237374580 )
  • از ناوبری 2.5.2 : ثابت IllegalStateException ثابت ناشی از پیمایش به یک نمودار دوقلو که والدین را با یک مقصد جدید شروع می کند ، به اشتراک می گذارد. ( i9f7cb ، b/243778589 )

نسخه 2.5

نسخه 2.5.3

24 اکتبر 2022

androidx.navigation:navigation-*:2.5.3 منتشر می شود. نسخه 2.5.3 شامل این تعهدات است.

رفع اشکال

  • NavHost در صورت عدم وجود مقصدی برای تهیه Crossfade ، دیگر باعث ایجاد NoSuchElementException نمی شود. اکنون فقط از این ترکیب پرش خواهد کرد. ( IEB46E ، B/253299416 )
  • مسئله ای را برطرف کرد که در آن حالت آهنگسازی ذخیره شده (به عنوان مثال ، استفاده از rememberSaveable ) فراموش نشود و هنگام بیرون آمدن مقصد از پشته پشتی ، فراموش و حذف شد. ( i64949 )

نسخه 2.5.2

7 سپتامبر 2022

androidx.navigation:navigation-*:2.5.2 منتشر می شود. نسخه 2.5.2 شامل این تعهدات است.

رفع اشکال

  • ناوبری پویا اکنون به درستی سعی در نصب مقصد فعالیت از سایر ماژول ها قبل از حرکت به آنها دارد. ( IA2C16 ، B/240292838 )
  • ناوبری اکنون هنگام حرکت به همان مقصد و تنظیم پرچم launchSingleTop به درستی ، به درستی جایگزین نمونه قطعه خواهد شد. ( i5a2f1 ، b/237374580 )
  • ثابت IllegalStateException ثابت ناشی از پیمایش به یک نمودار دو توخالی که والدین را با یک مقصد شروع جدید به اشتراک می گذارد. ( i9f7cb ، b/243778589 )

به روزرسانی وابستگی

نسخه 2.5.1

27 جولای 2022

androidx.navigation:navigation-*:2.5.1 منتشر می شود. نسخه 2.5.1 شامل این تعهدات است.

رفع اشکال

  • Navigation Safe Args هنگام استفاده از انواع آرگومان سفارشی که در یک Bundle ذخیره می شوند ، دیگر باعث هشدارهای استهلاک در کلاسهای تولید شده نمی شوند. ( id86ed ، b/237725966 )

به روز رسانی های وابستگی

نسخه 2.5.0

29 ژوئن 2022

androidx.navigation:navigation-*:2.5.0 منتشر می شود. نسخه 2.5.0 شامل این تعهدات است.

تغییرات مهم از 2.4.0

  • ادغام CreationExtras - Navigation اکنون این توانایی را دارد که یک ViewModelProvider.Factory ارائه دهد. از طریق CreationExtras از طریق چرخه عمر 2.5.0 .

Safeargs Navigation

  • Navigation Safe Args وابستگی Android Gradle Plugin به ارتقاء به 7.0.4 ارتقا داده است و سازگاری را برای نسخه های AGP قبل از 7.0 کاهش می دهد.
  • پشتیبانی اضافه شده برای Namespace Build.Gradle ویژگی مورد استفاده به جای ApplicationID.

سایر تغییرات

  • API visibleEntries دیگر آزمایشی نیست و تابعی برای بازیابی تمام ورودی هایی که مقصد در حال حاضر مطابق با NavController قابل مشاهده است ، فراهم می کند.

نسخه 2.5.0-RC02

15 ژوئن 2022

androidx.navigation:navigation-*:2.5.0-rc02 منتشر می شود. نسخه 2.5.0-RC02 شامل این تعهدات است.

رفع اشکال

  • تصادف ناشی از تعویض سریع بین مقصد پایین هنگام استفاده از Navhost Compose NavHost را برطرف کرد. ( i3979a ، b/234054916 )
  • Navigation SafeArgs هنگام استفاده از یک applicationIdSuffix و Namespace با هیچ 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 )
  • قانون LINT UnrememberedGetBackStackEntryDetector به روز شده است تا اطمینان حاصل شود که فراخوان remember در مورد تماس با getBackStackEntry() نیز در یک شیء NavBackStackEntry به عنوان یک کلید عبور می کند. ( IB7081 ، B/227382831 )

نسخه 2.5.0-beta01

20 آوریل 2022

androidx.navigation:navigation-*:2.5.0-beta01 منتشر می شود. نسخه 2.5.0-beta01 شامل این تعهدات است.

رفع اشکال

  • DialogNavigator اکنون هنگام اجرای یک تماس dismiss() از popWithTransition استفاده می کند. این یک وضعیت مسابقه را هنگام استفاده از یک ViewModel در مقصد dialog که باعث ایجاد IllegalStateException در هنگام رد گفتگو با استفاده از سیستم عقب یا ضربه زدن به خارج از گفتگو برای خروج می شود ، برطرف می کند. ( id7376 ، b/226552301 )

به روز رسانی های وابستگی

  • ناوبری اکنون به چرخه عمر 2.5.0-beta01 بستگی دارد ، و در هنگام استفاده از چندین پشته پشتی ، یک IllegalStateException در یک NavHost در یک Navhost در یک NavHost در یک NAVHOST دیگر در یک NAVHOST در یک NAVHOST در یک NAVHOST ایجاد می کند.

نسخه 2.5.0-alpha04

6 آوریل 2022

androidx.navigation:navigation-*:2.5.0-alpha04 منتشر می شود. نسخه 2.5.0-alpha04 شامل این تعهدات است.

API تغییر می کند

رفع اشکال

  • Navhost اکنون به visibleEntries از NavController بستگی دارد تا مشخص کند کدام ورودی ها را تشکیل می دهند. این بدان معنی است که هنگام استفاده از Navhost تو در تو ، NavHost داخلی اکنون باید به درستی از بین برود. ( i4ba2b ، b/225394514 )
  • visibleEntries StateFlow ارائه شده توسط NavController اکنون به جای حالت چرخه عمر فعلی بر اساس حالت حداکثر چرخه حداکثر است. این بدان معنی است که حتی اگر چرخه عمر میزبان navController از زیر شروع شود ، لیست موارد قابل مشاهده یکسان خواهد بود. ( i9e2a8 ، b/225394514 )
  • SavedStateViewFactory اکنون از استفاده از CreationExtras پشتیبانی می کند حتی وقتی که با یک SavedStateRegistryOwner اولیه انجام شد. در صورت ارائه اضافی ، استدلال های اولیه نادیده گرفته می شوند. ( i6c43b ، b/224844583 )
  • NavDeepLink اکنون می تواند URIS را با یک پارامتر پرس و جو واحد و بدون ارزش تجزیه کند. ( i0efe8 ، b/148905489 )
  • رشته خالی اکنون به عنوان آرگومان های معتبر در پیوندهای عمیق در نظر گرفته شده است. ( i70a0d ، b/217399862 )
  • Navigation Safe Args هنگام استفاده از مکانهای نام دیگر خراب نمی شود و هیچ AndroidManifest.xml وجود ندارد. ( i17ccf ، b/227229815 )

نسخه 2.5.0-alpha03

23 فوریه 2022

androidx.navigation:navigation-*:2.5.0-alpha03 منتشر می شود. نسخه 2.5.0-alpha03 شامل این تعهدات است.

API تغییر می کند

  • اکنون می توانید برای ایجاد یک ViewModel در CreationExtras به by navGraphViewModels منتقل شوید. ( I29217 ، b/217618359 )

رفع اشکال

  • NavDeepLinks اکنون به درستی از شخصیت های خط جدید رمزگذاری شده تعبیه شده در مسیرها/URI های پیوند عمیق پشتیبانی می کند. ( 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() چه6د بسیاری خیلی خیلی خیلی خیلی خیلی خیلی خیلی بسیار بسیار بسیار بسیار بسیار بسیار بسیار بسیار بسیار بسیار بسیار چقدر کمترج IllegalStateException توسط آن ( i8a14d )
  • NavDeepLink S دیگر دو بار Args را رمزگشایی نمی کند ، به این معنی که آرگومان های مناسب اکنون به مقصد نهایی شما منتقل می شوند. ( i31b0a ، b/210711399 )

استدلال های امن

  • Args Safe اکنون به افزونه Android Gradle نسخه 7.0.4 بستگی دارد. این بدان معنی است که Args Safe Navigation دیگر قبل از 7.0 با نسخه های Android Studio سازگار نخواهد بود ، اما اکنون با افزونه Android Gradle 7.1.0 و بالاتر سازگار است. ( I41C88 ، B/213086135 ، B/207670704 )

نسخه 2.4.2

نسخه 2.4.2

6 آوریل 2022

androidx.navigation:navigation-*:2.4.2 منتشر می شود. نسخه 2.4.2 شامل این تعهدات است.

رفع اشکال

  • Backported از ناوبری 2.5.0-alpha03 : NavDeepLinks اکنون به درستی از شخصیت های خط جدید رمزگذاری شده تعبیه شده در مسیرها/URI های پیوند عمیق پشتیبانی می کند. ( i513d1 ، b/217815060 )
  • از ناوبری 2.5.0-alpha03 استفاده شده است: Navigation SafeArgs اکنون با استفاده از فضای نام تعریف شده در build.gradle به جای بسته در AndroidManifest پشتیبانی می کند. ( i659ef ، b/217414933 )
  • از ناوبری 2.5.0-alpha04 : Args 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 S دیگر دو بار Args را رمزگشایی نمی کند ، به این معنی که ARG های رمزگشایی شده به درستی اکنون به مقصد نهایی شما منتقل می شوند. ( i31b0a ، b/210711399 )
  • Backported از ناوبری 2.5.0-alpha01 : Args Safe اکنون به افزونه Android Gradle نسخه 7.0.4 بستگی دارد. این بدان معنی است که Args Safe Navigation دیگر قبل از 7.0 با نسخه های Android Studio سازگار نخواهد بود ، اما اکنون با افزونه Android Gradle 7.1.0 و بالاتر سازگار است. ( I41C88 ، B/213086135 ، B/207670704 )

نسخه 2.4.0

نسخه 2.4.0

26 ژانویه 2022

androidx.navigation:navigation-*:2.4.0 منتشر می شود. نسخه 2.4.0 شامل این تعهدات است.

تغییرات مهم از 2.3.0

  • تمام مصنوعات ناوبری در کوتلین بازنویسی شده اند. این امر باعث بهبودی کلاس ها با استفاده از ژنرال ها (مانند زیر کلاس های NavType ) شده است. تمام توابع پسوند Kotlin که قبلاً بخشی از مصنوعات -ktx بودند ، به مصنوعات اصلی مربوطه منتقل شده اند. آثار باستانی -ktx همچنان منتشر می شوند ، اما کاملاً خالی هستند.
  • مصنوعات navigation-fragment در حال حاضر حاوی اجرای پیش ساخته یک طرح دو صفحه از طریق AbstractListDetailFragment جدید است. این قطعه برای مدیریت یک صفحه لیست (که زیر کلاس شما در آن ارائه می دهد) و یک صفحه جزئیات ، که SlidingPaneLayout یک NavHostFragment به عنوان اجرای آن استفاده می کند ، استفاده می کند ، همانطور که در اجرای مثال ما مشاهده می شود.
  • روش currentBackStackEntryAsFlow() در NavController Flow فراهم می کند که هر زمان که NavBackStackEntry فعلی تغییر می کند ، منتشر می شود. این جریان می تواند به عنوان جایگزینی برای مدیریت دستی یک OnDestinationChangedListener استفاده شود.
  • NavController اکنون امکان بازیابی لیستی از کلیه موارد قابل مشاهده NavBackStackEntry به عنوان یک StateFlow از طریق خاصیت تجربی visibleEntries ارائه می دهد.
  • اکنون می توان کلاس NavType را برای ایجاد Navtypes سفارشی گسترش داد. انواع سفارشی فقط در هنگام ساختن نمودار ناوبری شما به صورت برنامه ای ، مانند از طریق نمودار ناوبری Kotlin DSL پشتیبانی می شود.
  • Navigation اکنون API های findStartDestination() و getHierarchy() را فراهم می کند که می تواند برای کمک به اجرای NavigationUI سفارشی استفاده شود. findStartDestination() یک تابع برنامه افزودنی در NavGraph است که مقصد شروع واقعی را که هنگام حرکت به نمودار نمایش داده می شود ، پیدا می کند ، حتی اگر startDestination خود یک NavGraph در تو باشد. getHierarchy() تابعی در مورد NavDestination است که می تواند برای تأیید اینکه آیا یک مقصد معین در سلسله مراتب دیگری قرار دارد ، استفاده شود.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • روشهای NavigationUI که از BottomNavigationView استفاده کرده است به روز شده است تا در عوض ، ابرقهرمان خود را در مواد 1.4.0 ، NavigationBarView معرفی کند. این اجازه می دهد تا از این روش ها با NavigationRailView استفاده شود.

  • هنگام باد کردن یک عنصر <action> از طریق XML ، ویژگی های انیمیشن می توانند از ویژگی های کشیده شده از موضوع شما با استفاده از app:enterAnim="?attr/transitionEnter" نحو.

  • Args Safe اکنون یک روش fromSavedStateHandle() را برای هر کلاس NavArgs ایجاد می کند. ( #122 ، b/136967621 )

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

مسیرهای ناوبری و Kotlin DSL

نسخه های قبلی ناوبری به هر مقصد متکی است که دارای یک شناسه عدد صحیح ثابت است که آن را منحصر به فرد از مقصد خواهر و برادر خود شناسایی می کند و به شما امکان می دهد تا مستقیم یا از طریق یک عمل به آن مقصد navigate() . در حالی که این امر همچنان معتبر و مفید است ، به ویژه در مواردی که نمودار ناوبری خود را در XML تعریف می کنید و می توانید از ثابت های R.id تولید شده توسط خودکار یا استدلال های ایمن استفاده کنید (که از آن ثابت برای تولید کد در زمان ساخت استفاده می کند) ، این سیستم از اعداد صحیح منحصر به فرد معنای معنایی و بیان مورد نیاز برای پشتیبانی از نمودارهای کاملاً پویا ساخته شده را به صورت برنامه ای در زمان اجرا از طریق ناوبری Kotlin DSL ضبط نکردند.

این نسخه گزینه جدیدی را برای شناسایی منحصر به فرد یک مقصد در یک نمودار ناوبری توسط مسیر خود معرفی می کند. یک مسیر String است که مسیر منحصر به فرد به یک مقصد را تعریف می کند. تمام روشهای Kotlin DSL که شناسه مقصد را گرفتند ، اکنون با یک API معادل که مسیری را طی می کند ، مستهلک می شوند و جایگزین می شوند.

هر مسیر باید به عنوان قسمت "مسیر" از Uri رفتار شود که آن مقصد را تعریف می کند ، به عنوان مثال ، home ، profile/{userId} ، profile/{userId}/friends و غیره. وقتی هویت یک مقصد با یک خاص همراه است مطالب ، آن استدلال های پویا باید بخشی از مسیر باشد ، پیروی از همان قوانینی که پیوندهای عمیق ضمنی دارند .

تمام API های NavController که قبلاً فقط شناسه می گرفتند ، اکنون دارای اضافه بار هستند که یک String مسیر را می گیرد. این شامل navigate() ، popBackStack() ، popUpTo() و getBackStackEntry() است.

این پیامدهای API داشته است:

  • خاصیت popUpTo کوتلین در Kotlin DSL به نفع popUpToId کاهش یافته است.
  • API getStartDestination() به نفع getStartDestinationId() کاهش یافته است.

بر خلاف هنگام پیمایش توسط شناسه ، پیمایش از طریق مسیر همان قوانینی را دنبال می کند که پیوندهای عمیق ضمنی در آن می توانید به طور مستقیم به هر مقصد در هر نمودار توخالی حرکت کنید ، و اطمینان حاصل کنید که این مسیرها در پروژه های چند ماژول قابل استفاده هستند بدون اینکه صریحاً یک لینک عمیق قابل مشاهده را اضافه کنند. به هر مقصد

ناوبری

مصنوعات navigation-compose بین مؤلفه ناوبری و آهنگسازی JetPack را فراهم می کند. از توابع @Composable به عنوان مقصد در برنامه شما استفاده می کند.

این نسخه ارائه می دهد:

  • یک ترکیب NavHost که به شما امکان می دهد نمودار ناوبری خود را از طریق Kotlin DSL ، با استفاده از مقصد های composable و dialog ، به علاوه پشتیبانی از ناوگان های اختیاری مانند مواد از مواد ناوبری همراهی بسازید.
  • پشتیبانی اجباری برای تقاطع بین مقصد. انیمیشن ناوبری همراه می تواند برای کنترل انتقال Enter و خروج با استفاده از API های ترکیب آزمایشی استفاده شود.
  • جابجایی Lifecycle به هر مقصد ترکیب. هر مقصد فقط هنگامی که هرگونه انتقال RESUMED به پایان می رسد و بلافاصله از زمان شروع هرگونه انتقال خروجی به STARTED می رسد ، به حالت رزومه می رسد ، بنابراین به شما امکان می دهد با ایجاد یک تماس navigate هنگام RESUMED Lifecycle ، از همه موارد IllegalStateException و چند لمسی جلوگیری کنید.
  • Scoping of ViewModel (از طریق viewModel() API از چرخه عمر ViewModel 2.4.0 یا hiltViewModel() از Navigation Hilt 1.0.0 را در سطح مقصد تشکیل می دهد ، زمینه ای را فراهم می کند که از تغییرات پیکربندی زنده مانده و در قسمت پشتی شما قرار دارد (هنگامی که سازنده شما است. محتوا در غیر این صورت دفع شده است) و سیگنال در onCleared() که نشان دهنده دائمی است دفع و تمیز کردن دولت در ارتباط با آن NavBackStackEntry .
  • Scoping از حالت 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() یا ایجاد دکمه عقب سیستم ، آنها را از بین می برد. The existing NavOptions class and the integration into <action> elements in the navigation graph XML has been expanded to support saving and restoring the back stack.

As part of this change, the NavigationUI methods of onNavDestinationSelected() , BottomNavigationView.setupWithNavController() and NavigationView.setupWithNavController() now automatically save and restore the state of popped destinations, enabling support for multiple back stacks without any code changes. When using Navigation with Fragments, this is the recommended way to integrate with multiple back stacks.

The underlying APIs for saving and restoring the state are exposed via a number of surfaces:

  • In Navigation XML, the <action> element can now use the boolean attributes of app:popUpToSaveState and app:restoreState to save the state of any destinations popped via app:popUpTo and restore the state associated with the destination passed as the 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” />
    
  • In the navOptions Kotlin DSL , you can add the restoreState boolean property and the saveState boolean property on the popUpTo builder :

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • In manually building a NavOptions object via the NavOptions.Builder , you can use the setRestoreState() and new overload to setPopUpTo() that takes an additional saveState parameter.

    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);
    
  • Programmatic calls to popBackStack() can now include an additional saveState parameter.

  • You can use the clearBackStack() method to clear any state that was saved with popBackStack() or popUpToSaveState .

In all cases, the NavController will save and restore the state of each NavBackStackEntry , including any navigation destination scoped ViewModel instances. The Navigator APIs have been updated to enable each Navigator to support saving and restoring their own state.

تغییر رفتار

  • NavDeepLinkBuilder now adds PendingIntent.FLAG_IMMUTABLE to the PendingIntent returned by createPendingIntent() , ensuring that this API works as expected when targeting Android 12.
  • Navigation now depends on Lifecycle 2.3.1 and now marks setGraph() , popBackStack() , navigateUp() , and navigate() , the methods that update the NavBackStackEntry Lifecycle , as @MainThread , aligning Navigation with the main thread enforcement introduced in Lifecycle 2.3.0 .
  • Deep links now verify that all required arguments (those without default values) are present in the Uri .
  • NavDeepLink parsed arguments now consider pound signs in the same way as question marks as a separator between path segments, preventing an argument from spanning across the pound sign.
  • When generating actions, Kotlin code generated from Safe Args now puts arguments without default values before those with default values as parameters.
  • When generating arguments, Safe Args now puts parameters without default values before those with default values.
  • Safe-Args now depends on Android Gradle Plugin 4.2.0. This means you should no longer get the using applicationIdTextResource warning.

مسائل شناخته شده

  • Fixed in Navigation 2.5.0-alpha01 : accessing a ViewModel created via by navGraphViewModels() from a Fragment's onCreate() will fail with an IllegalStateException . ( b/213504272 )
  • Fixed in Navigation 2.5.0-alpha01 : Safe Args 2.4.0 is incompatible with Android Gradle Plugin 7.1.0 and higher. ( b/213086135 )
  • Deep linking with multiple nested nav graphs doesn't correctly create the full backstack. ( b/214383060 )

Version 2.4.0-rc01

15 دسامبر 2021

androidx.navigation:navigation-*:2.4.0-rc01 is released. Version 2.4.0-rc01 contains these commits.

تغییر رفتار

  • NavDeepLink parsed arguments now consider pound signs in the same way as question marks as a separator between arguments. ( I21309 , b/180042703 )

رفع اشکال

  • Deeplinks will no longer ignore arguments with values that are the same as the name of the placeholder. ( If8017 , b/207389470 )
  • NavController will no longer crash when popping a nested destination using transitions after the NavController has been restored. ( I0f7c9 , b/205021623 )
  • The error message when using an invalid startDestination will now default to the start destination's route if one is available. ( I86b9d , b/208041894 )

Navigation Compose Bug Fixes

  • Fixed potential crash caused by fast switching between the start destination and another destination using bottom nav menu items. ( Ic8976 , b/208887901 )
  • Dialog destination are now properly restored on top of the screen after config changes or process death. ( I4c0dc , b/207386169 )
  • Fixed an issue where attempting to retrieve a ViewModel from a dialog's NavBackStackEntry would fail when the dialog was dismissed. ( I6b96d , b/206465487 )
  • Fixed an issue when using activity destinations with Navigation Compose's NavHost that would result in infinite recompositions. ( I8f64c )
  • Fixed a leak in Navigation Compose where it was holding on to a reference of the old activity after a config change or process death. ( I4efcb , b/204905432 )

Safe Args Bug Fixes

  • SafeArgs no longer crashes when attempting to restore custom parcelable arrays after process death. ( I618e8 , b/207315994 )
  • Fixed a bug in safe args that would not allow boolean arrays to have a null value. ( I8c396 , b/174787525 )

Version 2.4.0-beta02

3 نوامبر 2021

androidx.navigation:navigation-*:2.4.0-beta02 is released. Version 2.4.0-beta02 contains these commits.

API Changes

  • The handling of both explicit and implicit deep links now automatically adds the saveState flag when navigating to another graph, ensuring that code such as NavigationUI.setupWithNavController and code using multiple back stacks works as expected. ( Ic8807 )

تغییرات رفتار

  • Deep link patterns are now compiled lazily in NavDeepLink instead of during inflation. This should improve the inflation time of navigation graphs that include deep links. ( b8d257 , b/184149935 )

رفع اشکال

  • Fixed an issue where NavBackStackEntries were being pushed down to Lifecycle.State.CREATED after moving to Lifecycle.State.STARTED when the NavHost is added directly to the activity's setContent() . ( Ia5ac1 , b/203536683 )
  • Fixed a race condition where popping a DialogFragment destination off of the back stack before the dialog was actually shown would not actually dismiss the dialog, resulting in a crash when the errant dialog was manually dismissed by the user. ( I687e5 )
  • Fixed an issue where the onNavDestinationSelected API on NavigationUI would return true even if you didn't actually navigate() to that navigation graph. It now uses the same logic used internally by setupWithNavController to only select the MenuItem associated with the current destination using the hierarchy of the destination. ( I2b053 )

Version 2.4.0-beta01

27 اکتبر 2021

androidx.navigation:navigation-*:2.4.0-beta01 is released. Version 2.4.0-beta01 contains these commits.

ویژگی های جدید

  • You can now use by navGraphViewModel with a route as an alternative to using an ID so as to better support using the Navigation Kotlin DSL with Fragments. ( I901e3 , b/201446416 )

API Changes

  • The visibleEntries API is now experimental. ( I93f6f )

رفع اشکال

  • ViewModels will no longer be destroyed when transitions are interrupted by navigating back and forth between the same screens ( Id52d8 , b/200817333 )
  • Nullable NavDeepLink arguments no longer require a default value when adding deep links to NavDestination s. ( I5aad4 , b/201320030 )
  • NavBackStackEntries now with different Lifecycles are not longer considered equal. This means NavHost will properly recompose all destinations when doing navigation with singleTop and when reselecting bottom menu items. ( I1b351 , b/196997433 )
  • Fixed an issue with AbstractListDetailFragment that caused the layout_width and layout_weight attributes on the list pane returned by onCreateListPaneView() to be incorrectly handled or ignored. ( f5fbf3 )
  • The visual state of dialog destinations now correctly stays in sync with the DialogFragmentNavigator 's state. This means that manually calling the asynchronous dismiss() API for DialogFragment now properly clears all dialog destinations above the now dismissed dialog. This does not affect cases where you use popUpTo or popBackStack() to dismiss your dialog. ( I77ba2 )
  • AbstractAppBarOnDestinationChangedListener now has clearer error messaging for onDestinationChanged() . ( Ie742d )

Version 2.4.0-alpha10

29 سپتامبر 2021

androidx.navigation:navigation-*:2.4.0-alpha10 is released. Version 2.4.0-alpha10 contains these commits.

ویژگی های جدید

  • NavController now offers the ability to retrieve a list of all visible NavBackStackEntry instances via the visibleEntries StateFlow ( Ia964e )
  • rememberNavController() now takes a optional set of Navigator instances that will be added to the returned NavController to better support optional Navigators such as those from Accompanist Navigation Material . ( I4619e )

رفع اشکال

  • Dynamic Navigation will no longer crash when the Activity is recreated. ( Ifa6a3 , b/197942869 )
  • Fixed an issue with the system back button that occurs only after popping back to a composable destination that contains a NavHost . ( 3ed148 , b/195668143 )
  • SafeArgs now generates the arguments for fromBundle() and fromSavedStateHandle() in the proper parameter order. ( I824a8 , b/200059831 )

Version 2.4.0-alpha09

15 سپتامبر 2021

androidx.navigation:navigation-*:2.4.0-alpha09 is released. Version 2.4.0-alpha09 contains these commits.

ویژگی های جدید

  • You can now use the clearBackStack() method to clear any state that was saved with popBackStack() or popUpToSaveState . ( I80a0f )
  • You can now pass in a list of arguments and/or deep links to your nested navigation graph's builder and they will automatically be added to the resulting graph. ( I8a470 , b/182545357 )

API Changes

  • The navArgument Kotlin DSL function is now part of navigation-common instead of navigation-compose . This will require updating imports to continue to use this function. ( I1d095 )

تغییرات رفتار

  • When generating arguments, Safe Args now puts parameters without default values before those with default values. ( I89709 , b/198493585 )

رفع اشکال

  • When using Navigation Compose, NavGraphs will only be DESTROYED once all their children are DESTROYED . ( I86552 , b/198741720 )
  • Nullable NavDeepLink arguments no longer require a default value. ( Ia14ef , b/198689811 )
  • Calling setGraph() with a new graph will now also clear any saved back stacks in addition to its previous behavior of popping the back stack. ( I97f96 )
  • Fixed an issue where OnDestinationChangedListener instances and the currentBackStackEntryFlow were not notified when using launchSingleTop . ( Iaaebc )

به روز رسانی های وابستگی

Version 2.4.0-alpha08

1 سپتامبر 2021

androidx.navigation:navigation-*:2.4.0-alpha08 is released. Version 2.4.0-alpha08 contains these commits.

ویژگی های جدید

  • It is now possible to extend the NavType class to create custom NavTypes. Custom types are supported only when building your navigation graph programmatically, such as via the Navigation Graph Kotlin DSL . ( I78440 , b/196871885 )

تغییرات رفتار

  • When generating actions, Kotlin code generated from Safe Args now puts arguments without default values before those with default values as parameters. ( Idb697 , b/188855904 )
  • Deep links now verify that all required arguments (those without default values) are present in the Uri . ( #204 , b/185527157 )

رفع اشکال

  • Using getBackStackEntry and previousBackStackEntry inside composable(), in conjunction with remember() , will no longer cause an exception for no destination being on the back stack. ( I75138 , b/194313238 )
  • Navigation Compose now properly recomposes when changing back stack arguments and using launchSingleTop=true . ( Iebd69 , b/186392337 )
  • There will no longer be an ArrayIndexOutOfBoundsException when calling setGraph with a graph with 13 or 29 destinations. ( I1a9f1 , b/195171984 )
  • The SafeArgs java generator should no longer cause lint warnings when generating Args classes. ( I1a666 , b/185843837 )

External Contribution

  • Thanks ospixd for ensuring that deep links verify that all required arguments (those without default values) are present in the Uri . ( #204 , b/185527157 )

Version 2.4.0-alpha07

18 آگوست 2021

androidx.navigation:navigation-*:2.4.0-alpha07 is released. Version 2.4.0-alpha07 contains these commits.

رفع اشکال

  • Navigation Compose now properly saves state after configuration changes and when changing graphs while using the multiple back stack feature. ( If5a3d , b/195141957 )
  • Re-selecting the same tab when using navigation compose with multiple back stacks will no longer result in a blank screen. ( I860dc , b/194925622 )
  • NavHost now observes for changes in the Lifecycle.State of NavBackStackEntry s which means using a NavHost in a fragment now will properly be recomposed as the lifecycle changes instead of resulting in a blank screen. ( I4eb85 , b/195864489 )
  • Fixed an issue where dismissing a DialogFragment would not correctly update the NavController state after recreating your activity (ie, after a configuration change). ( Icd72b )
  • Fixed an issue where popping a dialog destination would not update the NavController's system back button handling, potentially causing the NavController to intercept the back button even though it does not have any back stack to pop. ( If3b34 )
  • Safe-args now automatically generates a toSavedStateHandle method for arguments which can be used to test your ViewModel code. ( If1e2d , b/193353880 )

Version 2.4.0-alpha06

4 آگوست 2021

androidx.navigation:navigation-*:2.4.0-alpha06 is released. Version 2.4.0-alpha06 contains these commits.

API Changes

  • The requireSlidingPaneLayout() and requireDetailPaneNavHostFragment() methods on AbstractListDetailFragment have been renamed to getSlidingPaneLayout() and getDetailPaneNavHostFragment() , respectively. ( I34a08 )

تغییرات رفتار

  • When navigating with animations (like Crossfade ), the new destination's Lifecycle will now only reach the RESUMED when the animation completes. ( If0543 , b/172112072 , b/194301889 )
  • Navigation Compose's NavHost now sets the graph as part of the first composition. ( Ieb7be )

رفع اشکال

  • Popping the last destination of a navigation graph no longer throws a ClassCastException . ( If0543 , b/172112072 , b/194301889 )
  • Fixed a NullPointerException that would occur when adding a deep link without a Uri and navigating via a route or deep link. ( 938a0c , b/193805425 )
  • Fixed an issue in Navigation Compose where a deep linked NavBackStackEntry would not reach the RESUMED state. ( I192c5 )
  • Fixed an issue where popping a dialog destination would not update the NavController's system back button handling, potentially causing the NavController to intercept the back button even though it does not have any back stack to pop. ( aosp/1782668 )

Version 2.4.0-alpha05

21 جولای 2021

androidx.navigation:navigation-*:2.4.0-alpha05 is released. Version 2.4.0-alpha05 contains these commits.

تغییرات رفتار

  • Navigation Compose's NavHost now always uses Crossfades when navigating through destinations. ( I07049 , b/172112072 )
  • You can now make changes to the graph of a NavHost. Graphs with the same startDestination and destinations in the graph will be considered equal and will not clear the NavController back stack. ( I0b8db , b/175392262 )

رفع اشکال

  • Fixed a NoSuchElementException when calling popBackStack() from within a LifecycleObserver attached to a NavBackStackEntry caused by reentrant updates to the NavController's state. ( I64621 )
  • AbstractListDetailFragment now allows SlidingPaneLayout to be completely stripped from your APK when AbstractListDetailFragment is not used. ( I611ad )
  • NavGraph and NavDestination now override the equals method so two objects with the same values will be considered equal. ( I166eb , b/175392262 )

Version 2.4.0-alpha04

1 ژوئیه 2021

androidx.navigation:navigation-*:2.4.0-alpha04 is released. Version 2.4.0-alpha04 contains these commits.

ویژگی های جدید

  • The navigation-fragment artifact now contains a prebuilt implementation of a two pane layout via the new AbstractListDetailFragment . This fragment uses a SlidingPaneLayout to manage a list pane (which your subclass provides) and a detail pane, which uses a NavHostFragment as its implementation, as seen in our example implementation . ( Iac4be , b/191276636 )
  • The NavHost of the navigation-compose artifact now supports dialog destinations in addition to composable destinations. These dialog destinations will each be shown within a Composable Dialog , floating above the current composable destination. ( 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()
            }
        }
    }

API Changes

  • The add function in NavigatorState has been renamed to push . All current calls to add() will need to be changed to push(). ( Ie89fc , b/172112072 )
  • Custom Navigator instances can now use the pushWithTransaction and popWithTransition APIs on NavigatorState to push or pop a destination asynchronously. Note that this APIs are not yet used by any of the included navigators. ( Ic4d7c , b/172112072 )

تغییرات رفتار

  • NavDeepLinkBuilder now adds PendingIntent.FLAG_IMMUTABLE to the PendingIntent returned by createPendingIntent() , ensuring that this API works as expected when targeting Android 12. ( If8c52 )

رفع اشکال

  • Fixed an issue with <include-dynamic> where arguments passed to the graph would not be correctly passed to the dynamically included graph. ( I3e115 )
  • Fixed a NullPointerException when navigating to a destination using a string[] argument with a default value of @null . ( I1fbe8 )
  • Add ProGuard rules for @Navigator.Name , fixing issues when using R8 3.1 full mode. ( I2add9 , b/191654433 )
  • SafeArgs will no longer fail when building your app with Kotlin versions before 1.5.0 . ( Icd1ff , b/190739257 )

Version 2.4.0-alpha03

16 ژوئن 2021

androidx.navigation:navigation-*:2.4.0-alpha03 is released. Version 2.4.0-alpha03 contains these commits.

رفع اشکال

  • Fixed an issue where two navigate() calls were needed to navigate to an included dynamic graph. ( I7785c , b/188859835 )
  • Fixed a regression introduced in Navigation 2.4.0-alpha01 where setupActionBarWithNavController() would not properly remove the Up icon when you are on a top level destination. ( I5d443 , b/189868637 )
  • Fixed an IllegalStateException when calling popBackStack() after previously popping the root graph of the NavController. ( I2a330 , b/190265699 )
  • ProGuard rules for by navArgs() now properly apply when using navigation-common or any artifacts that depend on it. ( I68800 , b/190082521 )
  • An OnDestinationChangedListener that calls navigate() the first time it receives a callback now properly get a second callback with the destination it navigated to. ( Ie5f9e , b/190228815 )
  • Safe Args no longer crashes when using it with dynamic feature modules and AGP 7.0+. ( I69518 , b/189966576 )

Known Issue

  • Safe Args will fail with an Unable to find method ''java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)'' error when using Gradle 6.7.0 due to a dependency on an older version of Kotlin. This can be worked around by updating to use Gradle 7.0. ( b/190739257 )

Version 2.4.0-alpha02

2 ژوئن 2021

androidx.navigation:navigation-*:2.4.0-alpha02 is released. Version 2.4.0-alpha02 contains these commits.

ویژگی های جدید

  • Routes are now supported for Activity, Fragment and Dialog destinations, as well as throughout the DynamicNavigation Kotlin DSL. ( Ib5544 , Ia617b , I22f96 , b/188914648 , b/188901565 )
  • NavigationUI has temporarily added experimental APIs to allow opting out of saving your state. While always saving the state is the correct behavior, there are still uses of deprecated libraries (ie retained fragments), that cannot be supported when saving the state so this gives an opportunity for apps to slowly convert away from any unsupported APIs. ( Idf93c )
  • Navigation now provides findDestination() and getHierarchy() APIs that can be used to help implement custom NavigationUI. findDestination() is an extension function on NavGraph that will locate a destination within the graph. getHierarchy() is a function on NavDestination that can be used to verify if a given destination is within the hierarchy of another.( I2932f , b/188183365 )

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • NavigationUI methods that took a BottomNavigationView have been updated to instead take its superclass introduced in Material 1.4.0 , NavigationBarView . This allows these methods to be used with the NavigationRailView . ( Ib0b36 , b/182938895 )

  • When inflating an <action> element via XML, animation attributes can use attributes pulled from your theme using the app:enterAnim="?attr/transitionEnter" syntax. ( I07bc1 , b/178291654 )

API Changes

رفع اشکال

  • DialogFragmentNavigator now uses the NavigatorState.pop() API to inform the NavController when a dialog is dismissed by hitting the system back button or clicking outside of it, ensuring that the NavController state is always in sync with the Navigator's state. ( I2ead9 )
  • Navigation no longer gives a ConcurrentModificationException when using manipulating the list of OnDestinationChangedListeners from with an onDestinationChanged callback. ( Ib1707 , b/188860458 )

  • Safe Args no longer crashes when attempting to generate direction properties in Kotlin. ( Id2416 , b/188564435 )

  • The setId method on NavDestination is now properly annotated with @IdRes , so it only accepts resource ids. ( I69b80 )

  • The int parameter of findNode is now resId instead of resid . ( I7711d )

Dependency Update

  • Safe-Args now depends on Android Gradle Plugin 4.2.0. This means you should no longer get the using applicationIdTextResource warning. ( I6d67b , b/172824579 )

Version 2.4.0-alpha01

18 مه 2021

androidx.navigation:navigation-*:2.4.0-alpha01 is released. Version 2.4.0-alpha01 contains these commits.

ویژگی های جدید

  • The currentBackStackEntryAsFlow() method on NavController provides a Flow that emits whenever the current NavBackStackEntry changes. This flow can be used as an alternative to manually managing an OnDestinationChangedListener . ( I19c4a , #89 , b/163947280 )

پشته های متعدد

The NavController is responsible for managing the back stack of destinations, adding destinations to the back stack when you navigate() to them and removing them when you call popBackStack() or trigger the system back button. The existing NavOptions class and the integration into <action> entries in the navigation graph XML has been expanded to support saving and restoring the back stack. ( b/80029773 )

As part of this change, the NavigationUI methods of onNavDestinationSelected() , BottomNavigationView.setupWithNavController() and NavigationView.setupWithNavController() now automatically save and restore the state of popped destinations, enabling support for multiple back stacks without any code changes. When using Navigation with Fragments, this is the recommended way to integrate with multiple back stacks. ( Ie07ca )

The underlying APIs for saving and restoring the state are exposed via a number of surfaces:

  • In Navigation XML, the <action> element can now use the boolean attributes of app:popUpToSaveState and app:restoreState to save the state of any destinations popped via app:popUpTo and restore the state associated with the destination passed as the 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” />
    
  • In the navOptions Kotlin DSL , you can add the restoreState boolean property and the saveState boolean property on the popUpTo builder :

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • In manually building a NavOptions object via the NavOptions.Builder , you can use the setRestoreState() and new overload to setPopUpTo() that takes an additional saveState parameter.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Programmatic calls to popBackStack() can now include an additional saveState parameter.

In all cases, the NavController will save and restore the state of each NavBackStackEntry , including any navigation destination scoped ViewModel instances. The Navigator APIs have been updated to enable each Navigator to support saving and restoring their own state.

The ComposeNavigator used for composable destinations in Navigation Compose and the FragmentNavigator and DynamicFragmentNavigator used for <fragment> destinations in Navigation with Fragments have both been updated to use the new Navigator APIs and support saving and restoring state.

Navigation Routes

A route is a String that uniquely identifies a destination. While previously only used in Navigation Compose , this concept has now graduated to become a part of the core Navigation APIs. This provides an alternative to using integer IDs when constructing your graph through the Navigation Kotlin DSL . ( b/172823546 )

All APIs that used to only take an ID now have an overload that takes a route String . This includes navigate() , popBackStack() , popUpTo() , and getBackStackEntry() .

This has had some API implications:

  • The popUpTo kotlin property on the Kotlin DSL has been deprecated in favor of popUpToId . ( I59c73 , b/172823546 )
  • The getStartDestination() API has been deprecated in favor of getStartDestinationId() . ( I0887f , b/172823546 )

For developers upgrading from previous versions of Navigation Compose to Navigation Compose 2.4.0-alpha01 , this means that the following imports on extension methods are no longer necessary and should be removed:

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

The KEY_ROUTE argument has been replaced with the route property on NavDestination , allowing you to call navBackStackEntry.destination.route directly.

API Changes

  • All Navigation artifacts have been rewritten in Kotlin. This has improved the nullability of classes using generics (such as NavType subclasses). All Kotlin extension functions that used to be part of the -ktx artifacts have been moved to their respective main artifacts. The -ktx artifacts will continue to be published, but are completely empty. ( b/184292145 )
  • NavDeepLinkBuilder now supports adding multiple distinct destinations to the generated back stack. ( I3ee0d , b/147913689 )
  • Add factory functions for DynamicNavHostFragment ( Icd515 , b/175222619 )
  • The unique ID of a NavBackStackEntry is now exposed as part of its public API. ( Ie033a )
  • The name and argument fields and destructuring functions of NamedNavArgument are now public. ( #174 , b/181320559 )
  • Introduced a new NavBackStackEntry#provideToCompositionLocals extension that provides the NavBackStackEntry to the relevant composition locals. ( #175 , b/187229439 )

Safe Args

  • Safe Args now generates a fromSavedStateHandle() method for each NavArgs class. ( #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)
    }
    
  • Updated Safe Args to depend on KotlinPoet 1.8.0 . ( #172 , b/183990444 )

تغییرات رفتار

  • Navigation now depends on Lifecycle 2.3.1 and now marks setGraph() , popBackStack() , navigateUp() , and navigate() , the methods that update the NavBackStackEntry Lifecycle , as @MainThread , aligning Navigation with the main thread enforcement introduced in Lifecycle 2.3.0 . ( b/171125856 )
  • Parsing Enum arguments from deep links is now case insensitive, allowing a deep link like http://www.example.com/red to match a www.example.com/{color} deep link even when the enum has the value of RED . ( #152 , b/135857840 )

Compose Compatibility

  • androidx.navigation:navigation-compose:2.4.0-alpha01 is only compatible with Compose version 1.0.0-beta07 and above.

رفع اشکال

  • Fixed an issue where trailing argument placeholders would take precedence over deep links that have a matching exact suffix. ( #153 , b/184072811 )
  • NavHostFragment now supports custom Navigators that use the same @Navigator.Name("dialog") as the default DialogFragmentNavigator . ( Ib1c2c , b/175979140 )
  • Improved the behavior of NavigatorProvider#addNavigator to ensure that calling it repeatedly with the same instance does not cause issues. ( #176 , b/187443146 )

External Contributions

  • Thanks simonschiller for building support for Safe Args generating a fromSavedStateHandle() method for each NavArgs class. ( #122 , b/136967621 )
  • Thanks Bradleycorn for making parsing Enum arguments from deep links case insensitive. ( #152 , b/135857840 )
  • Thanks osipxd for fixing an issue where trailing argument placeholders would take precedence over deep links that have a matching exact suffix. ( #153 , b/184072811 )
  • Thanks tatocaster for updating Safe Args to depend on KotlinPoet 1.8.0 . ( #172 , b/183990444 )
  • Thanks jossiwolf for making the name and argument fields and destructuring functions of NamedNavArgument public. ( #174 , b/181320559 )
  • Thanks jossiwolf for introducing a new NavBackStackEntry#provideToCompositionLocals extension that provides the NavBackStackEntry to the relevant composition locals. ( #175 , b/187229439 )
  • Thanks jossiwolf for improved the behavior of NavigatorProvider#addNavigator to ensure that calling it repeatedly with the same instance does not cause issues. ( #176 , b/187443146 )

Version 1.0.0-alpha10

7 آوریل 2021

androidx.navigation:navigation-compose:1.0.0-alpha10 is released. Version 1.0.0-alpha10 contains these commits.

API Changes

  • NavHost now accepts a Modifier , which is passed down to the composable container that wraps the destination composables. ( I85aca , b/175125483 )

رفع اشکال

  • NavHost now works even when an OnBackPressedDispatcherOwner is not found, such is the case when previewing the NavHost . ( I7d8b4 )
  • Navigation Compose now depends on Navigation 2.3.5 , fixing an issue when using BackHandler inside a NavHost destination. ( I7e63b , b/182284739 )

Version 1.0.0-alpha09

10 مارس 2021

androidx.navigation:navigation-compose:1.0.0-alpha09 is released. Version 1.0.0-alpha09 contains these commits.

API Changes

  • LocalViewModelStoreOwner.current now returns a nullable ViewModelStoreOwner to better determine whether a ViewModelStoreOwner is available in the current composition. APIs that require a ViewModelStoreOwner , such as viewModel() and NavHost , still throw an exception if a ViewModelStoreOwner is not set. ( Idf39a )

رفع اشکال

  • Navigation Compose now depends on Navigation 2.3.4 which includes the fix for attempting to set the same ViewModelStore object after the graph has been set. ( I65c24 , b/177825470 )

Version 1.0.0-alpha08

24 فوریه 2021

androidx.navigation:navigation-compose:1.0.0-alpha08 is released. Version 1.0.0-alpha08 contains these commits.

ویژگی های جدید

  • NavHost now populates the LocalSavedStateRegistryOwner CompositionLocal with that destination's NavBackStackEntry , ensuring that any state directly saved into the SavedStateRegistry will be saved and restored alongside the destination. ( I435d7 , b/179469431 )

Version 1.0.0-alpha07

10 فوریه 2021

androidx.navigation:navigation-compose:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.

به روز رسانی های وابستگی

Version 1.0.0-alpha06

28 ژانویه 2021

androidx.navigation:navigation-compose:1.0.0-alpha06 is released. Version 1.0.0-alpha06 contains these commits.

API Changes

  • Added a getBackStackEntry(route: String) extension method on NavController that returns the associated NavBackStackEntry . ( If8931 )

Version 1.0.0-alpha05

13 ژانویه 2021

androidx.navigation:navigation-compose:1.0.0-alpha05 is released. Version 1.0.0-alpha05 contains these commits.

Updated to depend on Compose 1.0.0-alpha10.

Version 1.0.0-alpha04

16 دسامبر 2020

androidx.navigation:navigation-compose:1.0.0-alpha04 is released. Version 1.0.0-alpha04 contains these commits.

  • Updated for compatibility with Compose 1.0.0-alpha09 .

Version 1.0.0-alpha03

2 دسامبر 2020

androidx.navigation:navigation-compose:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.

رفع اشکال

  • Fixed an issue where popBackStack() and navigateUp() would not work after a configuration change or process death and recreation. ( Icea47 , b/173281473 )
  • Navigating to a nested graph within your NavHost now works properly. ( I0948d , b/173647694 )

Version 1.0.0-alpha02

11 نوامبر 2020

androidx.navigation:navigation-compose:1.0.0-alpha02 is released. Version 1.0.0-alpha02 contains these commits.

API Changes

  • Navigation compose now support NavOptions for using popUpTo and launchSingleTop operations ( If96c3 , b/171468994 )
  • Added a navigation function that takes a route instead of an ID that allows you to construct nested graphs in the Navigation Compose DSL. ( I1661d )
  • startDestination now comes before the route in the list of a parameters for a NavHost ( Ie620e )
  • You can now create a graph using the route as a start destination outside of a NavHost composable. ( Iceb75 )

Version 1.0.0-alpha01

28 اکتبر 2020

android.navigation:navigation-compose:1.0.0-alpha01 is released. Version 1.0.0-alpha01 contains these commits.

ویژگی های جدید

The navigation-compose artifact provides integration between the Navigation Component and Jetpack Compose . It uses @Composable functions as the destinations in your application.

This initial release provides:

  • A NavHost composable that allows you to construct your navigation graph via a Kotlin DSL.
  • Scoping of lifecycle, ViewModel , and remembered state at the destination level.
  • Automatic integration with the system back button.
  • Support for passing arguments, attaching deep links to destinations, and returning a result to previous destinations.
  • Compose specific helpers in rememberNavController() and currentBackStackEntryAsState() to allow hoisting state and connecting the NavController to composables outside of the NavHost (such as a bottom navigation bar).

See the Compose Navigation guide for more information.

نسخه 2.3.5

نسخه 2.3.5

7 آوریل 2021

androidx.navigation:navigation-*:2.3.5 is released. Version 2.3.5 contains these commits.

ویژگی های جدید

  • When navigating using a NavDeepLinkRequest or Uri , you can now access the Uri , action, and mime type in the resulting destination by getting the intent from arguments via KEY_DEEP_LINK_INTENT , mirroring the functionality already available for external deep linking. ( I975c3 , b/181521877 )

رفع اشکال

  • OnBackPressedCallbacks added to a dispatcher with the NavBackStackEntry as the LifecycleOwner now properly intercept back after the Activity Lifecycle is STOPPED , then STARTED ( Iff94f , b/182284739 )
  • Deep link domain parsing is now case insensitive, ensuring that www.example.com matches both www.example.com and www.Example.com . Note that query parameter names are still case sensitive. ( #144 , b/153829033 )
  • Fixed a NullPointerException that could occur when a destination has multiple non-nullable default arguments and you navigate to that destination while only overriding a subset of those arguments. ( aosp/1644827 )

به روز رسانی های وابستگی

External Contribution

نسخه 2.3.4

نسخه 2.3.4

10 مارس 2021

androidx.navigation:navigation-*:2.3.4 is released. Version 2.3.4 contains these commits.

ویژگی های جدید

  • ReferenceType arguments can now be properly parsed when sent as part of a deeplink URI. This supports both the raw integer value as well as hex values prefixed by 0x . ( #127 , b/179166693 )
  • The android:defaultValue for an argument with app:argType="float" now supports integer default values, allowing you to use android:defaultValue="0" rather than requiring the use of 0.0 . ( #117 , b/173766247 )

رفع اشکال

  • Fix stuck installation progress when using Navigation's support for dynamic features. ( Ib27a7 , b/169636207 )
  • Calling setViewModelStore or setLifecycleOwner with the same object that has already been set will now be a no-op ( Idf491 , b/177825470 )
  • Safe-Args now adds suppress annotations on the proper methods when using java. ( I8fbc5 , b/179463137 )

External Contributions

  • Thanks JvmName for the pull request to ensure that ReferenceType arguments can now be properly parsed when sent as part of a deeplink URI. ( #127 , b/179166693 )
  • Thanks tatocaster for the pull request to allow the defaultValue for an argument with app:argType=”float” now supports integer default values. ( #117 , b/173766247 )

نسخه 2.3.3

نسخه 2.3.3

27 ژانویه 2021

androidx.navigation:navigation-*:2.3.3 is released. Version 2.3.3 contains these commits.

رفع اشکال

  • There is no longer a crash when popping a NavBackStackEntry before its Lifecycle is moved to CREATED . ( Ie3ba3 )
  • Fixed regression caused by b/171364502 where navigating to an activity with an animation resource value of 0 caused a ResourceNotFoundException . ( I7aedb , b/176819931 )

نسخه 2.3.2

نسخه 2.3.2

2 دسامبر 2020

androidx.navigation:navigation-*:2.3.2 is released. Version 2.3.2 contains these commits.

رفع اشکال

  • Fixed a regression in NavigationUI where using an <activity> destination with onNavDestinationSelected would fail to navigate to the Activity. ( I22e34 , b/171364502 )
  • Fixed an issue where navigation-dynamic-features-fragment would result in navigating to the newly installed destination multiple times. ( aosp/1486056 , b/169636207 )
  • Fixed an issue where default arguments would not be sent to OnDestinationChangedListener instances when using launchSingleTop . ( I2c5cb )
  • Fixed an issue where navigating to a nested navigation graph would not create a new graph instance on the back stack. ( Ifc831 )
  • Fixed an issue where using navigate() with a popUpTo that removed the last destination in a navigation graph would not immediately destroy and remove the navigation graph itself from the back stack. ( I910a3 )
  • Navigation SafeArgs now uses KotlinPoet version 1.7.2 which adds support for Kotlin's explicit API mode. ( I918b5 )
  • NavHostFragment.findNavController(Fragment) now also checks the root decor view of a DialogFragment in addition to the existing checks of the Fragment hierarchy and Fragment's view hierarchy. This allows you to test dialog fragments that use Navigation with FragmentScenario and Navigation.setViewNavController() . ( I69e0d )

نسخه 2.3.1

نسخه 2.3.1

14 اکتبر 2020

androidx.navigation:navigation-*:2.3.1 is released. Version 2.3.1 contains these commits.

ویژگی های جدید

  • Default Animator resources have been added to Navigation UI and are recommended over the default animation resources. ( b/167430145 )
  • NavOptions now overrides the hashcode and equals methods ( b/161586466 )
  • Navigation now includes the current destination in the “No destination with ID” IllegalArgumentException, which should improve the developer debugging experience. ( b/168311416 )

رفع اشکال

  • Safe Args will no longer wrap the return line, even if the generated argument class name is longer than 100 characters. ( b/168584987 )

Dependency Changes

  • navigation-ui now depends on DrawerLayout 1.1.1 , ensuring that NavigationUI is able to open the drawer even when using LOCK_MODE_LOCKED_CLOSED or LOCK_MODE_LOCKED_OPEN . ( b/162253907 )
  • Safe Args now depends on KotlinPoet 1.6.0 ( aosp/1435911 )
  • Safe Args now depends on AGP 4.0.1 ( aosp/1442337 )

نسخه 2.3.0

نسخه 2.3.0

24 ژوئن 2020

androidx.navigation:navigation-*:2.3.0 is released. Version 2.3.0 contains these commits.

Major changes since 2.2.0

  • Feature Module integration : The navigation-dynamic-features-runtime and navigation-dynamic-features-fragment artifacts allow you to navigate to destinations that are defined in feature modules, automatically handling the installation of the feature modules as needed. See Navigate with feature modules for more information.
  • Navigation Testing : The navigation-testing artifact provides a TestNavHostController that allows you to set the current destination and verify the back stack after navigation operations. See Test Navigation for more information.
  • Returning a Result : The NavBackStackEntry associated with each destination on the Navigation back stack now allows you to access a SavedStateHandle suitable for storing small amounts of saved state that should be associated with a particular back stack entry. See Returning a result to the previous Destination for more information.
  • NavigationUI support for Openable : All usages of DrawerLayout in NavigationUI have been replaced with the more generic Openable interface added in CustomView 1.1.0 and implemented by DrawerLayout in DrawerLayout 1.1.0 .
  • Action and Mime Type support in deep links : Deep linking has been expanded to support app:action and app:mimeType in addition to the app:uri previously available. NavController now supports navigating by any combination of these fields via the new NavDeepLinkRequest class. See Navigate using NavDeepLinkRequest for more information.

مسائل شناخته شده

  • Support for deep link actions and mime types is not yet available in Manifest Merger . Until that work is completed, any generated <intent-filter> elements from the <nav-graph> element in your manifest won't include your mime type in its <data> element or your custom <action> . You must manually add an appropriate <intent-filter> to your manifest.

Version 2.3.0-rc01

10 ژوئن 2020

androidx.navigation:navigation-*:2.3.0-rc01 is released. Version 2.3.0-rc01 contains these commits.

رفع اشکال

  • Fixed a NullPointerException when replacing an instance of a destination with no arguments with another instance with arguments with singleTop . ( b/158006669 )
  • All destination is unknown exceptions thrown by NavController now have additional debugging information to help determine the state of the NavController . ( b/157764916 )

Version 2.3.0-beta01

20 مه 2020

androidx.navigation:navigation-*:2.3.0-beta01 are released. Version 2.3.0-beta01 contains these commits.

رفع اشکال

  • Fixed an issue where the Lifecycle of the NavBackStackEntry would not be properly updated after process death. ( b/155218371 )
  • OnDestinationChangedListener instances registered before calling setGraph() are now properly sent the restored destination after a process death. ( b/155218371 )
  • When using singleTop , the NavBackStackEntry now correctly has its arguments updated and the updated arguments are sent to all OnDestinationChangeListener instances. ( b/156545508 )

به روز رسانی های وابستگی

Version 2.3.0-alpha06

29 آوریل 2020

androidx.navigation:navigation-*:2.3.0-alpha06 is released. ( Version 2.3.0-alpha06 contains these commits. )

ویژگی های جدید

  • Deep linking has been expanded to support app:action and app:mimeType in addition to the app:uri previously available. NavController now supports navigating by any combination of these fields via the new NavDeepLinkRequest class. ( b/136573074 , b/135334841 )

API Changes

  • Greatly expanded the Kotlin DSL support for Dynamic Navigation destinations. ( b/148969800 )

رفع اشکال

  • Fixed an issue where deep link Intents would be ignored when using a nested start destination. ( b/154532067 )

Version 2.3.0-alpha05

15 آوریل 2020

androidx.navigation:navigation-*:2.3.0-alpha05 is released. Version 2.3.0-alpha05 contains these commits.

ویژگی های جدید

  • For dynamic graph includes using <include-dynamic> , you no longer need to specify app:graphPackage and a default one will be used by adding moduleName suffix to the applicationId after a dot. If you do need to customize your graphPackage , an ${applicationId} placeholder is now supported. ( b/152696768 )
  • The Navigation Graph Kotlin DSL now exposes a defaultArguments Map for actions, mirroring the ability to set default values on <action> elements in Navigation XML files. ( b/150345605 )

رفع اشکال

  • From Navigation 2.2.2 : Fixed an IllegalStateException when deep linking to the start destination of your graph when you have multiple NavHostFragment instances in your Activity. ( b/147378752 )

Dependency updates

Version 2.3.0-alpha04

18 مارس 2020

androidx.navigation:navigation-*:2.3.0-alpha04 is released. Version 2.3.0-alpha04 contains these commits.

ویژگی های جدید

  • Added support for feature module activity and fragment destinations in the Navigation Kotlin DSL. ( b/148969800 )

API Changes

  • The DynamicExtras class no longer uses a builder pattern and can now be constructed directly. ( aosp/1253671 )
  • DynamicActivityNavigator now takes a Context in its constructor rather than an Activity . ( aosp/1250252 )

رفع اشکال

  • NavigationUI no longer ignores empty labels (ie, a destination with android:label=”” ) and now correctly sets the title to an empty string. ( b/148679860 )

به روز رسانی های وابستگی

  • The Navigation Dynamic Features artifacts now depend on Play Core 1.6.5 . ( b/149556401 )

Version 2.3.0-alpha03

4 مارس 2020

androidx.navigation:navigation-*:2.3.0-alpha03 is released. Version 2.3.0-alpha03 contains these commits.

API Changes

رفع اشکال

  • The navigation-common-ktx ProGuard rules now correctly only keep the NavArgs classes that are used rather than all NavArgs instances. ( b/150213558 )

وابستگی تغییر می کند

  • Navigation has reverted its dependency on Core 1.2.0 and now depends on Core 1.1.0 to avoid forcing developers to move to a newer dependency when Navigation does not depend on any new APIs in Core 1.2.0 .

Version 2.3.0-alpha02

19 فوریه 2020

androidx.navigation:navigation-*:2.3.0-alpha02 is released. Version 2.3.0-alpha02 contains these commits.

ویژگی های جدید

  • The NavBackStackEntry now allows you to access a SavedStateHandle suitable for storing small amounts of saved state that should be associated with a particular back stack entry. See Returning a result for an example use case. ( b/79672220 )

API Changes

  • Convenience methods of getCurrentBackStackEntry() and getPreviousBackStackEntry() have been added to make it easier to retrieve a NavBackStackEntry for the current and previous destinations. ( b/79672220 )

رفع اشکال

  • navigateUp() now passes the current destination's arguments and the KEY_DEEP_LINK_INTENT to the previous destination when launching your app on your own task stack. ( b/147456890 )

وابستگی تغییر می کند

Version 2.3.0-alpha01

5 فوریه 2020

androidx.navigation:navigation-*:2.3.0-alpha01 is released. Version 2.3.0-alpha01 contains these commits .

ویژگی های جدید

  • The new navigation-testing artifact provides a TestNavHostController class. This class provides an alternative to using a mock NavController when testing Navigation that allows you to set the current destination and verify the back stack after navigation operations. ( b/140884273 )
  • The new navigation-dynamic-features-fragment (and its transitive dependency, navigation-dynamic-features-runtime ) allows you to include destinations or entire navigation graphs (via <include-dynamic> ) from feature modules , providing seamless installation of on-demand feature modules when navigating to those destinations. See Navigate with feature modules for more information. ( b/132170186 )

رفع اشکال

  • From Navigation 2.2.1 : Deep links without query parameters now correctly ignore any query parameters rather than appending them to trailing {argument} elements or not matching the deep link. ( b/147447512 )
  • From Navigation 2.2.1 : The navigation-ui ProGuard rules for DrawerArrowDrawable have been updated to ensure that android.enableJetifier=true is not required. ( b/147610424 )
  • From Navigation 2.2.1 : The navigation-common-ktx module now has a unique manifest package name instead of sharing the same manifest package name as navigation-runtime-ktx . ( aosp/1141947 )

Dependency updates

نسخه 2.2.2

نسخه 2.2.2

15 آوریل 2020

androidx.navigation:navigation-*:2.2.2 are released. Version 2.2.2 contains these commits.

رفع اشکال

  • Fixed an IllegalStateException when deep linking to the start destination of your graph when you have multiple NavHostFragment instances in your Activity. ( b/147378752 )
  • NavigationUI no longer ignores empty labels (ie, a destination with android:label=”” ) and now correctly sets the title to an empty string. This was previously released in Navigation 2.3.0-alpha04 . ( b/148679860 )
  • The navigation-common-ktx ProGuard rules now correctly only keep the NavArgs classes that are used rather than all NavArgs instances. This was previously released in Navigation 2.3.0-alpha03 . ( b/150213558

Dependency updates

نسخه 2.2.1

نسخه 2.2.1

5 فوریه 2020

androidx.navigation:navigation-*:2.2.1 is released. Version 2.2.1 contains these commits .

رفع اشکال

  • Deep links without query parameters now correctly ignore any query parameters rather than appending them to trailing {argument} elements or not matching the deep link. ( b/147447512 )
  • The navigation-ui ProGuard rules for DrawerArrowDrawable have been updated to ensure that android.enableJetifier=true is not required. ( b/147610424 )
  • The navigation-common-ktx module now has a unique manifest package name instead of sharing the same manifest package name as navigation-runtime-ktx . ( aosp/1141947 )

Dependency updates

نسخه 2.2.0

نسخه 2.2.0

22 ژانویه 2020

androidx.navigation:navigation-*:2.2.0 is released. Version 2.2.0 contains these commits .

Important changes since 2.1.0

  • NavBackStackEntry : You can now call NavController.getBackStackEntry() , passing in the ID of a destination or navigation graph on the back stack. The returned NavBackStackEntry provides a Navigation-driven LifecycleOwner , ViewModelStoreOwner (the same returned by NavController.getViewModelStoreOwner() ), and SavedStateRegistryOwner , in addition to providing the arguments used to start that destination.
  • Lifecycle ViewModel SavedState Integration : SavedStateViewModelFactory is now the default factory used when using by navGraphViewModels() or the ViewModelProvider constructor with a ViewModelStoreOwner returned by NavController.getBackStackEntry() or NavController.getViewModelStoreOwner() .
  • Query Parameter Support for Deep Links : Deep links with query parameters now support reordered query parameters; arguments that have a default value or are nullable are now optional when matching deep links.
  • Improved Animation Support : NavHostFragment now uses FragmentContainerView from Fragment 1.2.0 , fixing animation z-ordering issues and window insets dispatching to Fragments.

Version 2.2.0-rc04

18 دسامبر 2019

androidx.navigation:navigation-*:2.2.0-rc04 is released. Version 2.2.0-rc04 contains these commits .

رفع اشکال

Version 2.2.0-rc03

4 دسامبر 2019

androidx.navigation:navigation-*:2.2.0-rc03 is released. Version 2.2.0-rc03 contains these commits .

رفع اشکال

  • Fixed an issue with deep link parsing when using query parameters and an argument as the last part of the path that prevented more than one character of the final path argument from being parsed. ( b/144554689 )
  • Fixed an issue with deep link parsing where optional parameters would receive "@null" instead of null . ( b/141613546 )
  • NavHostFragment now correctly restores the graph after a configuration change when used with FragmentContainerView . ( b/143752103 )

وابستگی تغییر می کند

  • Navigation now depends on Lifecycle 2.2.0-rc03 , Lifecycle ViewModel SavedState 1.0.0-rc03 , Activity 1.1.0-rc03 , and Fragment 1.2.0-rc03 where appropriate.

Version 2.2.0-rc02

7 نوامبر 2019

androidx.navigation:navigation-*:2.2.0-rc02 is released. Version 2.2.0-rc02 contains these commits .

وابستگی تغییر می کند

  • Navigation now depends on androidx.lifecycle 2.2.0-rc02 .

Version 2.2.0-rc01

23 اکتبر 2019

androidx.navigation:navigation-*:2.2.0-rc01 is released with no changes since 2.2.0-beta01 . Version 2.2.0-rc01 contains these commits .

Version 2.2.0-beta01

9 اکتبر 2019

androidx.navigation:navigation-*:2.2.0-beta01 is released. Version 2.2.0-beta01 contains these commits .

ویژگی های جدید

  • NavDestination and its subclasses now override toString() to provide more helpful information when debugging. ( b/141264986 )

تغییر رفتار

  • Extra query parameters are now ignored when matching deep links rather than causing the match to fail. ( b/141482822 )

رفع اشکال

  • Fixed an issue where arguments in a deep link's path would be ignored if query parameters were also specified. ( b/141505755 )
  • The navArgs() Kotlin extension on Activity now has a better error message when there are no extras. ( b/141408999 )
  • Safe Args generated Directions Java classes now contain default values. ( b/141099045 )
  • Safe Args generated Args Java classes now contain default values. ( b/140123727 )
  • When using a Toolbar , NavigationUI no longer animates the text change when moving between two top level destinations. ( b/140848160 )

Version 2.2.0-alpha03

18 سپتامبر 2019

androidx.navigation:navigation-*:2.2.0-alpha03 is released. Version 2.2.0-alpha03 contains these commits .

تغییر رفتار

  • Calling setViewModelStore() after calling setGraph now results in an IllegalStateException . This should always be set by the NavHost as part of the initial setup to ensure that all NavBackStackEntry instances have a consistent storage for ViewModel instances. ( aosp/1111821 )

رفع اشکال

  • Fixed a ConcurrentModificationException when using ViewModel instances attached to multiple different navigation graph scoped ViewModelStore instances. ( aosp/1112257 )

Version 2.2.0-alpha02

5 سپتامبر 2019

androidx.navigation:navigation-*:2.2.0-alpha02 is released. The commits included in this version can be found here .

ویژگی های جدید

  • Deep links with query parameters now support reordered query parameters; arguments that have a default value or are nullable are now optional when matching deep links. ( b/133273839 )
  • You can now call NavController.getBackStackEntry() , passing in the ID of a destination or navigation graph on the back stack. The returned NavBackStackEntry provides a Navigation-driven LifecycleOwner , ViewModelStoreOwner (the same returned by NavController.getViewModelStoreOwner() ), and SavedStateRegistryOwner , in addition to providing the arguments used to start that destination. ( aosp/1101691 , aosp/1101710 )

رفع اشکال

  • Fixed an issue where adding a NavHostFragment to ViewPager2 failed with an IllegalArgumentException . ( b/133640271 )
  • NavInflater now avoids calling getResourceName() unnecessarily, speeding up inflation time by up to 40%. ( b/139213740 )

Version 2.2.0-alpha01

7 آگوست 2019

androidx.navigation:navigation-*:2.2.0-alpha01 is released. The commits included in this version can be found here .

ویژگی های جدید

  • SavedStateViewModelFactory is now the default factory used when using by navGraphViewModels() or the ViewModelProvider constructor with a ViewModelStoreOwner returned by NavController.getViewModelStoreOwner() . ( b/135716331 )

API تغییر می کند

رفع اشکال

  • NavHostFragment now uses FragmentContainerView , fixing animation z-ordering issues and window insets dispatching to Fragments. ( b/137310379 )

نسخه 2.1.0

نسخه 2.1.0

5 سپتامبر 2019

androidx.navigation:navigation-*:2.1.0 is released. The commits included in this version can be found here .

Important changes since 2.0.0

  • Scoping ViewModels to a navigation graph : You can now create ViewModels that are scoped at the navigation graph level using the by navGraphViewModels() property delegate for Kotlin users using the -ktx libraries or by using the getViewModelStoreOwner() API added to NavController . See Share UI-related data between destinations for more information.
  • Dialog destinations : You can now create <dialog> destinations that will show a DialogFragment when you navigate to them. NavHostFragment supports dialog destinations by default. See Create a destination from a DialogFragment for more information.
  • Navigating by Uri : You can now navigate using a Uri , which uses the <deepLink> you've added to a destination to navigate there. See Navigate using Uri for more information.
  • NavHostController : APIs used specifically for constructing a custom NavHost have been moved to NavHostController , allowing implementations to connect their NavController to the hosting LifecycleOwner , OnBackPressedDispatcher , and ViewModelStore .

Version 2.1.0-rc01

7 آگوست 2019

androidx.navigation:navigation-*:2.1.0-rc01 is released. The commits included in this version can be found here .

API تغییر می کند

  • The deprecated getViewModelStore() API on NavController introduced in 2.1.0-alpha02 has been removed. ( aosp/1091021 )

Version 2.1.0-beta02

19 جولای 2019

androidx.navigation:*:2.1.0-beta02 is released. The commits included in this version can be found here .

رفع اشکال

  • Removed unintentional jacoco dependency that was introduced in 2.1.0-beta01 . ( b/137782950 )

Version 2.1.0-beta01

17 جولای 2019

androidx.navigation:*:2.1.0-beta01 is released. The commits included in this version can be found here .

ویژگی های جدید

  • NavigationUI now animates the removal of the Up button when using setupWithNavController() with a Toolbar or CollapsingToolbarLayout . ( b/131403621 )

رفع اشکال

  • Fixed a timing issue when using multiple NavHostFragments with the same container with findNavController() . ( b/136021571 )

Version 2.1.0-alpha06

2 جولای 2019

androidx.navigation:*:2.1.0-alpha06 is released. The commits included in this version can be found here .

ویژگی های جدید

  • The app:navGraph attribute used by NavHostFragment has now been moved to the navigation-runtime artifact. Custom navigators that can be added via XML should use this attribute to gain integration with the Navigation Editor's Host panel. ( b/133880955 )

API تغییر می کند

  • The getViewModelStore() API on NavController has been deprecated in favor of the new getViewModelStoreOwner() method that returns a ViewModelStoreOwner . ( aosp/987010 )
  • The implementation of floating window destinations, such as <dialog> destinations, has been generalized into a marker interface, FloatingWindow , that all <dialog> destinations now implement. NavigationUI methods for interacting with the top app bar now ignore FloatingWindow destinations. ( b/133600763 )

تغییر رفتار

  • Navigation now correctly keeps its state in sync with what is seen on the screen when using a <dialog> destination. As a consequence, Navigation now automatically pops <dialog> destinations when you navigate to a non-dialog and non-activity destination, such as a <fragment> destination. ( b/134089818 )

رفع اشکال

  • Navigation now suppresses the animation that occurs when recreating the activity when handling a deep link, fixing a visual flash. ( b/130362979 )
  • Fixed a bug where the Navigation back stack would be out of sync when popping a Fragment as the initial fragment is being added. ( b/133832218 )

Version 2.1.0-alpha05

5 ژوئن 2019

androidx.navigation:*:2.1.0-alpha05 is released. The commits included in this version can be found here .

API تغییر می کند

  • Host related APIs on NavController have been renamed and moved to a new subclass of NavController , NavHostController . ( aosp/966091 )
  • The NavController setHostOnBackPressedDispatcherOwner() method has been replaced with NavHostController 's setOnBackPressedDispatcher() method and now requires that you call setLifecycleOwner() prior to calling it. ( aosp/965409 )
  • NavHostController now contains a enableOnBackPressed(boolean) method that replaces the NavHostOnBackPressedManager class that was previously returned by setHostOnBackPressedDispatcherOwner() . ( aosp/966091 )

رفع اشکال

  • Fixed an issue where the back stack was not correct after navigating by URI. ( b/132509387 )
  • Deep links automatically handled by NavController now only trigger once. ( b/132754763 )

Version 2.1.0-alpha04

16 مه 2019

androidx.navigation:*:2.1.0-alpha04 is released. The commits included in this version can be found here .

رفع اشکال

  • NavHostFragment correctly respects app:defaultNavHost when intercepting the system Back button events, fixing a regression in Navigation 2.1.0-alpha03 . b/132077777
  • DialogFragmentNavigator now correctly handles popBackStack() and navigateUp() operations. b/132576764
  • Fixed an IllegalStateException: unknown destination during restore issue when repeatedly navigating between nested graphs. b/131733658

Version 2.1.0-alpha03

7 مه 2019

androidx.navigation:*:2.1.0-alpha03 is released. The commits included in this version can be found here .

مسائل شناخته شده

  • NavHostFragment continues to intercept the system Back button despite using app:defaultNavHost="false" b/132077777

ویژگی های جدید

  • You can now create <dialog> destinations that will show a DialogFragment when you navigate to them. NavHostFragment supports dialog destinations by default. b/80267254
  • In addition to calling navigate with a resource id or a NavDirections instance, you can now navigate via a Uri , which uses the <deepLink> you've added to a destination to navigate to the correct destination. b/110412864

تغییر رفتار

  • The default animations provided by NavigationUI have been sped up from 400ms to 220ms to match the default animation speed of activities and fragments. b/130055522

API تغییر می کند

  • The createFragmentNavigator() method of NavHostFragment has been deprecated and its functionality moved to the new onCreateNavController() method to make it more clear that this is the correct entry point of adding custom Navigators when subclassing NavHostFragment . b/122802849
  • A hasDeepLink() method has been added to NavDestination to allow you to check if a given Uri can be handled by that destination or, in the case of a NavGraph , any destination in the navigation graph. b/117437718

رفع اشکال

  • Default arguments are now correctly passed to OnDestinationChangedListener instances. b/130630686
  • NavHostFragment now intercepts system Back events using the OnBackPressedDispatcher , fixing an issue when doing conditional navigation in Fragment lifecycle methods upon returning to a Fragment. b/111598096
  • For Safe Args, an android:defaultValue=”@null” with an unspecified app:argType is now properly inferred as a string argument. b/129629192

Version 2.1.0-alpha02

3 آوریل 2019

androidx.navigation:*:2.1.0-alpha02 is released. The commits included in this version can be found here .

ویژگی های جدید

  • You can now create ViewModels that are scoped at a navigation graph level via the by navGraphViewModels() property delegate for Kotlin users or by using the getViewModelStore() API added to NavController . b/111614463

API تغییر می کند

  • You can now add an app:targetPackage to an <activity> destination to limit the matching package name. It supports app:targetPackage="${applicationId}" for restricting the package to your own application id. b/110975456

رفع اشکال

  • The android:name for <activity> destinations is no longer parsed into a Class at inflation time, preventing ClassNotFoundExceptions when using dynamic features. b/124538597

Version 2.1.0-alpha01

19 مارس 2019

This is the first alpha release of Navigation 2.1.0 .

وابستگی تغییر می کند

  • Navigation now depends on androidx.core:core:1.0.1 and androidx.fragment:fragment:1.1.0-alpha05 . This release also removes the dependency on androidx.legacy:legacy-support-core-utils:1.0.0 . b/128632612

API Changes

  • A new Navigation.createNavigateOnClickListener(NavDirections) method has been added as an alternative to creating a click listener with a resource ID and Bundle. b/127631752
  • FragmentNavigator.instantiateFragment is now deprecated. The default implementation now uses FragmentFactory to instantiate Fragments. b/119054429

رفع اشکال

  • Navigation no longer sends a null Bundle when there are arguments attached to a destination, fixing an issue when using android:defaultValue="@null" . b/128531879
  • Safe Args now depends on KotlinPoet 1.1.0, fixing an issue with extremely long package names. b/123654948

نسخه 2.0.0

نسخه 2.0.0

14 مارس 2019

Navigation 2.0.0 is released with no changes from 2.0.0-rc02 .

Version 2.0.0-rc02

6 مارس 2019

Navigation 2.0.0-rc02 provides new artifacts with the androidx.navigation group ID and changes its dependencies to the AndroidX equivalents.

The behavior of 2.0.0-rc02 is identical to behavior to Navigation 1.0.0-rc02 and no changes to your code should be required to update from 1.0.0-rc02 besides updating your dependencies to match the new dependencies .

Your project must have migrated to AndroidX to use 2.X releases of Navigation. Navigation 1.0 stable will be the last release using the Support Library dependencies; all future development beyond 1.0 will be based on AndroidX and build upon the 2.0 stable release.

Pre-AndroidX Dependencies

For the pre-AndroidX versions of Navigation, include these dependencies:

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
}

For Safe args , add the following classpath in your top level build.gradle file

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

نسخه 1.0.0

نسخه 1.0.0

14 مارس 2019

Navigation 1.0.0 is released with no changes from 1.0.0-rc02 .

Version 1.0.0-rc02

26 فوریه 2019

This is the second release candidate for Navigation's 1.0.0 stable release. This release contains a number of bug fixes.

رفع اشکال

  • Fixed an issue where popBackStack() would be ignored if the root graph did not have an ID b/126251695
  • navigateUp() now correctly handles navigating back to your app's task when called after handling a deep link without FLAG_ACTIVITY_NEW_TASK b/126082008
  • Fixed an issue with ActivityNavigator.applyPopAnimationsToPendingTransition not applying the correct pop exit animation b/126237567
  • Kotlin code generated by Safe Args now properly escapes Kotlin keywords such as in and fun in the package name associated with the R class. b/126020455

Version 1.0.0-rc01

21 فوریه 2019

This is a release candidate for Navigation's 1.0.0 stable release. This release contains one bug fix.

رفع اشکال

  • Fixed an issue when using Fragments and singleTop navigation operations b/124294805

Version 1.0.0-beta02

12 فوریه 2019

This release includes a number of minor improvements and important bug fixes.

ویژگی های جدید

  • You can now use 0 as an android:defaultValue for reference arguments. b/124248602

تغییر رفتار

  • Exact deep link matches are now prioritized over deep links with .* or argument matches. b/123969518

رفع اشکال

  • popBackStack() and navigateUp now correctly return false when popping the last destination on the back stack, fixing a regression introduced in 1.0.0-beta01 . b/123933201
  • Navigation now correctly sets the ClassLoader during restoration of saved instance state, avoiding issues when using custom classes in Navigator saved state or in arguments sent to a NavDestination . b/123893858
  • Safe Args generated NavArgs classes no longer crash when restoring a Parcelable[] argument from saved instance state. b/123963545
  • Safe Args now properly cleans up unnecessary generated Kotlin classes. b/124120883

Version 1.0.0-beta01

4 فوریه 2019

This is the first beta release of Navigation; moving forward, the Navigation API is expected to stay stable until the next version unless there is a critical problem. This release contains some bug fixes and behavior changes.

تغییر رفتار

  • Navigation now ensures that argument default values are treated identically at runtime and through Safe Args. As a consequence, only arguments with an app:argType="reference" can have a default value point to another resource (for example, @color/colorPrimary ). Attempting to use a reference default value with a different app:argType will result in an exception when parsing the navigation XML. b/123551990
  • Safe Args now depends on Android Gradle Plugin 3.3.0 aosp/888413
  • Safe Args now depends on Kotlin 1.3.20 aosp/888414

رفع اشکال

  • Safe Args can now be used in library and feature modules on all versions of the Android Gradle Plugin. b/121304903
  • Fixed a regression that would cause a single popBackStack() operation to pop all copies of a destination off the top of the back stack, rather than just a single destination at a time. b/123552990
  • Fixed an issue where the FragmentNavigator state would desynchronize with the NavController 's state, causing an IllegalStateException when attempting to restore the back stack. b/123803044
  • Fixed an issue where the NavigationUI handled back arrow would not appear when using ProGuard with obfuscation. b/123449431
  • The code generated by Safe Args now properly handles using an app:argType pointing to a static inner class in the format .OuterClass$InnerClass . b/123736741
  • The Java code generated by Safe Args now properly handles global actions and deeply nested destinations. b/123347762

Version 1.0.0-alpha11

23 ژانویه 2019

This is a hotfix release of 1.0.0-alpha10 that fixes an issue with Safe Args.

رفع اشکال

  • Fixes an issue where Safe Args would fail to import the Directions class associated with global actions. b/123307342

Version 1.0.0-alpha10

23 ژانویه 2019

مسائل شناخته شده

  • Safe Args fails to import the Directions class associated with global actions. b/123307342

This release contains breaking API changes; please see the Breaking Changes section below.

ویژگی های جدید

  • Kotlin users can now use the by navArgs() property delegate to lazily get a reference to a Safe Args generated NavArgs class in an Activity or Fragment . b/122603367
  • Safe Args now allows you to generate Kotlin code by applying the androidx.navigation.safeargs.kotlin plugin. The Kotlin code is built specifically for Kotlin only modules, using default arguments and immutable classes over the builder pattern that is still available via the previous androidx.navigation.safeargs plugin. b/110263087

تغییرات رفتار

  • Matching deep links are now biased towards the deep link that has the most matching arguments. b/118393029
  • Calling setGraph() on a NavController will now reset the back stack. b/111450672
  • Unknown deep links no longer throw an IllegalStateException , but are ignored, fixing issues with nested or multiple NavHostFragment s. b/121340440

شکستن تغییرات

  • The NavOptions.applyPopAnimationsToPendingTransition() method for applying pop animations to an Activity has been moved to ActivityNavigator . b/122413117
  • Safe Args now avoids duplicating identical classes for actions without arguments. The return type for no argument methods in generated NavDirections classes is now NavDirections . b/123233147
  • Safe Args generated Directions classes no longer have a public constructor - you should only be interacting with the generated static methods. b/123031660
  • Safe Args generated NavDirections classes no longer have a public constructor - they should only be generated via the static methods in the generated Directions classes. b/122963206
  • The returned Bundle from NavDirections ' getArguments() is now marked as @NonNull rather than @Nullable . b/123243957

رفع اشکال

  • NavDeepLinkBuilder now correctly handles multiple simultaneous PendingIntent s to the same destination by using the arguments you pass in to determine the uniqueness. b/120042732
  • NavController now correctly handles popBackStack() operations when using a nested NavHostFragment or other child Fragments with a back stack. b/122770335
  • NavigationUI now correctly sets the content description of the Up button. b/120395362
  • Safe Args generated Directions classes now correctly handle global actions that have the same id as an action on a destination. b/122962504
  • Safe Args generated NavDirections classes now correctly have equal hashCode() values when equals() would return true. b/123043662
  • FragmentNavigator now throws a better error message if you attempt to do custom FragmentTransactions on the NavHostFragment 's FragmentManager . You should always use getChildFragmentManager() . b/112927148

Version 1.0.0-alpha09

18 دسامبر 2018

This release contains breaking API changes; please see the Breaking Changes section below.

We have chosen not to continue development of the android.arch.navigation:navigation-testing artifact. While it has proven helpful for internal testing of NavController , we strongly recommend alternate testing strategies, such as mocking the NavController instance in order to verify that the correct navigate() calls are being done. This approach is discussed in detail in the Single Activity talk at AndroidDevSummit 2018 and we'll be working on additional documentation specifically around testing with Navigation.

ویژگی های جدید

  • MenuItem s with menuCategory="secondary" will no longer pop the back stack when used with NavigationUI methods. b/120104424
  • AppBarConfiguration now allows you to set a fallback OnNavigateUpListener instance which will be called when navController.navigateUp() returns false . b/79993862 b/120690961

شکستن تغییرات

  • When using an <argument> with an argType="reference" , Navigation no longer parses the reference, instead providing the raw resource ID itself. b/111736515
  • onNavDestinationSelected() now pops back to the start destination of your navigation graph by default, making them consistent with the setup methods. Add menuCategory="secondary" to your MenuItem to avoid popping the back stack. aosp/852869
  • The fromBundle() methods of generated Args classes now take a non-null Bundle instead of a nullable Bundle aosp/845616

رفع اشکال

  • Arguments are now properly parsed from deep links as the correct argType instead of always as strings b/110273284
  • Navigation now correctly exports its public resources b/121059552
  • Safe Args is now compatible with Android Gradle Plugin 3.4 Canary 4 and higher b/119662045

Version 1.0.0-alpha08

6 دسامبر 2018

This release contains breaking API changes; please see the Breaking Changes section below.

ویژگی های جدید

  • Destination labels, when used with NavigationUI methods, will now automatically replace {argName} instances in your android:label with the correct argument b/80267266
  • Navigation now depends on Support Library 28.0.0 b/120293333

شکستن تغییرات

  • OnNavigatedListener has been renamed to OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener now also passes the Bundle of arguments aosp/837142
  • The app:clearTask and app:launchDocument attributes and their associated methods have been removed. Use app:popUpTo with the root of your graph to remove all destinations from your back stack. b/119628354
  • ActivityNavigator.Extras now uses a Builder pattern and adds the ability to set any Intent.FLAG_ACTIVITY_ flags aosp/828140
  • NavController.onHandleDeepLink has been renamed to handleDeepLink aosp/836063
  • Many classes and methods not meant for subclassing, such as NavOptions , NavInflater , NavDeepLinkBuilder , and AppBarConfiguration , have been made final aosp/835681
  • The deprecated NavHostFragment.setGraph() method has been removed aosp/835684
  • The deprecated NavigationUI.navigateUp(DrawerLayout, NavController) method has been removed. aosp/835684
  • Fragment creation has been moved to FragmentNavigator , making it easier to delegate Fragment creation to a FragmentFactory . b/119054429
  • The constructor for NavGraphNavigator no longer takes a Context aosp/835340
  • NavigatorProvider is now a class, rather than an interface. The NavigatorProvider returned by getNavigatorProvider() has not changed its functionality. aosp/830660
  • NavDestination.navigate() has been removed. Call navigate() on the Navigator instead. aosp/830663
  • Significant refactoring of Navigator , removing the need for OnNavigatorNavigatedListener and instead having navigate return the NavDestination that was navigated to.
  • Navigator instances can no longer send pop events to the NavController . Consider using a OnBackPressedCallback to intercept back button presses and call navController.popBackStack() . aosp/833716

رفع اشکال

  • popUpTo now works consistently when the destination is a <navigation> element b/116831650
  • Fixed a number of bugs that resulted in an IllegalArgumentException when using nested graphs b/118713731 b/113611083 b/113346925 b/113305559
  • The dataPattern attribute of <activity> destinations will now populate arguments from non-String arguments by calling toString() b/120161365

Safe Args

  • Safe Args supports Serializable objects, including Enum values. Enum types can set a default value by using the enum literal without the class name (eg app:defaultValue="READ" ) b/111316353
  • Safe Args supports arrays of all supported types b/111487504
  • Safe Args now ignores subfolders of resource directories b/117893516
  • Safe Args adds @Override annotations where appropriate b/117145301

Version 1.0.0-alpha07

29 اکتبر 2018

ویژگی های جدید

شکستن تغییرات

  • The navigation-testing-ktx module has been folded into the navigation-testing artifact and will no longer be published.
  • The navigation-testing artifact now has a dependency on the Kotlin standard library. The API has been changed to be more consistent with Kotlin conventions, but you can continue to use it for tests written in Java.
  • Metadata manifest registered navigation graphs are no longer supported. b/118355937
  • Actions can no longer be attached to <activity> destinations. aosp/785539

رفع اشکال

  • Deep links now correctly parse query parameters. b/110057514
  • Activity destinations now correctly apply all enter and exit animations. b/117145284
  • Fixed crash that occurs after configuration changes when using custom Navigators. b/110763345

Safe Args

  • Safe args now have a fixed dependency on Android Gradle Plugin 3.2.1. b/113167627
  • Directions can now be generated for inner classes. b/117407555
  • Fixed an issue with generating Directions to an <include> graph. b/116542123

Version 1.0.0-alpha06

20 سپتامبر 2018

ویژگی های جدید

API Changes

  • Breaking Change: The Navigator navigate() method now takes a Navigator.Extras parameter.
  • NavController's getGraph() method is now NonNull b/112243286

رفع اشکال

  • NavigationUI.setupWithNavController() no longer leaks views if used with views from individual destinations b/111961977
  • Navigator onSaveState() is now only called once b/112627079

Safe Args

  • Navigation destination Directions classes now extend their parent's Directions class if it exists b/79871405
  • Directions and Args classes now have a useful toString() implementation b/111843389

Version 1.0.0-alpha05

10 آگوست 2018

رفع اشکال

  • Fix a bug which cause incorrect backstack behavior. b/111907708
  • Fix a bug in equals() of Generated Args classes. b/111450897
  • Fix a build failure in Safe Args. b/109409713
  • Fix a conversion from resource identifiers to java names b/111602491
  • Fix error messages about nullability in Safe Args plugin.
  • Add missing nullability annotations.

Version 1.0.0-alpha04

19 جولای 2018

Navigation 1.0.0-alpha04 and the associated Safe Args gradle plugin contains a number of API changes, behavior changes, and bug fixes.

API / Behavior Changes

  • NavHostFragment will always set the current Fragment as the primary navigation fragment, ensuring that child fragment managers are popped before the outer NavController is popped b/111345778

Safe Args

  • Breaking Change: app:type has been changed to app:argType to avoid conflicts with other libraries such as ConstraintLayout 2.0.0-alpha1 b/111110548
  • Error messages from Safe Args are now clickable b/111534438
  • Args classes now confirms that NonNull attributes are actually not null b/111451769
  • Additional NonNull annotations have been added to NavDirections and Args generated classes b/111455455 b/111455456

رفع اشکال

  • Fixed an issue with the system back button after deep linking to a fragment destination b/111515685

Version 1.0.0-alpha03

12 جولای 2018

Navigation 1.0.0-alpha03 and the associated Safe Args gradle plugin contains a number of API changes, behavior changes, and bug fixes.

API / Behavior Changes

  • A NavigationUI.setupWithNavController method for Toolbar has been added b/109868820
  • A NavigationUI.setupWithNavController method for CollapsingToolbarLayout has been added b/110887183
  • popBackStack() now returns false when the back stack is empty or when the given destination ID is not in the back stack b/110893637
  • FragmentNavigator now ignores navigation operations after FragmentManager has saved state, avoiding “Can not perform this action after onSaveInstanceState” exceptions b/110987825

Safe Args

  • Breaking Change: Non-alphanumeric characters in action and argument names will be replaced by camel casing in the respective NavDirections method names
    • Eg DemoController.index will become setDemoControllerIndex b/79995048
    • Eg action_show_settings will become actionShowSettings b/79642240
  • Breaking Change: Arguments are now considered non-null by default. To allow null values on string and parcelable arguments, add app:nullable="true" b/79642307
  • You can now use app:type="long" with defaultValues in the form of “123L” b/79563966
  • Parcelable arguments are now supported, using a fully qualified class name for app:type . The only default value supported is "@null" b/79563966
  • Args classes now implement equals() and hashCode() b/79642246
  • The Safe Args plugin can now be applied to library projects b/80036553
  • The Safe Args plugin can now be applied to feature projects b/110011752

رفع اشکال

  • Fixed issues when navigating during Fragment lifecycle methods b/109916080
  • Fixed issues when navigating through nested graphs multiple times b/110178671
  • Fixed issues when using setPopUpTo with the first destination in the graph b/109909461
  • Fixed issue where all app:defaultValue values were being passed as Strings b/110710788
  • aapt2 bundled with Android Gradle Plugin 3.2 Beta 01 now adds keep rules for every android:name attribute in Navigation XML files b/79874119
  • Fixed memory leak when replacing the default FragmentNavigator b/110900142

Version 1.0.0-alpha02

7 ژوئن 2018

تغییرات رفتار

  • FragmentNavigator now uses setReorderingAllowed(true) . b/109826220

  • Navigation now URLDecodes arguments parsed from deep links URLs. b/79982454

رفع اشکال

  • Fixed an IllegalStateException when calling navigate from Fragment lifecycle methods. b/79632233

  • Navigation now depends on Support Library 27.1.1 to fix flickering when using animations. b/80160903

  • Fixed an IllegalArgumentException when using defaultNavHost="true" as a child fragment. b/79656847

  • Fixed a StackOverflowError when using NavDeepLinkBuilder. b/109653065

  • Fixed an IllegalArgumentException when navigating back to a nested graph. b/80453447

  • Fixed an issue with overlapping Fragments when using launchSingleTop . b/79407969

  • Navigation now builds the correct synthetic back stack for nested graphs. b/79734195

  • NavigationUI will now highlight the correct item when using a nested graph as a MenuItem . b/109675998

API Changes

  • The clearTask attribute for actions and the associated API in NavOptions has been deprecated. b/80338878

  • The launchDocument attribute for actions and the associated API in NavOptions has been deprecated. b/109806636

Version 1.0.0-alpha01

8 مه 2018

Navigation provides a framework for building in-app navigation. This initial release is 1.0.0-alpha01 .