การไปยังรายการต่างๆ

การนำทางเป็นกรอบงานสำหรับ การนำทางระหว่าง "จุดหมาย" ในแอปพลิเคชัน Android ที่มอบ API ที่สอดคล้องกันไม่ว่าจะมีการใช้งานปลายทางเป็น Fragment, กิจกรรม หรือ คอมโพเนนต์อื่นๆ
อัปเดตล่าสุด รุ่นที่เสถียร ตัวเลือกถอนการอ้างสิทธิ์ รุ่นเบต้า รุ่นอัลฟ่า
4 กันยายน 2024 2.8.0 - - -

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency สำหรับการนำทาง คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม

เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle สำหรับ ในแอปหรือโมดูล

Groovy

dependencies {
  def nav_version = "2.8.3"

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

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

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

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

}

Kotlin

dependencies {
  val nav_version = "2.8.3"

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

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

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

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

}

Safe Args

To add Safe Args to your project, include the following classpath in your top level build.gradle file:

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

To generate Java language code suitable for Java or mixed Java and Kotlin modules, add this line to your app or module's build.gradle file:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:

Groovy

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

Kotlin

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

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to AndroidX.

ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ในเอกสารประกอบของ ktx

ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์

ความคิดเห็น

ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างรายการใหม่

ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม

เวอร์ชัน 2.8

เวอร์ชัน 2.8.0

4 กันยายน 2024

ปล่อย androidx.navigation:navigation-*:2.8.0 แล้ว เวอร์ชัน 2.8.0 มีสัญญาผูกมัดเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.7.0

การนำทางด้วย Kotlin DSL Type-Safety

  • ตอนนี้การนำทางมีความปลอดภัยสำหรับประเภทสำหรับ Kotlin DSL (ใช้โดย Navigation Compose) โดยใช้ Kotlin Serialization เพื่อให้คุณกำหนดปลายทางในกราฟการนำทางผ่านออบเจ็กต์และคลาสข้อมูลที่ปลอดภัยประเภทต่างๆ ดังนี้
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

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

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

ดูข้อมูลเพิ่มเติมที่บล็อกโพสต์เกี่ยวกับความปลอดภัยตามประเภทการเขียนในฟีเจอร์ช่วยเขียนการนำทาง

การย้อนกลับในการเขียนการนำทางการเขียน

  • ตอนนี้การเขียนในการไปยังส่วนต่างๆ รองรับฟีเจอร์การคาดคะเนในแอปอีกครั้งผ่าน API ใหม่ของ SeekableTransitionState จากการสร้างภาพเคลื่อนไหว วิธีนี้ช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมการเปลี่ยนที่กำหนดเองได้ ก่อนที่จะตัดสินใจทำธุรกรรมผ่านท่าทางสัมผัสที่สมบูรณ์หรือยกเลิก

ส่วนย่อยการนำทางประกอบ

  • เพิ่มอาร์ติแฟกต์ navigation-fragment-compose ใหม่ที่มี ComposableNavHostFragment ทางเลือกสำหรับ NavHostFragment ซึ่งช่วยให้คุณเพิ่มปลายทางที่ประกอบกันได้ลงในไฟล์ XML การนำทาง ปลายทาง composable แต่ละรายการต้องแสดงเป็นระดับบนสุด โดยไม่มีเมธอด @Composable ของอาร์กิวเมนต์ที่มีชื่อแบบเต็มเป็นแอตทริบิวต์ android:name ในแต่ละปลายทาง เมื่อไปยังปลายทางแห่งใดแห่งหนึ่งเหล่านี้ ระบบจะสร้างส่วนย่อยที่มีองค์ประกอบเพื่อแสดงเนื้อหาที่เขียนได้
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

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

การเปลี่ยนแปลงอื่นๆ

  • การเขียนในการนำทางต้องใช้ Compose 1.7.0 แล้ว
  • การนำทางมีคลาส CollectionNavType<T> ใหม่ ซึ่งเป็นคลาสย่อยของ NavType<T> สำหรับอาร์กิวเมนต์ที่อิงตามคอลเล็กชัน เช่น รายการ อาร์เรย์ แผนที่ อาร์เรย์ NavType เริ่มต้นทั้งหมด (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType และ StringArrayType) จะรับค่าจากคลาสใหม่นี้
  • ตอนนี้ NavType มีการรองรับรายการ Int, String, Boolean, Float และ Long ในตัวแล้ว

เวอร์ชัน 2.8.0-rc01

21 สิงหาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-rc01 แล้ว เวอร์ชัน 2.8.0-rc01 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องในการนำทางเมื่อผ่านในคลาส Enum ระดับบนสุดเป็นอาร์กิวเมนต์ประเภทที่ปลอดภัย (I0ba76, b/358137294)
  • ขณะนี้การนำทาง 2.8 สามารถทำงานอย่างถูกต้องกับ SDK 34 และจะไม่เปลี่ยนไปใช้ SDK 35 จนกว่ารุ่น 2.9 จะพร้อมกับไลบรารี AndroidX อื่นๆ (b/358798728)

เวอร์ชัน 2.8.0-beta07

7 สิงหาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-beta07 แล้ว เวอร์ชัน 2.8.0-beta07 มีสัญญาผูกมัดเหล่านี้

ปัญหาที่ทราบ

  • เนื่องจาก b/358137294 ระบบรองรับเฉพาะ Enum ที่ซ้อนอยู่ในคลาสอื่นเท่านั้นเมื่อแกะกล่อง เราจะรองรับ Enum ระดับบนสุดในรุ่นถัดไป

แก้ไขข้อบกพร่อง

  • เมื่อไปยังปลายทางที่ซ้ำกันหรือปลายทางที่แชร์ การนำทางจะให้ความสำคัญกับการไปยังจุดหมายที่ใกล้เคียงที่สุดจากตำแหน่งปัจจุบันในกราฟ (Ic89a4, b/352006850)
  • ตอนนี้การไปยังส่วนต่างๆ ในอาร์กิวเมนต์ที่ปลอดภัยได้เพิ่ม NavType.EnumType ใหม่แล้ว ซึ่งหมายความว่า Enum ประเภทไม่จำเป็นต้องใช้ NavType ที่กำหนดเองอีกต่อไป โปรดทราบว่า SerialName ของ Enum ต้องเป็นชื่อเริ่มต้นแบบเต็ม (I66d22, b/346475493)
  • การไปยังส่วนต่างๆ ในอาร์กิวเมนต์ที่ปลอดภัยได้เพิ่มการรองรับในตัวสำหรับประเภทอาร์กิวเมนต์ที่เป็นค่าว่าง ซึ่งรวมถึง Int?,Long?, Float?, Boolean? และ Enum<*>? (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • ตอนนี้ startDestination ของ NavGraph จะใช้ค่าอาร์กิวเมนต์เริ่มต้น หากเส้นทาง startDestination ที่ส่งไปยัง NavGraph ตรงกับ startDestination.route ทุกประการ (I13762, b/354046047)

เวอร์ชัน 2.8.0-beta06

24 กรกฎาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-beta06 แล้ว เวอร์ชัน 2.8.0-beta06 มีสัญญาผูกมัดเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การตรวจสอบ Lint ของ WrongStartDestinationType ไม่ตรวจสอบออบเจ็กต์ Companion ในประเภทคลาสที่ส่งผ่าน ซึ่งทำให้ Lint ตรวจไม่พบข้อผิดพลาด (I92b09)

เวอร์ชัน 2.8.0-beta05

10 กรกฎาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-beta05 แล้ว เวอร์ชัน 2.8.0-beta05 มีสัญญาผูกมัดเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องในการนำทางของ singleTop เมื่อ NavGraphs ที่ฝังไว้ใช้เส้นทาง startDestination เดียวกัน (I17b94, b/294408596)

เวอร์ชัน 2.8.0-beta04

26 มิถุนายน 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-beta04 แล้ว เวอร์ชัน 2.8.0-beta04 มีสัญญาผูกมัดเหล่านี้

แก้ไขข้อบกพร่อง

  • ขณะนี้การนำทางรองรับการนำทางด้วยสตริงว่างในอาร์กิวเมนต์เส้นทาง (Ic5dbd, b/339481310)
  • ปรับปรุงข้อความแสดงข้อผิดพลาดสำหรับตัวอนุกรมแบบกำหนดเองที่ประกาศในช่องชั้นเรียนโดยตรงผ่าน @Serializable(with =...) เพื่อชี้แจงว่าขณะนี้ฟีเจอร์นี้ไม่ได้รับการสนับสนุน (I052b0, b/341319151)
  • ตอนนี้ API ทดสอบ SavedStateHandleFactory สามารถใช้ในการทดสอบที่ไม่ใช่ Android ได้ แต่จะต้องใช้ Robolectric เพื่อรองรับการแยกวิเคราะห์อาร์กิวเมนต์ด้วยแพ็กเกจ (I76cdc, b/340966212)
  • แก้ไขข้อขัดข้องจากการคืนค่าสถานะเมื่อให้แอปกลับมาทำงานอีกครั้งหลังจากกระบวนการทำงานล้มเหลวโดยใช้การนำทางที่ปลอดภัยตามประเภทใน Compose (Ia8f38, b/341801005)
  • แก้ไขปัญหาในการเขียนข้อความการนำทาง โดยหลังจากยกเลิกท่าทางสัมผัสการย้อนกลับที่คาดการณ์แล้ว NavBackStackEntry ที่ผู้ใช้ย้อนกลับจะไม่กลับไปยังสถานะของวงจรการใช้งาน RESUMED นอกจากนี้ วิธีนี้ยังช่วยให้ปลายทางที่กลับมาเคลื่อนไหวได้อย่างถูกต้องแทนที่จะสแนปให้เข้าที่หลังจากการสะบัด (I97a0c, b/346608857)
  • เมื่อใช้การย้อนกลับแบบคาดการณ์กับการเขียนการนำทาง ปลายทางที่ป๊อปจะมีลำดับ z ที่เหมาะสม ซึ่งเคลื่อนไหวอย่างถูกต้องที่ด้านบนของปลายทางขาเข้า (I2077b, b/345993681)

เวอร์ชัน 2.8.0-beta03

12 มิถุนายน 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-beta03 แล้ว เวอร์ชัน 2.8.0-beta03 มีสัญญาผูกมัดเหล่านี้

การเปลี่ยนแปลง API

  • CollectionNavType มีเมธอด emptyCollection() แบบนามธรรมใหม่ ลบล้างค่านี้เพื่อจัดการคอลเล็กชันเปล่าที่ส่งผ่านเป็นอาร์กิวเมนต์ (Ie4d84, b/341723133)

แก้ไขข้อบกพร่อง

  • เพิ่มเอกสารประกอบใน NavType.serializeAsValue และ serializeAsValues เพื่อไฮไลต์ว่าเอาต์พุตสุดท้ายควรเข้ารหัส Uri (Ida6bd, b/344943214)
  • แก้ไขข้อขัดข้องเมื่อเรียกใช้ toRoute<T> ด้วยอาร์กิวเมนต์ CollectionNavType ที่เป็นค่าว่าง เมื่อนำทางด้วย CollectionNavType ที่เป็นค่าว่าง อาร์กิวเมนต์เอาต์พุตจะเป็นค่าเริ่มต้นที่ประกาศในคลาส Serialible หรือค่าที่ส่งกลับเป็น 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)
  • เพิ่ม API การทดสอบไปยัง navigation-testing เพื่อสร้าง SavedStateHandle จากออบเจ็กต์ Kotlin Serialified (รหัส 4867, b/339080702)

แก้ไขข้อบกพร่อง

  • เพิ่มเอกสารพารามิเตอร์สำหรับฟังก์ชัน DSL ของ Navigation Kotlin แล้ว (I26a36)

เวอร์ชัน 2.8.0-alpha08

1 พฤษภาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha08 แล้ว เวอร์ชัน 2.8.0-alpha08 มีคอมมิตเหล่านี้

อาร์กิวเมนต์ที่ปลอดภัยในการเขียนการนำทาง

  • การดำเนินการเพื่อสนับสนุนความปลอดภัยของประเภทเวลาคอมไพล์สำหรับการเขียนการนำทาง และผู้ใช้ navigation Kotlin DSL ที่อิงตาม Kotlin Serialization ได้เสร็จสมบูรณ์แล้ว และตอนนี้ API ทดลองก่อนหน้านี้มีความเสถียรแล้ว

ฟังก์ชันนี้ใช้การแบ่งอนุกรมของ Kotlin เพื่อช่วยให้คุณกำหนดปลายทางในกราฟการนำทางผ่านออบเจ็กต์ที่ปลอดภัยตามประเภทและคลาสข้อมูลได้ดังนี้

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

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

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

ดูข้อมูลเพิ่มเติมที่บล็อกโพสต์เกี่ยวกับความปลอดภัยตามประเภทการเขียนในฟีเจอร์ช่วยเขียนการนำทาง

ฟีเจอร์ใหม่

  • ตอนนี้อาร์ติแฟกต์ navigation-fragment-compose มีการเรียบเรียง LocalFragment ภายในเมธอดที่ประกอบกันได้ภายใน ComposableFragment (If35e5)
  • ตอนนี้ NavType มีการรองรับรายการ Int, String, Boolean, Float และ Long ในตัวแล้ว (I4b6dd, Ia914c, b/188693139)

เวอร์ชัน 2.8.0-alpha07

17 เมษายน 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha07 แล้ว เวอร์ชัน 2.8.0-alpha07 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มอาร์ติแฟกต์ navigation-fragment-compose ใหม่ที่มีทางเลือก ComposableNavHostFragment แทน NavHostFragment ซึ่งช่วยให้คุณเพิ่มปลายทาง composable ไปยังไฟล์ XML การนำทางได้ ปลายทาง composable แต่ละรายการต้องแสดงเป็นระดับบนสุด โดยไม่มีเมธอด @Composable ของอาร์กิวเมนต์ที่มีชื่อแบบเต็มเป็นแอตทริบิวต์ android:name ในแต่ละปลายทาง เมื่อไปยังปลายทางแห่งใดแห่งหนึ่งเหล่านี้ ระบบจะสร้างส่วนย่อยที่มีองค์ประกอบเพื่อแสดงเนื้อหาที่เขียนได้ (I0ef2e, b/265480755)

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

การเปลี่ยนแปลง API

  • การรองรับ Safe Args ในการเขียนการนำทางโดยใช้แนวทางที่อิงตาม Kotlin Serialization ยังคงดำเนินต่อไป API เหล่านี้ยังไม่เสร็จและทำเครื่องหมายด้วยคำอธิบายประกอบ ExperimentalSafeArgsApi ระบบจะนำคำอธิบายประกอบนี้ออกเมื่อแพลตฟอร์ม API ทั้งหมดเสร็จสมบูรณ์ในรุ่นต่อๆ ไป (Iefd95, I409c8, ซึ่ง

เวอร์ชัน 2.8.0-alpha06

3 เมษายน 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha06 แล้ว เวอร์ชัน 2.8.0-alpha06 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เริ่มรองรับ Safe Args ในการเขียนการนำทางโดยใช้วิธีการที่อิงตาม Kotlin Serialization แล้ว API เหล่านี้ยังไม่เสร็จและทำเครื่องหมายด้วยคำอธิบายประกอบ ExperimentalSafeArgsApi ระบบจะนำคำอธิบายประกอบนี้ออกเมื่อแพลตฟอร์ม API ทั้งหมดเสร็จสมบูรณ์ในรุ่นต่อๆ ไป (I6444e7, I988896, I2a1c5, I43a51, I8366a1, Ic5444e7, I988896, I2a1c5, I43a51, I8366a1, Ic576a1, Ic576a1, Ic576a1, Ic576a1, Ic576a1, Ic598996, I988996, I2a1c5, I43a51,I83641

แก้ไขข้อบกพร่อง

  • ขณะนี้ NavHost ใช้ Alignment.TopStart เป็นอาร์กิวเมนต์ contentAlignment เริ่มต้น ซึ่งจะสอดคล้องกับค่าเริ่มต้นสำหรับ AnimatedContent และแก้ไขกรณีของการปรับขนาดที่ไม่คาดคิดจากการเปลี่ยนกึ่งกลาง (I09e72, b/330111602)
  • เมื่อสะบัดท่าทางสัมผัสกลับแบบคาดเดาขณะใช้การเขียนการนำทาง NavHostจะทำการเปลี่ยนแบบกำหนดเองอย่างถูกต้องแทนที่จะทำให้เสร็จทันที (I99017, b/327292110)

เวอร์ชัน 2.8.0-alpha05

20 มีนาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha05 แล้ว เวอร์ชัน 2.8.0-alpha05 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณส่งอาร์กิวเมนต์ไปยัง startDestination ของ NavGraph ได้โดยตรงในเส้นทาง startDestination โดยไม่ต้องอาศัย defaultValue ซึ่งมีผลกับ NavGraph startDestinations ที่ฝังด้วยเช่นกัน (I0e0b5, b/109505019, b/188693139)

การเปลี่ยนแปลง API

  • เพิ่มคลาส CollectionNavType<T> ใหม่ ซึ่งเป็นคลาสย่อยของ NavType<T> สำหรับอาร์กิวเมนต์ที่อิงตามคอลเล็กชัน เช่น รายการ อาร์เรย์ แผนที่ (Ic6d63, b/188693139)
  • ตอนนี้อาร์เรย์ NavType เริ่มต้นทั้งหมด (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType และ StringArrayType) เป็นประเภท CollectionNavType (Idcf79, b/188693139) แล้ว
  • ตอนนี้ NavType จะให้ API valueEquals แบบเปิดใหม่ซึ่งพิจารณาว่าค่า 2 ค่าของประเภทเดียวกันมีค่าเท่ากันหรือไม่ (I6cb97, b/327229511)

แก้ไขข้อบกพร่อง

  • ตอนนี้พารามิเตอร์การค้นหาใน Deep Link อนุญาตให้ใช้ค่าในรูปแบบของวงเล็บปีกกาล้อมรอบชื่ออาร์กิวเมนต์ (เช่น {argName}) เป็นค่าที่ถูกต้องสำหรับสตริง NavTypes ได้ วิธีนี้จะแก้ไขปัญหาที่ระบบถือว่าค่าดังกล่าวไม่ถูกต้อง (หรือไม่มีค่า) ในทุกประเภท (I18302, b/327274038)
  • ฟังก์ชัน NavController ที่รองรับเส้นทาง เช่น navigate หรือ popBackStack สามารถจับคู่เส้นทางที่มีอาร์กิวเมนต์ของอาร์เรย์ NavTypes ได้อย่างถูกต้องแล้ว (Iea805, b/327229511)

เวอร์ชัน 2.8.0-alpha04

6 มีนาคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha04 แล้ว เวอร์ชัน 2.8.0-alpha04 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถระบุ SizeTranform สำหรับการเปลี่ยนในการเขียนการนำทางด้วยการกำหนดองค์ประกอบดังกล่าวเป็นส่วนหนึ่งของการเริ่มต้นฟังก์ชัน composable และ/หรือ navigation (I91062, b/296912651)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ NavHost ในการนำทางการเขียนไม่สามารถแสดงการเปลี่ยนได้อย่างเหมาะสมเมื่อใช้การย้อนกลับของระบบโดยไม่มีท่าทางสัมผัส (Iceeae, b/325998468)

เวอร์ชัน 2.8.0-alpha03

21 กุมภาพันธ์ 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha03 แล้ว เวอร์ชัน 2.8.0-alpha03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ NavBackStackEntry.savedStateHandle จะทำเครื่องหมายเป็น @MainThread เนื่องจากใช้รหัสที่จำเป็นต้องใช้ในเทรดหลักอยู่ดี (Ibb988, b/299523245)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในการนำทางที่ทำให้ ViewModels ของ NavGraph เปลี่ยนเป็น DESTROYED เร็วเกินไป เนื่องจาก ViewModel ของรายการที่เชื่อมโยงไม่ได้เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ (Ib6bb7, b/317581849)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.8.0-alpha02

7 กุมภาพันธ์ 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha02 แล้ว เวอร์ชัน 2.8.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้การเขียนในการไปยังส่วนต่างๆ รองรับฟีเจอร์การคาดคะเนในแอปอีกครั้งผ่าน API ใหม่ของ SeekableTransitionState จากการสร้างภาพเคลื่อนไหว วิธีนี้ช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมการเปลี่ยนที่กำหนดเองได้ ก่อนที่จะตัดสินใจทำธุรกรรมผ่านท่าทางสัมผัสที่สมบูรณ์หรือยกเลิก (I8b8e9)

เวอร์ชัน 2.8.0-alpha01

24 มกราคม 2024

ปล่อย androidx.navigation:navigation-*:2.8.0-alpha01 แล้ว เวอร์ชัน 2.8.0-alpha01 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขการรั่วไหลของ BackStackState ที่การเรียกใช้ saveState หลายครั้งในปลายทางจะส่งผลให้ระบบบันทึกหลายสถานะ แต่จะกู้คืนได้เฉพาะรายการแรกเท่านั้น (I598b0, b/309559751)
  • แก้ไขปัญหาที่อาร์กิวเมนต์ที่ไม่ใช่สตริงไม่แสดงอย่างถูกต้องเมื่อใช้ตัวช่วยเหลือ NavigationUI ในการสร้างแถบชื่อของแถบแอป (#636, b/316676794)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้การเขียนในการไปยังส่วนต่างๆ อาศัยการเขียน 1.7.0-alpha01 ในการแก้ไขปัญหาที่อาจทำให้เกิดการปรับขนาดภาพเคลื่อนไหวที่ไม่คาดคิด (b/297258205)

การสนับสนุนภายนอก

  • ขอขอบคุณ SimonMarquis ที่แก้ไขปัญหาการแสดงผลสำหรับอาร์กิวเมนต์ที่ไม่ใช่สตริงเมื่อใช้ตัวช่วยของ NavigationUI ในการสร้างแถบแอปชื่อ

เวอร์ชัน 2.7.7

เวอร์ชัน 2.7.7

7 กุมภาพันธ์ 2024

ปล่อย androidx.navigation:navigation-*:2.7.7 แล้ว เวอร์ชัน 2.7.7 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ย้อนกลับจากการนำทาง 2.8.0-alpha01: แก้ไขการรั่วไหลของ BackStackState ที่การเรียก saveState() หลายครั้งใน NavBackStackEntry ครั้งเดียวจะส่งผลให้ระบบบันทึกสถานะหลายสถานะ แต่จะคืนค่าได้เฉพาะสถานะที่บันทึกไว้ครั้งแรกเท่านั้น (I598b0, b/309559751)
  • พอร์ตไปยังการนำทาง 2.8.0-alpha01: แก้ไขปัญหาที่ระบบแสดงอาร์กิวเมนต์ที่ไม่ใช่สตริงอย่างไม่ถูกต้องเมื่อใช้ตัวช่วยเหลือ NavigationUI ในการสร้างแถบชื่อของแถบแอป (#636, b/316676794)

การสนับสนุนภายนอก

  • ขอขอบคุณ SimonMarquis ที่แก้ไขปัญหาการแสดงผลสำหรับอาร์กิวเมนต์ที่ไม่ใช่สตริงเมื่อใช้ตัวช่วยของ NavigationUI ในการสร้างแถบแอปชื่อ

เวอร์ชัน 2.7.6

เวอร์ชัน 2.7.6

13 ธันวาคม 2023

ปล่อย androidx.navigation:navigation-*:2.7.6 แล้ว เวอร์ชัน 2.7.6 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ฟังก์ชัน NavGraph equals() จะพิจารณาโหนดของกราฟอื่นอย่างถูกต้อง แทนที่จะพิจารณาเฉพาะโหนดการเรียกใช้ ซึ่งจะทำให้กราฟที่มีโหนดที่มีรหัสต่างกันไม่ถือว่าเท่ากันอีกต่อไป (I401cb, b/311414915)

เวอร์ชัน 2.7.5

เวอร์ชัน 2.7.5

1 พฤศจิกายน 2023

ปล่อย androidx.navigation:navigation-*:2.7.5 แล้ว เวอร์ชัน 2.7.5 มีคอมมิตเหล่านี้

การปรับปรุงประสิทธิภาพ

  • เพิ่มประสิทธิภาพได้อย่างมาก (ทั้งในแง่ของเวลาและจำนวนการจัดสรร) ในการเปรียบเทียบกราฟ 2 กราฟ ซึ่งหมายความว่าการเรียกเช่น setGraph ซึ่งเปรียบเทียบกราฟใหม่กับกราฟที่มีอยู่เป็นการภายในจะทำได้เร็วขึ้นมากและส่งผลให้มีการข้ามเฟรมน้อยลง ขอขอบคุณ Michał Z สำหรับการวิเคราะห์อย่างละเอียดที่นำไปสู่การปรับปรุงครั้งนี้ (I6ad62)
  • ตอนนี้ NavHost จะแสดงผลปลายทางเริ่มต้นในการแต่งเพลงแรกแทนที่จะต้องรอให้บัตรผ่านที่ 2 อ่านสถานะที่อัปเดตแล้ว (I439a7, b/304852206)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Back Stack จะขัดข้องหากคุณเรียก setGraph มากกว่า 1 ครั้งด้วยกราฟที่เหมือนกันทุกประการในกรณีที่มีปลายทางในกราฟซึ่งมีการดำเนินการที่เชื่อมโยงปลายทาง 2 แห่ง (Ieaed7)
  • กล่องโต้ตอบที่นำทางไปแล้วปิดไปในเวลาต่อมาอย่างรวดเร็วจะไม่รั่วไหลในรายการ NavController.visibleEntries อีกต่อไป (I67586, b/287969970)
  • เมื่อมีการเรียกรายการแล้วตามด้วยการเปลี่ยนแปลงการกำหนดค่า ระบบจะล้าง ViewModel ของรายการอย่างเหมาะสมหาก saveState เป็นค่าเท็จ (Idf242, b/298164648)
  • แก้ไขปัญหาที่ NavController จัดการ Deep Link เดียวกันได้มากกว่า 1 ครั้งหากสแต็กด้านหลังว่างเปล่าทั้งหมดก่อนที่จะมีการเปลี่ยนการกำหนดค่าหรือเรียกใช้ setGraph เฉพาะเมื่อ Intent ขาเข้ามีการตั้งค่าแฟล็ก FLAG_ACTIVITY_NEW_TASK (I73c7f)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้การนำทางด้วย Fragment ขึ้นอยู่กับ Fragment 1.6.2 ซึ่งเป็นการแก้ปัญหากรณีที่ ViewModel ของส่วนย่อยที่ซ้อนกันไม่ล้างเมื่อเรียกใช้ clearBackStack

เวอร์ชัน 2.7.4

เวอร์ชัน 2.7.4

4 ตุลาคม 2023

ปล่อย androidx.navigation:navigation-*:2.7.4 แล้ว เวอร์ชัน 2.7.4 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ popUpTo เพื่อใช้เส้นทางที่มีอาร์กิวเมนต์เพื่อให้ดึงกลับไปยังรายการเฉพาะที่ใช้อาร์กิวเมนต์ทุกประการ ซึ่งตรงกับการรองรับที่พบใน popBackStack (I731f4, b/299255572)

แก้ไขข้อบกพร่อง

  • แก้ปัญหาที่การรบกวนการนำทางอื่นด้วย popUpTo จะทำให้ FragmentNavigator ขัดข้อง (I3c848, b/301887045)
  • แก้ปัญหาการกดย้อนกลับของระบบทำให้ currentDestination ไม่อัปเดตอย่างถูกต้องเพื่อให้ตรงกับ Fragment ที่แสดง (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 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในการนำทางด้วย Fragments ที่ทำให้รายการ visibleEntries มีรายการที่ไม่ถูกต้อง (I5caa9, b/288520638)
  • แก้ไขปัญหาที่ทำให้ปลายทางของหน้าต่างแบบลอย (เช่น Dialogs, Bottomsheets ฯลฯ) ไม่ได้รับ Callback ของ RESUMED Lifecycle (I3b866, b/287505132)

เวอร์ชัน 2.7.2

เวอร์ชัน 2.7.2

6 กันยายน 2023

ปล่อย androidx.navigation:navigation-*:2.7.2 แล้ว เวอร์ชัน 2.7.2 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้การนำทางขึ้นอยู่กับอายุการใช้งาน 2.6.2 ซึ่งแก้ไขการโต้ตอบระหว่าง rememberSaveable กับ NavHost ของการเขียนในการไปยังส่วนต่างๆ ซึ่งจะทำให้สถานะ rememberSaveable ของปลายทางและอินสแตนซ์ SavedStateHandle ที่ ViewModel เป็นเจ้าของได้รับการคืนค่าอย่างถูกต้องหลังจากกระบวนการยุติการทำงานและการสร้างใหม่ (b/298059596, b/289436035)
  • แก้ไขปัญหาเมื่อแสดงกล่องโต้ตอบหลายรายการในการเขียนการนำทางพร้อมกัน โดยที่กล่องโต้ตอบที่ถูกบดบังบางส่วน (เช่น ไม่ใช่กล่องโต้ตอบด้านบนสุด) จะอยู่ในสถานะอายุการใช้งาน CREATED ไม่ใช่สถานะ STARTED (aosp/2728520, b/289257213)
  • แก้ไขปัญหาเมื่อแสดงกล่องโต้ตอบหลายรายการในการเขียนการนำทางพร้อมกัน โดยที่การปิดกล่องโต้ตอบที่ด้านบนสุดจะทำให้กล่องโต้ตอบบนสุดใหม่ติดอยู่ในสถานะอายุการใช้งาน STARTED แทนที่จะย้ายไปที่ RESUMED อย่างถูกต้อง (aosp/2629401, b/286371387)
  • Navigation Safe Args ไม่ได้สร้างอินสแตนซ์อย่างตั้งใจอีกต่อไปหากไม่ได้มีการดำเนินการจริง (I0e385, b/260322841)

การอัปเดตการขึ้นต่อกัน

  • การเขียนในการนำทางขึ้นอยู่กับ Compose 1.5.1 แล้ว

เวอร์ชัน 2.7.1

เวอร์ชัน 2.7.1

23 สิงหาคม 2023

ปล่อย androidx.navigation:navigation-*:2.7.1 แล้ว เวอร์ชัน 2.7.1 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในการไปยังส่วนต่างๆ ด้วยการเขียนโดยใช้ Scaffold อาจทำให้เกิดข้อผิดพลาดจากการพยายามเข้าถึง Lifecycle.State.DESTROYED ViewModel (I1dc11, b/268422136)

เวอร์ชัน 2.7.0

เวอร์ชัน 2.7.0

9 สิงหาคม 2023

ปล่อย androidx.navigation:navigation-*:2.7.0 แล้ว เวอร์ชัน 2.7.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.6.0

ภาพเคลื่อนไหวจาก Accompanist

ตอนนี้ AnimatedContent มีความเสถียรแล้ว เราจึงสามารถย้ายโค้ดจาก Accompanist Navigation Animation กลับไปยัง Navigation Compose ด้วยตนเองได้

ซึ่งหมายความว่าการสนับสนุนทั้งหมดสำหรับการตั้งค่าการเปลี่ยนที่กำหนดเองซึ่งมีอยู่ใน AnimatedNavHost จะได้รับการสนับสนุนโดยตรงใน NavHost

จะไม่มีการเปลี่ยนแปลงใดๆ เพิ่มเติมในภาพเคลื่อนไหวของการนำทางตามควบคู่ และจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมกับคำแนะนำวิธีย้ายข้อมูลกลับไปยังเครื่องมือช่วยเขียนการนำทาง แต่จะกลับด้านคำแนะนำในการย้ายข้อมูล โดยที่ไม่จำเป็นต้องเปลี่ยนแปลง API อื่นใดหากคุณใช้ Accompanist Alpha เวอร์ชันล่าสุด (0.31.2-alpha) อยู่แล้ว (b/197140101)

แก้ไขข้อบกพร่อง

  • ตอนนี้ NavHost ในการเขียนในการนำทางจะสกัดกั้นระบบกลับการเรียกอย่างถูกต้องแม้ว่ากิจกรรมจะถูกหยุดและกลับมาทำงานอีกครั้งแล้วก็ตาม (Icb6de, b/279118447)

การอัปเดตการขึ้นต่อกัน

  • ขณะนี้การนำทางขึ้นอยู่กับการเขียน 1.5.0 จาก 1.1.0

เวอร์ชัน 2.7.0-rc01

26 กรกฎาคม 2023

ปล่อย androidx.navigation:navigation-*:2.7.0-rc01 แล้ว เวอร์ชัน 2.7.0-rc01 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ EnterTransition และ ExitTransition lambda ที่สร้างขึ้นเป็นส่วนหนึ่งของ 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 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้การเขียนในการไปยังส่วนต่างๆ มีลำดับ Z ที่ถูกต้องสำหรับการเปลี่ยนที่กำหนดเองซึ่งใช้การนำทางด้วยตัวเลือก popUpTo (/Ib1c3a, b/285153947)

เวอร์ชัน 2.7.0-beta01

7 มิถุนายน 2023

ปล่อย androidx.navigation:navigation-*:2.7.0-beta01 แล้ว เวอร์ชัน 2.7.0-beta01 มีการคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • NavHost ในการเขียนการนำทางสามารถดักฟังระบบกลับของการเรียกอย่างถูกต้อง แม้หลังจากที่ Activity ถูก STOPPED และ RESUMED แล้วก็ตาม (Icb6de, b/279118447)

เวอร์ชัน 2.7.0-alpha01

24 พฤษภาคม 2023

ปล่อย androidx.navigation:navigation-*:2.7.0-alpha01 แล้ว เวอร์ชัน 2.7.0-alpha01 มีคอมมิตเหล่านี้

ภาพเคลื่อนไหวจาก Accompanist

ตอนนี้ AnimatedContent มีความเสถียรแล้ว เราจึงสามารถย้ายโค้ดจาก Accompanist Navigation Animation กลับไปยัง Navigation Compose ด้วยตนเองได้

ซึ่งหมายความว่าการสนับสนุนทั้งหมดสำหรับการตั้งค่าการเปลี่ยนที่กำหนดเองซึ่งมีอยู่ใน AnimatedNavHost จะได้รับการสนับสนุนโดยตรงใน NavHost

จะไม่มีการเปลี่ยนแปลงใดๆ เพิ่มเติมในภาพเคลื่อนไหวของการนำทางตามควบคู่ และจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมกับคำแนะนำวิธีย้ายข้อมูลกลับไปยังเครื่องมือช่วยเขียนการนำทาง แต่จะกลับด้านคำแนะนำในการย้ายข้อมูล โดยที่ไม่จำเป็นต้องเปลี่ยนแปลง API อื่นใดหากคุณใช้ Accompanist Alpha เวอร์ชันล่าสุด (0.31.2-alpha) อยู่แล้ว (b/197140101)

แก้ไขข้อบกพร่อง

  • จากการนำทาง 2.6.0-rc02: แก้ไขปัญหาเกี่ยวกับการนำทางในส่วนย่อย ซึ่งการนำทางด้วย popUpTo และนำส่วนย่อยออกจากสแต็กด้านหลังโดยไม่สร้างมุมมองใหม่อาจทำให้ระบบหยุดทำงาน (Ieb8d4, b/281726455)

การอัปเดตการขึ้นต่อกัน

  • ขณะนี้การนำทางขึ้นอยู่กับการเขียน 1.5.0-beta01

เวอร์ชัน 2.6.0

เวอร์ชัน 2.6.0

7 มิถุนายน 2023

ปล่อย androidx.navigation:navigation-*:2.6.0 แล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญของการนำทางตั้งแต่เวอร์ชัน 2.5.0

  • arguments ของ NavBackStackEntry และ arguments ที่ส่งไปยัง OnDestinationChangedListener จะเป็นสำเนาของอาร์กิวเมนต์ที่เปลี่ยนแปลงไม่ได้ซึ่งสร้างขึ้นเมื่อคุณนำทางไปยังปลายทางเท่านั้น ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ที่ทำกับแพ็กเกจเหล่านั้นจะไม่ปรากฏในการเข้าถึงอินสแตนซ์ arguments หรืออินสแตนซ์ OnDestinationChangedListener อื่นๆ ในภายหลัง
  • ตอนนี้ NavDeepLink รองรับค่าเริ่มต้นสำหรับอาร์เรย์ ซึ่งช่วยให้รองรับพารามิเตอร์การค้นหาที่ซ้ำกันซึ่งจะแมปกับประเภทอาร์เรย์ของอาร์กิวเมนต์ ตอนนี้ NavType มีเมธอดเริ่มต้นซึ่งสามารถลบล้างได้เพื่อรวมค่าที่แยกวิเคราะห์แล้ว 2 ค่า
  • ตอนนี้คลาสย่อยที่กำหนดเองของ NavType สามารถลบล้าง serializeAsValue เพื่อทำให้ค่าเป็นอนุกรมเป็นสตริงได้แล้ว ทำให้การรวมทั้งการทำให้เป็นอนุกรมและดีซีเรียลไลซ์ (ผ่าน parseValue) รวมอยู่ในคลาส NavType ได้โดยสมบูรณ์ ตอนนี้ StringType จะลบล้างเมธอดนี้เพื่อเรียก Uri.encode ใน String ที่ระบุ

การเปลี่ยนแปลงที่สำคัญของการเขียนในการนำทางตั้งแต่เวอร์ชัน 2.5.0

  • เมื่อแสดงตัวอย่าง Composable ด้วย NavHost ระบบจะแสดง startDestination ของ NavGraph โดยค่าเริ่มต้น
  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) ในขณะนี้เส้นทางรองรับทั้งหมดที่มีอาร์กิวเมนต์บางส่วนหรือทั้งหมด โปรดทราบว่าอาร์กิวเมนต์ต้องตรงกันกับอาร์กิวเมนต์ของรายการ
  • ตอนนี้การพยายามสร้าง NavDeepLink ที่ว่างเปล่าโดยใช้ Kotlin DSL ของ navDeepLink จะส่งผลให้มีคำเตือน Lint ที่ระบุว่า Deep Link ต้องใช้ URI, Action และ/หรือ mimetype จึงจะใช้งานได้

การเปลี่ยนแปลงที่สำคัญของการนำทางด้วย Fragments ตั้งแต่เวอร์ชัน 2.5.0

  • NavHostFragment ไม่ขัดขวางปุ่มย้อนกลับของระบบอีกต่อไป ซึ่งจะช่วยให้ FragmentManager พื้นฐานจัดการระบบได้อีกครั้ง การดำเนินการนี้จะอนุญาตให้ Fragment 1.7.0-alpha01 ขึ้นไปแสดงภาพเคลื่อนไหวย้อนกลับแบบคาดการณ์ในแอปในอุปกรณ์ Android U
  • เมื่อใช้การนำทางด้วยส่วนย่อย การพยายามดำเนินการ FragmentTransaction ด้วยตนเองที่เพิ่มส่วนย่อยในสแต็กแบ็กของ FragmentManager จะทำให้เกิด IllegalArgumentException คุณควรเพิ่ม Fragment ผ่าน navigate() API เสมอ
  • เมื่อใช้สตริง ${applicationId} ที่แน่นอนเป็นตัวยึดตำแหน่งในแอตทริบิวต์ app:data และ app:dataPattern ในองค์ประกอบกิจกรรมของไฟล์ XML การนำทาง ระบบจะเติมตัวยึดตำแหน่งด้วย packageName ของบริบทเมื่อเพิ่มค่าเงินเฟ้อโดยอัตโนมัติ
  • ตอนนี้ FragmentNavigator ใช้ API การเปลี่ยนเมื่อนำทางและเปิด NavBackStackEntries ซึ่งหมายความว่าตอนนี้ Lifecycle ของ NavBackStackEntry จะรอให้เอฟเฟกต์พิเศษของ Fragment สำหรับการเข้าและออกเสร็จสมบูรณ์ก่อนย้าย Lifecycle.State ชิ้นสุดท้าย
  • ตอนนี้ DialogFragmentNavigator ใช้ API การเปลี่ยนเมื่อนำทางและเปิด NavBackStackEntries ซึ่งหมายความว่าตอนนี้ Lifecycle ของ NavBackStackEntry จะรอให้ Lifecycle ของ DialogFragment ย้ายไปที่ DESTROYED ก่อนที่จะย้ายไปยัง DESTROYED เอง
  • ตอนนี้ NavHostFragment จะช่วยให้คุณเรียกข้อมูล NavController ทันทีที่แนบ NavHostFragment กับ FragmentManager ได้ แทนที่จะดำเนินการหลัง onCreate() เท่านั้น
  • ตอนนี้การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารีการนำส่งฟีเจอร์ Play แบบละเอียด
  • ตอนนี้ Args ที่ปลอดภัยสำหรับการไปยังส่วนต่างๆ ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.3.0 แล้ว ซึ่งหมายความว่าขณะนี้สามารถใช้งานร่วมกับเวอร์ชัน 7.3.0 ขึ้นไปเท่านั้น

การเปลี่ยนแปลงที่สำคัญของ NavigationUI ตั้งแต่ 2.5.0

  • เมื่อส่งรหัสของกราฟการนำทางไปยัง AppBarConfiguration (เช่น ผ่าน Menu) ตอนนี้ NavigationUI จะพิจารณาเฉพาะปลายทางเริ่มต้นของกราฟการนำทางนั้นเป็นจุดหมายระดับบนสุด แทนที่จะทำเครื่องหมายปลายทางทั้งหมดภายในกราฟเป็นปลายทางระดับบนสุดอย่างไม่ถูกต้อง ทั้งนี้ ลักษณะการทำงานในการส่งผ่านรหัสของปลายทางแต่ละรายการจะไม่มีการเปลี่ยนแปลง ฟังก์ชันเดียวกันนี้ยังใช้ได้สำหรับโค้ดของคุณเองผ่านฟังก์ชัน isTopLevelDestination ใหม่ใน AppBarConfiguration
  • ตอนนี้การผสานรวม setupWithNavController ใน NavigationUI สำหรับการทำงานกับแถบแอปด้านบนจะแยกวิเคราะห์ค่า R.string ของอาร์กิวเมนต์ ReferenceType ที่พบใน android:label เป็นค่าสตริงแทนเอาต์พุตจำนวนเต็มของทรัพยากรที่สร้างขึ้นโดยอัตโนมัติ
  • ตอนนี้ NavigationUI จะมีบันทึกเมื่อนำทางผ่าน MenuItem ที่เลือกไม่สำเร็จ

เวอร์ชัน 2.6.0-rc02

24 พฤษภาคม 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-rc02 แล้ว เวอร์ชัน 2.6.0-rc02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับการนำทางใน Fragments ที่การนำทางด้วย popUpTo และนำส่วนย่อยออกจากแบ็กสแต็กโดยไม่สร้างมุมมองใหม่อาจทำให้ระบบหยุดทำงาน (Ieb8d4, b/281726455)

เวอร์ชัน 2.6.0-rc01

10 พฤษภาคม 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-rc01 แล้ว เวอร์ชัน 2.6.0-rc01 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาในการนำทางที่มีส่วนย่อยซึ่งการนำส่วนย่อยออกผ่านการไปยังส่วนต่างๆ ด้วย popUpTo ใน Callback วงจร onResume() จะทำให้เกิด IllegalStateException (I21884, b/279644470)

เวอร์ชัน 2.6.0-beta01

19 เมษายน 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-beta01 แล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavBackStackEntry จะแสดงการใช้งาน toString ที่กำหนดเอง (Iff00b)

แก้ไขข้อบกพร่อง

  • เมื่อใช้การนำทางด้วยส่วนย่อย การพยายามดำเนินการ FragmentTransaction ด้วยตนเองที่เพิ่มส่วนย่อยในสแต็กแบ็กของ FragmentManager จะทำให้เกิด IllegalArgumentException คุณควรเพิ่ม Fragment ผ่าน navigate() API เสมอ (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)
  • ตอนนี้การไปยังส่วนต่างๆ ของ Deep Link ที่อิงตาม Action/MimeType จะล้มเหลวหากการดำเนินการนำทางไม่มี NavArgument ที่เป็นค่าว่างซึ่ง NavDestination ซึ่งตรงกับ Action/MimeType ระบุไว้ (Ibfa17, b/271777424)
  • เมื่อ NavController ตั้งค่ากราฟด้วยเส้นทางและปลายทางเดียวกันกับกราฟก่อนหน้า ตอนนี้แผนภูมิจะแทนที่โหนดกราฟปัจจุบันและปลายทาง Back Stack ด้วยอินสแตนซ์ใหม่ได้อย่างเหมาะสม การดำเนินการนี้จะแก้ไขข้อขัดข้องเมื่อใช้ onLaunchSingleTop โดยไม่มีการบันทึกสถานะในการเขียนการนำทาง การทำเช่นนี้ยังช่วยแก้ไขข้อผิดพลาดเมื่อมีการนำทางไปยังปลายทางที่เชื่อมโยงกับบิลด์กราฟรากและสแต็ก Back Stack ที่ไม่ถูกต้อง (I5bc58, b/275258161, b/275407804)

เวอร์ชัน 2.6.0-alpha08

22 มีนาคม 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha08 แล้ว เวอร์ชัน 2.6.0-alpha08 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavHostFragment จะช่วยให้คุณเรียกข้อมูล NavController ทันทีที่แนบ NavHostFragment กับ FragmentManager ได้ แทนที่จะดำเนินการหลัง onCreate() เท่านั้น (Ic6382, b/220186282)

แก้ไขข้อบกพร่อง

  • แก้ไข NullPointerException เมื่อเรียกใช้กราฟแบบซ้อนซึ่งมีอาร์กิวเมนต์ที่ไม่เป็นค่าว่าง (6b3581, b/249988437)
  • เมื่อใช้ระบบอีกครั้งหลังจากนำทางด้วย popUpTo สถานะของ NavController จะปรากฏในรายการที่ถูกต้อง (I3a8ec, b/270447657)
  • ตอนนี้ FragmentNavigator จะดึงรายการขึ้นมาอย่างถูกต้องเมื่อดึงแบ็กสแต็กเข้ามาผ่านระบบกลับหรือ popBackStack() และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับส่วนย่อยหรือไม่ (I81bdf)
  • การเพิ่มส่วนย่อยใน FragmentNavigator FragmentManager ที่ไม่ได้ใช้การนำทางจะไม่ทำให้เกิดข้อขัดข้องอีกต่อไป (b17204, b/274167493)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.6.0-alpha07

8 มีนาคม 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha07 แล้ว เวอร์ชัน 2.6.0-alpha07 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้ตัวแปร API getBackStackEntry, popBackStack, clearBackStack ที่ใช้เส้นทางจะใช้รูปแบบเส้นทางที่มีอาร์กิวเมนต์ที่ไม่มีข้อมูลและพารามิเตอร์คำค้นหาที่เว้นว่างได้ (I22294, b/269302500)
  • แก้ไขปัญหาที่การเรียกใช้ clearBackStack() จาก NavController ไม่ล้างสถานะที่บันทึกไว้ในตัวจัดการส่วนย่อยที่เชื่อมโยงกับกลุ่มข้อมูลด้านหลังที่ถูกล้างแล้ว (Ic1cce, b/271190202)
  • แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้เกิดการไฮไลต์ MenuItem ที่ไม่ถูกต้องใน BottomNavigationView เมื่อใช้ "ระบบย้อนกลับ" ระหว่างแท็บ (I634f6, b/270447657)
  • แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้ NavBackStackEntry ไม่ย้ายไปยังสถานะ "ดำเนินการต่อ" เมื่อใช้ Animation (Ib3589, b/269646882)

เวอร์ชัน 2.6.0-alpha06

22 กุมภาพันธ์ 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha06 แล้ว เวอร์ชัน 2.6.0-alpha06 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เมื่อแสดงตัวอย่าง Composable ด้วย NavHost ระบบจะแสดง startDestination ของ NavGraph โดยค่าเริ่มต้น (I2b89f)

การเปลี่ยนแปลง API

  • ตอนนี้โอเวอร์โหลด NavController navigate ทั้งหมดจะมีคำอธิบายประกอบด้วย @MainThread เพื่อให้แน่ใจว่าจะมีการเรียกในเทรดหลัก (I2c0b0, b/263427111)

แก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องเมื่อพยายามนำทางขณะใช้การนำทางส่วนย่อยแบบไดนามิก (I3ee29, b/268360479)
  • แก้ไขข้อบกพร่องที่การไปยังส่วนย่อยอื่นผ่านปุ่มย้อนกลับของระบบไม่อัปเดตแถบด้านล่างไปยังรายการที่เลือกที่ถูกต้อง (If559f, b/269044426)

ปัญหาที่ทราบ

  • เมื่อใช้การนําทางด้วย Fragments อายุการใช้งานของ NavBackStackEntry จะไม่ถึง RESUMED เมื่อใช้ API ของ Animation (b/269646882)
  • เมื่อใช้การนำทางด้วย Fragments และการนำทางด้วย BottomNavigation ถ้าคุณพยายามกู้คืนสแต็กย้อนกลับที่มีหลายรายการ BottomMenuItem จะไม่ได้รับการอัปเดตอย่างถูกต้อง (b/270447657)
  • เมื่อใช้การนำทางด้วยส่วนย่อย หลังจากคืนค่าสถานะ NavBackStackEntry Lifecycle จะไม่ได้รับ DESTROYED เมื่อส่วนย่อยเป็น DESTROYED (b/270610768)

เวอร์ชัน 2.6.0-alpha05

8 กุมภาพันธ์ 2023

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha05 แล้ว เวอร์ชัน 2.6.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) ในขณะนี้เส้นทางรองรับทั้งหมดที่มีอาร์กิวเมนต์บางส่วนหรือทั้งหมด โปรดทราบว่าอาร์กิวเมนต์ต้องตรงกันกับอาร์กิวเมนต์ของรายการ (Iebd28, Ic678c, I3b37b, b/257514373)
  • ตอนนี้ FragmentNavigator ใช้ API การเปลี่ยนเมื่อนำทางและเปิด NavBackStackEntries ซึ่งหมายความว่าตอนนี้ Lifecycle ของ NavBackStackEntry จะรอให้เอฟเฟกต์พิเศษของ Fragment สำหรับการเข้าและออกเสร็จสมบูรณ์ก่อนย้าย Lifecycle.State ชิ้นสุดท้าย (I3cb19, b/238686802)
  • ตอนนี้ DialogFragmentNavigator ใช้ API การเปลี่ยนเมื่อนำทางและเปิด NavBackStackEntries ซึ่งหมายความว่าตอนนี้ Lifecycle ของ NavBackStackEntry จะรอให้ Lifecycle ของ DialogFragment ย้ายไปที่ DESTROYED ก่อนที่จะย้ายไปยัง DESTROYED เอง (I53ee5, b/261213893)

การเปลี่ยนแปลง API

  • ตอนนี้ NavigatorState มี prepareForTransition API เพื่ออนุญาตให้ Navigator ย้าย NavBackStackEntries ไปยัง Lifecycle.State ระดับกลางได้ (I42c21, b/238686802)
  • ตอนนี้คุณสามารถเข้าถึงสแต็กด้านหลังที่เชื่อมโยงกับ NavGraphNavigator หรือ ComposeNavigator ผ่านพร็อพเพอร์ตี้ backstack ได้แล้ว ตอนนี้ ComposeNavigator จะแสดง Callback onTransitionComplete() เพื่อทำเครื่องหมาย NavBackStackEntry ที่ดำเนินการนำทางหรือ popBackStack ว่าเสร็จสมบูรณ์ (I02062, I718db, b/257519195)

แก้ไขข้อบกพร่อง

  • ขณะนี้สถานะการนำทางจะไม่ดำเนินการเมื่อใช้ API ของ push/popWithTransition และมีการจัดการรายการอยู่แล้ว (Iadbfa, b/261213893)
  • เมื่อใช้ launchSingleTop กับ NavGraph ที่ฝังไว้ ระบบจะเพิ่มปลายทางทั้งหมดที่เริ่มต้นจากปลายทางเดิมไปยัง startDestination ไว้ที่ด้านบนของ Backstack อย่างถูกต้องเท่านั้น (Id4bea, b/253256629)
  • ตอนนี้การนำทางจะแทนที่อินสแตนซ์ DialogFragment อย่างเหมาะสมเมื่อไปยังปลายทางเดียวกันโดยตั้งค่าแฟล็ก launchSingleTop เป็น true (I45b5a, b/149572817)
  • การนำทาง SafeArgs จะไม่ทำให้เกิดข้อผิดพลาดในการคอมไพล์อีกต่อไปเมื่อใช้อาร์กิวเมนต์ที่มีความยาว 19 อักขระ (Id60bc, b/257110095)

เวอร์ชัน 2.6.0-alpha04

9 พฤศจิกายน 2022

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha04 แล้ว เวอร์ชัน 2.6.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คลาสย่อยที่กำหนดเองของ NavType สามารถลบล้าง serializeAsValue เพื่อทำให้ค่าเป็นอนุกรมเป็นสตริงได้แล้ว ทำให้การรวมทั้งการทำให้เป็นอนุกรมและดีซีเรียลไลซ์ (ผ่าน parseValue) รวมอยู่ในคลาส NavType ได้โดยสมบูรณ์ ตอนนี้ StringType จะลบล้างเมธอดนี้เพื่อเรียก Uri.encode ใน String ที่ระบุ (Ie5213, b/247637434)
  • ตอนนี้ NavigationUI จะมีบันทึกเมื่อนำทางผ่าน MenuItem ที่เลือกไม่สำเร็จ (I2af5a, b/247730357)

แก้ไขข้อบกพร่อง

  • ตอนนี้ Deep Link ของการนําทางได้รับการแยกวิเคราะห์แบบ Lazy Loading แทนการเริ่มต้นกราฟ ซึ่งช่วยปรับปรุงประสิทธิภาพของแอปได้ตั้งแต่เริ่มต้นใช้งาน (Iab0ab)
  • แก้ไขข้อขัดข้องที่เกิดจากการนำทางขึ้นหลังจากการทำ Deep Link ไปยังปลายทางด้วยอาร์กิวเมนต์เริ่มต้น Null (I51c24, b/243183636)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารีการนำส่งฟีเจอร์ Play แบบละเอียด (Ib4ddc)
  • ตอนนี้ ARG ที่ปลอดภัยสำหรับการไปยังส่วนต่างๆ จะขึ้นอยู่กับปลั๊กอิน 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: แก้ไขปัญหาที่ระบบไม่ลืมสถานะ Compose ที่บันทึกไว้ (เช่น การใช้งาน rememberSaveable) และนำออกเมื่อมีการแสดงปลายทางออกจากแบ็กสแต็ก (I64949)

การอัปเดตการขึ้นต่อกัน

  • ขณะนี้การนำทางขึ้นอยู่กับ Fragment 1.5.4 (Icd424)

เวอร์ชัน 2.6.0-alpha02

5 ตุลาคม 2022

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha02 แล้ว เวอร์ชัน 2.6.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงลักษณะการทำงาน

  • เมื่อส่งรหัสของกราฟการนำทางไปยัง AppBarConfiguration (เช่น ผ่าน Menu) ตอนนี้ NavigationUI จะพิจารณาเฉพาะปลายทางเริ่มต้นของกราฟการนำทางนั้นเป็นจุดหมายระดับบนสุด แทนที่จะทำเครื่องหมายปลายทางทั้งหมดภายในกราฟเป็นปลายทางระดับบนสุดอย่างไม่ถูกต้อง ทั้งนี้ ลักษณะการทำงานในการส่งผ่านรหัสของปลายทางแต่ละรายการจะไม่มีการเปลี่ยนแปลง ฟังก์ชันเดียวกันนี้ยังใช้ได้สำหรับโค้ดของคุณเองผ่านฟังก์ชัน isTopLevelDestination ใหม่ใน AppBarConfiguration (Ie936e, b/238496771)

แก้ไขข้อบกพร่อง

  • ตอนนี้คอมโพเนนต์ navigation:navigation-fragment จะขึ้นอยู่กับเวอร์ชัน Fragment 1.5.2 แล้ว (I00ba4)
  • ระบบจะไม่อัปเดตรายการในเมนูที่เลือกอีกต่อไปเมื่อไปยังปลายทาง FloatingWindow เช่น กล่องโต้ตอบ (I4cde8, b/240308330)

เวอร์ชัน 2.6.0-alpha01

7 กันยายน 2022

ปล่อย androidx.navigation:navigation-*:2.6.0-alpha01 แล้ว เวอร์ชัน 2.6.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้การผสานรวม setupWithNavController ใน NavigationUI สำหรับการทำงานกับแถบแอปด้านบนจะแยกวิเคราะห์ค่า R.string ของอาร์กิวเมนต์ ReferenceType ที่พบใน android:label เป็นค่าสตริงแทนเอาต์พุตจำนวนเต็มของทรัพยากรที่สร้างขึ้นโดยอัตโนมัติ (I5f803, b/167959935)
  • ตอนนี้ NavDeepLink รองรับค่าเริ่มต้นสำหรับอาร์เรย์ ซึ่งช่วยให้รองรับพารามิเตอร์การค้นหาที่ซ้ำกันซึ่งจะแมปกับประเภทอาร์เรย์ของอาร์กิวเมนต์ ตอนนี้ NavType มีเมธอดเริ่มต้นซึ่งสามารถลบล้างได้เพื่อรวมค่าที่แยกวิเคราะห์แล้ว 2 ค่า (Id68c3, b/209977108)
  • เมื่อใช้สตริง ${applicationId} ที่แน่นอนเป็นตัวยึดตำแหน่งในแอตทริบิวต์ app:data และ app:dataPattern ในองค์ประกอบกิจกรรมของไฟล์ XML การนำทาง ระบบจะเติมตัวยึดตำแหน่งด้วย packageName ของบริบทเมื่อเพิ่มค่าเงินเฟ้อโดยอัตโนมัติ (Iaabde, b/234223561)
  • ตอนนี้การพยายามสร้าง NavDeepLink ที่ว่างเปล่าโดยใช้ Kotlin DSL ของ navDeepLink จะส่งผลให้มีคำเตือน Lint ที่ระบุว่า Deep Link ต้องใช้ URI, Action และ/หรือ mimetype จึงจะใช้งานได้ (I08d2f, b/154038883)

การเปลี่ยนแปลง API

  • เพิ่มฟังก์ชันของส่วนขยาย NavDestination ใหม่ที่แยกวิเคราะห์ป้ายกำกับแบบไดนามิกที่มีอาร์กิวเมนต์ในรูปแบบ android:label="{arg}" เป็นสตริง รองรับอาร์กิวเมนต์ ReferenceType โดยการแยกวิเคราะห์ค่า R.string เป็นค่าสตริง (I07d89, b/236269380)

การเปลี่ยนแปลงลักษณะการทำงาน

  • arguments ของ NavBackStackEntry และ arguments ที่ส่งไปยัง OnDestinationChangedListener เปลี่ยนเป็นสำเนาของอาร์กิวเมนต์ที่เปลี่ยนแปลงไม่ได้ซึ่งสร้างขึ้นเมื่อคุณนำทางไปยังปลายทาง ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ที่ทำกับแพ็กเกจเหล่านั้นจะไม่ปรากฏในการเข้าถึงอินสแตนซ์ arguments หรืออินสแตนซ์ OnDestinationChangedListener อื่นๆ ในภายหลัง (I676f5)

แก้ไขข้อบกพร่อง

  • จากการนำทาง 2.5.2: ตอนนี้การนำทางแบบไดนามิกจะพยายามติดตั้งปลายทางกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางดังกล่าว (Ia2c16, b/240292838)
  • จากการนำทาง 2.5.2: ตอนนี้การนำทางจะแทนที่อินสแตนซ์ Fragment อย่างเหมาะสมเมื่อไปยังปลายทางเดียวกัน และตั้งค่าแฟล็ก launchSingleTop เป็น "จริง" (I5a2f1, b/237374580)
  • จากการนำทาง 2.5.2: แก้ไข IllegalStateException ที่เกิดจากการไปยังกราฟที่ซ้อนกันแบบ 2 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางการเริ่มต้นแบบ POP ใหม่ (I9f7cb, b/243778589)

เวอร์ชัน 2.5

เวอร์ชัน 2.5.3

24 ตุลาคม 2022

ปล่อย androidx.navigation:navigation-*:2.5.3 แล้ว เวอร์ชัน 2.5.3 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • NavHost จะไม่ทำให้NoSuchElementExceptionไม่มีปลายทางสำหรับCrossfadeเขียนอีกต่อไป ระบบจะข้ามการเรียบเรียงเพลงเท่านั้น (Ieb46e, b/253299416)
  • แก้ไขปัญหาที่ระบบไม่ลืมสถานะการเขียนที่บันทึกไว้ (เช่น การใช้งาน rememberSaveable) และถูกนำออกเมื่อปลายทางถูกดึงออกจากแบ็กสแต็ก (I64949)

เวอร์ชัน 2.5.2

7 กันยายน 2022

ปล่อย androidx.navigation:navigation-*:2.5.2 แล้ว เวอร์ชัน 2.5.2 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้การนำทางแบบไดนามิกจะพยายามติดตั้งปลายทางกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางดังกล่าว (Ia2c16, b/240292838)
  • ตอนนี้การนำทางจะแทนที่อินสแตนซ์ Fragment อย่างเหมาะสมเมื่อไปยังปลายทางเดียวกัน และตั้งค่าแฟล็ก launchSingleTop เป็น "จริง" (I5a2f1, b/237374580)
  • แก้ไข IllegalStateException ที่เกิดจากการไปยังกราฟที่ซ้อนกันแบบ 2 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางการเริ่มต้นแบบ POP ใหม่ (I9f7cb, b/243778589)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.5.1

27 กรกฎาคม 2022

ปล่อย androidx.navigation:navigation-*:2.5.1 แล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • Navigation Safe Args จะไม่สร้างคำเตือนการเลิกใช้งานในคลาสที่สร้างขึ้นอีกต่อไปเมื่อใช้ประเภทอาร์กิวเมนต์ที่กำหนดเองซึ่งบันทึกไว้ใน Bundle (Id86ed, b/237725966)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.5.0

29 มิถุนายน 2022

ปล่อย androidx.navigation:navigation-*:2.5.0 แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.4.0

  • CreationExtras Integration - Navigation สามารถให้บริการ ViewModelProvider.Factory แบบไม่เก็บสถานะผ่าน CreationExtras ของ Lifecycle 2.5.0 ได้แล้ว

SafeArgs ในการนำทาง

  • Navigation Safe Args ได้อัปเกรดทรัพยากร Dependency Android Gradle Plugin เพื่อใช้ 7.0.4 แล้ว โดยยกเลิกความเข้ากันได้สำหรับเวอร์ชัน AGP ก่อนวันที่ 7.0
  • เพิ่มการสนับสนุนสำหรับแอตทริบิวต์ create.gradle ของเนมสเปซเพื่อใช้แทน applicationId

การเปลี่ยนแปลงอื่นๆ

  • visibleEntries API ไม่ใช่การทดสอบอีกต่อไปและมีฟังก์ชันสำหรับเรียกข้อมูลรายการทั้งหมดที่มีปลายทางซึ่งมองเห็นได้ในปัจจุบันตาม NavController

เวอร์ชัน 2.5.0-rc02

15 มิถุนายน 2022

ปล่อย androidx.navigation:navigation-*:2.5.0-rc02 แล้ว เวอร์ชัน 2.5.0-rc02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องที่เกิดจากการสลับใช้ปลายทางด้านล่างอย่างรวดเร็วเมื่อใช้ NavHost การเขียนการนำทาง (I3979a, b/234054916)
  • Navigation SafeArgs จะไม่ขัดข้องอีกต่อไปเมื่อใช้ applicationIdSuffix และเนมสเปซที่ไม่มี applicationId หรือเมื่อ applicationId และเนมสเปซต่างกัน (I754b1, b/233119646)
  • ตอนนี้ NavArgument มีฟังก์ชัน toString() ที่กำหนดเองเพื่อแสดงค่าภายในของอาร์กิวเมนต์ (I900a8)

เวอร์ชัน 2.5.0-rc01

11 พฤษภาคม 2022

ปล่อย androidx.navigation:navigation-*:2.5.0-rc01 แล้ว เวอร์ชัน 2.5.0-rc01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มกฎ Lint ใหม่เพื่อเตือนไม่ให้วางองค์ประกอบ <deeplink> ภายในองค์ประกอบ <activity> ในไฟล์ navigation.xml (Ic15a5, b/178403185)

แก้ไขข้อบกพร่อง

  • ตอนนี้ขอบเขตที่ประกอบกันได้ใน NavHost และ DialogHost จะได้รับการทิ้งตามลำดับที่คาดไว้ กล่าวคือ ระบบได้กำจัด Composable ภายในแล้วก่อนด้านนอก Composable (I157e6)
  • ตอนนี้ SafeArgs ของการนำทางใช้ PathSensitivity.RELATIVE ใน ArgumentsGenerationTask เพื่อให้สามารถระบุตำแหน่งใหม่ของแคชได้ ซึ่งหมายความว่าตอนนี้รายการแคชสามารถใช้ซ้ำจากบิลด์ CI ไปยังบิลด์ในเครื่องได้ (I5f67c, b/173420454)
  • กฎ Lint UnrememberedGetBackStackEntryDetector ได้รับการอัปเดตเพื่อให้มั่นใจว่าการเรียก remember รอบการเรียกไปยัง getBackStackEntry() จะส่งผ่านในออบเจ็กต์ NavBackStackEntry เป็นคีย์ด้วย (Ib7081, b/227382831)

เวอร์ชัน 2.5.0-beta01

20 เมษายน 2022

ปล่อย androidx.navigation:navigation-*:2.5.0-beta01 แล้ว เวอร์ชัน 2.5.0-beta01 มีการคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ขณะนี้ DialogNavigator ใช้ popWithTransition ขณะเรียกใช้ dismiss() การดำเนินการนี้เป็นการแก้ไขเงื่อนไขการแข่งขันเมื่อใช้ ViewModel ภายในปลายทาง dialog ที่จะทำให้เกิด IllegalStateException เมื่อปิดกล่องโต้ตอบโดยใช้ระบบกลับหรือการแตะนอกกล่องโต้ตอบเพื่อออก (Id7376, b/226552301)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้การนําทางจะขึ้นอยู่กับวงจร 2.5.0-beta01 ซึ่งจะแก้ไข IllegalStateException เมื่อซ้อน NavHost แท็กหนึ่งภายใน NavHost อื่นในแท็บการนําทางด้านล่างที่ไม่ใช่หลักเมื่อใช้สแต็กย้อนกลับหลายรายการ

เวอร์ชัน 2.5.0-alpha04

6 เมษายน 2022

ปล่อย androidx.navigation:navigation-*:2.5.0-alpha04 แล้ว เวอร์ชัน 2.5.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • visibleEntries ไม่ใช่เวอร์ชันทดลองอีกต่อไป (I4829f, b/225394514)

แก้ไขข้อบกพร่อง

  • ตอนนี้ NavHost จะใช้ visibleEntries จาก NavController เพื่อกำหนดรายการที่จะเขียน ซึ่งหมายความว่าเมื่อใช้การฝัง NavHost NavHost ด้านในควรเคลื่อนไหวอย่างเหมาะสมแล้วในตอนนี้ (I4ba2b, b/225394514)
  • ตอนนี้ StateFlow ของ visibleEntries ที่ให้ไว้โดย NavController จะอิงตามสถานะวงจรสูงสุดของรายการ แทนที่จะเป็นสถานะวงจรปัจจุบัน ซึ่งหมายความว่าแม้ว่าวงจรโฮสต์ของ navController จะต่ำกว่า STARTED แต่รายการที่แสดงทั้งหมดจะยังคงเดิม (I9e2a8, b/225394514)
  • ตอนนี้ SavedStateViewFactory รองรับการใช้ CreationExtras แล้ว แม้ว่าจะเริ่มต้นด้วย SavedStateRegistryOwner ก็ตาม หากมีการระบุค่าเพิ่มเติม ระบบจะไม่สนใจอาร์กิวเมนต์เริ่มต้น (I6c43b, b/224844583)
  • NavDeepLink แยกวิเคราะห์ URI ด้วยพารามิเตอร์การค้นหาเดี่ยวที่ไม่มีค่าได้แล้ว (I0efe8, b/148905489)
  • ตอนนี้ระบบถือว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องใน Deep Link (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

  • ตอนนี้คุณสามารถส่งผ่าน CreationExtras ไปยัง by navGraphViewModels ได้แล้ว เพื่อสร้าง ViewModel (I29217, b/217618359)

แก้ไขข้อบกพร่อง

  • NavDeepLinks รองรับอักขระขึ้นบรรทัดใหม่ที่เข้ารหัสที่ฝังอยู่ใน URI ของเส้นทาง/Deep Link อย่างเหมาะสมแล้ว (I513d1, b/217815060)
  • ตอนนี้ CreationExtras จะทำงานอย่างถูกต้องเมื่อใช้กับ NavBackStackEntries เพื่อสร้าง ViewModels (I69161, b/217617710)
  • ขณะนี้ 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: เมื่อมีการทํา Deep Link ผ่าน NavGraph ที่ซ้อนกันหลายรายการ สแต็กด้านหลังจะรวมปลายทางเริ่มต้นระดับกลางอย่างถูกต้อง (I504c0, b/214383060)

เวอร์ชัน 2.5.0-alpha01

26 มกราคม 2022

ปล่อย androidx.navigation:navigation-*:2.5.0-alpha01 แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavBackStackEntry ได้ผสานรวมกับ ViewModel CreationExtras ซึ่งเป็นส่วนหนึ่งของ Lifecycle 2.5.0-alpha01 แล้ว (Ib9fe2, b/207012490)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการสร้างการเข้าถึง ViewModel ผ่าน by navGraphViewModels() จาก onCreate() ของ Fragment จะล้มเหลวด้วย IllegalStateException (I8a14d)
  • NavDeepLink จะไม่ถอดรหัสอาร์กิวเมนต์ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้อาร์กิวเมนต์ที่เหมาะสมจะถูกส่งต่อไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399)

อาร์กิวเมนต์ที่ปลอดภัย

  • ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Args สำหรับการนำทางจะไม่สามารถใช้งานกับ Android Studio เวอร์ชันก่อน 7.0 แต่ตอนนี้ใช้ได้กับ ปลั๊กอิน 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 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ย้อนกลับจากการนำทาง 2.5.0-alpha03: NavDeepLinks รองรับอักขระขึ้นบรรทัดใหม่ที่เข้ารหัสซึ่งฝังอยู่ใน URI เส้นทาง/Deep Link อย่างถูกต้องในขณะนี้ (I513d1, b/217815060)
  • พอร์ตกลับจากการนำทาง 2.5.0-alpha03: ขณะนี้ SafeArgs ของการนำทางรองรับการใช้เนมสเปซที่กำหนดแล้ว ใน build.gradle แทนแพ็กเกจในไฟล์ AndroidManifest (I659ef, b/217414933)
  • พอร์ตกลับจากการนำทาง 2.5.0-alpha04: Navigation Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อใช้ Namespace และไม่มี AndroidManifest.xml (I17ccf, b/227229815)
  • พอร์ตกลับจากการนำทาง 2.5.0-alpha04: ตอนนี้ระบบถือว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องใน Deep Link ลิงก์ (I70a0d, b/217399862)

เวอร์ชัน 2.4.1

เวอร์ชัน 2.4.1

9 กุมภาพันธ์ 2022

ปล่อย androidx.navigation:navigation-*:2.4.1 แล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้ NavHostFragment จะตั้งค่า OnBackPressedDispatcher ให้ถูกต้องเมื่อใช้ Viewbinding กับกราฟที่ซ้อนกัน (Ifbb51, b/214577959)
  • เมื่อมีการทํา Deep Link ผ่าน NavGraph ที่ซ้อนกันหลายรายการ ตอนนี้แบ็กเอนด์จะมีปลายทางเริ่มต้นระดับกลางอย่างถูกต้อง (I504c0, b/214383060)
  • พอร์ตย้อนกลับจากการนำทาง 2.5.0-alpha01: แก้ไขปัญหาการเข้าถึง ViewModel ที่สร้างขึ้น ผ่าน by navGraphViewModels() จาก onCreate() ของ Fragment จะล้มเหลวโดยมี IllegalStateException (I8a14d)
  • ย้อนกลับจากการนำทาง 2.5.0-alpha01: NavDeepLink ไม่ได้ถอดรหัสอาร์กิวเมนต์ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้อาร์กิวเมนต์ที่ถอดรหัสอย่างถูกต้องจะถูกส่งต่อไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399)
  • พอร์ตจากการนำทาง 2.5.0-alpha01: ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Args สำหรับการนำทางที่ปลอดภัยจะไม่สามารถใช้ร่วมกับ Android Studio เวอร์ชันก่อน 7.0 ได้อีกต่อไป แต่สามารถใช้งานร่วมกับปลั๊กอิน 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

  • อาร์ติแฟกต์การนำทางทั้งหมดได้รับการเขียนใหม่ใน Kotlin วิธีนี้ช่วยเพิ่มความสามารถในการเว้นว่างของชั้นเรียนที่ใช้คำทั่วไป (เช่น คลาสย่อย NavType) ระบบได้ย้ายฟังก์ชันของส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์ -ktx ไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว อาร์ติแฟกต์ -ktx จะยังคงเผยแพร่ต่อไป แต่จะว่างเปล่าทั้งหมด
  • ตอนนี้อาร์ติแฟกต์ navigation-fragment มีการใช้งาน เลย์เอาต์ 2 แผงที่สร้างไว้ล่วงหน้าผ่าน AbstractListDetailFragment ใหม่แล้ว ส่วนย่อยนี้ใช้ SlidingPaneLayout เพื่อจัดการแผงรายการ (ที่คลาสย่อยของคุณมี) และแผงรายละเอียดซึ่งใช้ NavHostFragment เป็นการใช้งาน ดังที่แสดงในตัวอย่างการใช้งานของเรา
  • เมธอด currentBackStackEntryAsFlow() ใน NavController จะให้ Flow ที่ปล่อยออกมาเมื่อใดก็ตามที่ NavBackStackEntry ปัจจุบันมีการเปลี่ยนแปลง ขั้นตอนนี้สามารถใช้เป็นทางเลือกในการจัดการ OnDestinationChangedListener ด้วยตนเองได้
  • ตอนนี้ NavController ให้คุณเรียกรายการอินสแตนซ์ NavBackStackEntry ที่ปรากฏทั้งหมดเป็น StateFlow ผ่านพร็อพเพอร์ตี้ visibleEntries แบบทดลองได้แล้ว
  • ตอนนี้คุณสามารถขยายคลาส NavType เพื่อสร้าง NavTypes ที่กำหนดเอง จะมีการรองรับประเภทที่กำหนดเองเฉพาะเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรม เช่น ผ่านทาง กราฟการนำทาง Kotlin DSL
  • ขณะนี้การนำทางมี API findStartDestination() และ getHierarchy() ซึ่งสามารถใช้เพื่อช่วยติดตั้งใช้งาน NavigationUI ที่กำหนดเอง findStartDestination() เป็นฟังก์ชันส่วนขยายใน NavGraph ซึ่งจะค้นหาปลายทางเริ่มต้นที่แท้จริงซึ่งจะแสดงเมื่อคุณไปยังกราฟ แม้ว่า startDestination จะเป็น NavGraph ที่ฝังอยู่ก็ตาม getHierarchy() เป็นฟังก์ชันใน NavDestination ที่ใช้ยืนยันว่าปลายทางหนึ่งๆ อยู่ภายในลำดับชั้นของปลายทางอื่นหรือไม่

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • ระบบได้อัปเดตเมธอด NavigationUI ที่ใช้ BottomNavigationView เพื่อใช้ Superclass ซึ่งเปิดตัวใน Material 1.4.0 แทน NavigationBarView แล้ว การดำเนินการนี้ช่วยให้ใช้วิธีการเหล่านี้กับ NavigationRailView ได้

  • เมื่อขยายองค์ประกอบ <action> ผ่าน XML แอตทริบิวต์ภาพเคลื่อนไหวสามารถใช้แอตทริบิวต์ที่ดึงมาจากธีมของคุณโดยใช้ไวยากรณ์ app:enterAnim="?attr/transitionEnter"

  • ตอนนี้ Safe Args จะสร้างเมธอด fromSavedStateHandle() ให้กับคลาส NavArgs แต่ละคลาส (#122, b/136967621)

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

เส้นทางการนำทางและ Kotlin DSL

เวอร์ชันก่อนๆ ของการนำทางอาศัยแต่ละปลายทางที่มีรหัสจำนวนเต็มคงที่ซึ่งจะระบุตัวตนของคุณจากปลายทางระดับเดียวกัน และอนุญาตให้คุณnavigate()ไปยังจุดหมายนั้นโดยตรงหรือผ่านการดำเนินการก็ได้ แม้ว่าวิธีนี้จะยังคงถูกต้องและมีประโยชน์ โดยเฉพาะอย่างยิ่งในกรณีที่คุณกำหนดกราฟการนำทางใน XML และสามารถใช้ค่าคงที่ R.id ที่สร้างขึ้นโดยอัตโนมัติหรือ Safe Args (ซึ่งใช้ค่าคงที่เหล่านั้นเพื่อสร้างโค้ดขณะสร้าง) ระบบจำนวนเต็มที่ไม่ซ้ำกันนี้ไม่ได้จับความหมายและการแสดงออกที่จำเป็นต่อการรองรับกราฟแบบไดนามิกเต็มรูปแบบที่สร้างขึ้นแบบเป็นโปรแกรมขณะรันไทม์ผ่าน การนำทาง DSL ของ Kotlin

รุ่นนี้นำเสนอตัวเลือกใหม่ในการระบุจุดหมายในกราฟการนำทางด้วยเส้นทางโดยไม่ซ้ำกัน เส้นทางคือ String ซึ่งกำหนดเส้นทางที่ไม่ซ้ำกันไปยังปลายทาง ตอนนี้เมธอด Kotlin DSL ทั้งหมดที่ใช้รหัสปลายทางเลิกใช้งานแล้วและแทนที่ด้วย API ที่เทียบเท่าซึ่งใช้เส้นทาง

แต่ละเส้นทางควรถือเป็นส่วน "เส้นทาง" ของ Uri ที่กำหนดจุดหมายนั้น เช่น home, profile/{userId}, profile/{userId}/friends ฯลฯ เมื่อข้อมูลประจำตัวของปลายทางเชื่อมโยงกับเนื้อหาที่เฉพาะเจาะจง อาร์กิวเมนต์แบบไดนามิกเหล่านั้นควรเป็นส่วนหนึ่งของเส้นทาง โดยเป็นไปตามกฎเดียวกันกับ Implicit Deep Link

ตอนนี้ API ของ NavController ทั้งหมดที่เคยใช้แค่รหัสหนึ่งๆ มีการโอเวอร์โหลดที่ใช้เส้นทาง String ซึ่งรวมถึง navigate(), popBackStack(), popUpTo() และ getBackStackEntry()

ปัญหานี้เกี่ยวข้องกับ API บางอย่าง

  • พร็อพเพอร์ตี้ Kotlin popUpTo ใน Kotlin DSL เลิกใช้งานแล้วเพื่อ popUpToId
  • มีการเลิกใช้งาน API ของ getStartDestination() แล้วเพื่อประโยชน์ ของ getStartDestinationId()

การไปยังส่วนต่างๆ ตามเส้นทางจะใช้กฎเดียวกับ implicit Deep Link ตรงที่คุณสามารถนำทางไปยังปลายทางในกราฟที่ซ้อนกันได้โดยตรง เพื่อให้แน่ใจว่าเส้นทางเหล่านี้สามารถใช้ได้ในโปรเจ็กต์แบบหลายโมดูลโดยไม่ต้องเพิ่มลิงก์ในรายละเอียดที่มองเห็นได้จากภายนอกอย่างชัดเจนไปยังปลายทางแต่ละแห่ง ซึ่งต่างจากการนำทางตามรหัส

เขียนการนำทาง

อาร์ติแฟกต์ navigation-compose จะมีการผสานรวมระหว่างคอมโพเนนต์การนำทางและ Jetpack Compose โดยจะใช้ฟังก์ชัน @Composable เป็นปลายทางในแอปพลิเคชันของคุณ

รุ่นนี้มีสิ่งต่อไปนี้

  • Composable ของ NavHost ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL โดยใช้ปลายทาง composable และ dialog รวมถึงการรองรับ Navigators ที่ไม่บังคับ เช่น จากเนื้อหาการนำทางของ Accompanist
  • การสนับสนุนที่จำเป็นสำหรับการครอสเฟดระหว่างปลายทาง ภาพเคลื่อนไหวในการนำทางของ Accompanist สามารถใช้เพื่อควบคุมการเปลี่ยนเข้าและออกโดยใช้ Compose API เวอร์ชันทดลอง
  • การจำกัดขอบเขต Lifecycle ไปยังปลายทางที่ประกอบกันได้แต่ละรายการ ปลายทางแต่ละรายการจะถึงสถานะ RESUMED เฉพาะเมื่อการเปลี่ยนเข้าเสร็จสิ้นและตกลงเป็น STARTED ทันทีเมื่อการเปลี่ยนออกจากโหมดเริ่มต้น คุณจึงหลีกเลี่ยงปัญหา IllegalStateException และมัลติทัชทั้งหมดได้ด้วยการทริกเกอร์การเรียก navigate เมื่อ Lifecycle คือ RESUMED เท่านั้น
  • การจำกัดขอบเขต ViewModel (ผ่าน viewModel() API ของ Lifecycle ViewModel Compose 2.4.0 หรือ hiltViewModel() ของ Hilt Navigation Compose 1.0.0 ที่ระดับปลายทาง ซึ่งเป็นขอบเขตที่ยังคงอยู่กับการเปลี่ยนแปลงการกำหนดค่าและอยู่ใน Back Stack (เมื่อจัดการเนื้อหาที่ Composable ของคุณไม่ได้) และสัญญาณใน onCleared() ของ ViewModel ที่ระบุการกำจัดแบบถาวรและการล้างสถานะที่เชื่อมโยงกับ NavBackStackEntry นั้น
  • กำหนดขอบเขตสถานะ rememberSaveable ที่ระดับปลายทาง เพื่อให้มั่นใจว่าสถานะ Composable ทั้งหมดได้รับการบันทึกและกู้คืนโดยอัตโนมัติเมื่อคุณกลับไปยังปลายทาง
  • รองรับการบันทึกและกู้คืนสถานะของ NavController และสถานะของปลายทางอย่างสมบูรณ์หลังกระบวนการเสียชีวิตและการสร้างขึ้นมาใหม่
  • การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
  • รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า

  • เขียนตัวช่วยที่เจาะจงใน rememberNavController() และ currentBackStackEntryAsState() เพื่ออนุญาตสถานะการรอปและการเชื่อมต่อ NavController กับ Composable นอก NavHost (เช่น แถบนำทางด้านล่าง)

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

ดูข้อมูลเพิ่มเติมที่คำแนะนำการนำทางในการเขียน

แบ็กสแต็กหลายรายการ

NavController มีหน้าที่จัดการปลายทางสแต็กด้านหลัง โดยเพิ่มปลายทางไปยังสแต็กด้านหลังเมื่อคุณnavigate()ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack() หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions ที่มีอยู่และการผสานรวมกับองค์ประกอบ <action> ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและการกู้คืนสแต็กด้านหลัง

การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI ของ onNavDestinationSelected(), BottomNavigationView.setupWithNavController() และ NavigationView.setupWithNavController() บันทึกและคืนค่าสถานะของปลายทางที่ป๊อปโดยอัตโนมัติแล้ว ซึ่งช่วยให้สามารถรองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางด้วย Fragments นี่เป็นวิธีที่แนะนำในการผสานรวมกับสแต็กแบ็กหลายสแต็ก

API ที่สำคัญสำหรับการบันทึกและคืนค่าสถานะจะแสดงผ่านหลายแพลตฟอร์ม ดังนี้

  • ใน XML การนำทาง ตอนนี้องค์ประกอบ <action> สามารถใช้แอตทริบิวต์บูลีนของ app:popUpToSaveState และ app:restoreState เพื่อบันทึกสถานะของปลายทางที่เรียกผ่าน app:popUpTo และคืนค่าสถานะที่เชื่อมโยงกับปลายทางที่ส่งผ่านเป็น app:destination ดังนี้

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • ใน navOptions Kotlin DSL คุณจะเพิ่มพร็อพเพอร์ตี้บูลีน restoreState และพร็อพเพอร์ตี้บูลีน saveState ในเครื่องมือสร้าง popUpTo ได้ โดยทำดังนี้

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • ในการสร้างออบเจ็กต์ NavOptions ด้วยตนเองผ่าน NavOptions.Builder คุณสามารถใช้ setRestoreState() และโอเวอร์โหลดใหม่ไปยัง setPopUpTo() ที่จะรับพารามิเตอร์ saveState เพิ่มเติม

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • ขณะนี้การเรียกแบบเป็นโปรแกรมไปยัง popBackStack() สามารถใส่พารามิเตอร์ saveState เพิ่มเติมได้

  • คุณใช้เมธอด clearBackStack() เพื่อล้างสถานะที่บันทึกไว้ด้วย popBackStack() หรือ popUpToSaveState ได้

ในทุกกรณี NavController จะบันทึกและคืนค่าสถานะของ NavBackStackEntry แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel ที่กำหนดขอบเขตปลายทางของการนำทาง API ของ Navigator ได้รับการอัปเดตเพื่อให้ Navigator แต่ละรายการรองรับการบันทึกและคืนค่าสถานะของตนเองได้

การเปลี่ยนแปลงลักษณะการทำงาน

  • NavDeepLinkBuilder เพิ่มแล้ว PendingIntent.FLAG_IMMUTABLE ไปยัง PendingIntent ส่งคืนโดย createPendingIntent() เพื่อให้แน่ใจว่า API นี้ทำงานได้ตามที่คาดไว้เมื่อกำหนดเป้าหมายเป็น Android 12
  • ขณะนี้การนำทางขึ้นอยู่กับ วงจร 2.3.1 และตอนนี้ทำเครื่องหมาย setGraph(), popBackStack(), navigateUp() และ navigate() ที่อัปเดต NavBackStackEntry Lifecycle เป็น @MainThread กำลังปรับการนำทางให้อยู่ในแนวเดียวกับเทรดหลัก มีการบังคับใช้ในวงจร 2.3.0
  • ตอนนี้ Deep Link ยืนยันว่ามีอาร์กิวเมนต์ที่จำเป็นทั้งหมด (ที่ไม่มีค่าเริ่มต้น) อยู่ใน Uri
  • ตอนนี้อาร์กิวเมนต์ที่แยกวิเคราะห์แล้ว NavDeepLink ตัวจะพิจารณาเครื่องหมายสี่เหลี่ยมในลักษณะเดียวกับเครื่องหมายคำถามเป็นตัวคั่นระหว่างกลุ่มเส้นทาง ซึ่งป้องกันไม่ให้อาร์กิวเมนต์ครอบคลุมเครื่องหมายสี่เหลี่ยม
  • เมื่อสร้างการทำงาน ตอนนี้โค้ด Kotlin ที่สร้างจาก Safe Args จะใส่อาร์กิวเมนต์โดยไม่มี ค่าเริ่มต้นก่อนหน้ารายการที่มีค่าเริ่มต้นเป็นพารามิเตอร์
  • ตอนนี้ Safe Args จะวางพารามิเตอร์เมื่อสร้างอาร์กิวเมนต์ ที่ไม่มีค่าเริ่มต้นอยู่ก่อนรายการที่มีค่าเริ่มต้น
  • ตอนนี้ Safe-Args ต้องใช้ปลั๊กอิน Android Gradle 4.2.0 แล้ว ซึ่งหมายความว่าคุณไม่ควรได้รับคำเตือน "applicationIdTextResource" อีกต่อไป

ปัญหาที่ทราบ

  • แก้ไขในการนำทาง 2.5.0-alpha01: การเข้าถึง ViewModel ที่สร้างแล้ว ผ่าน by navGraphViewModels() จาก onCreate() ของ Fragment จะล้มเหลวโดยมีIllegalStateException (b/213504272)
  • แก้ไขในการนำทาง 2.5.0-alpha01: Safe Args 2.4.0 ใช้ร่วมกันไม่ได้ ด้วยปลั๊กอิน Android Gradle 7.1.0 ขึ้นไป (b/213086135)
  • การทำ Deep Link กับกราฟการนำทางที่ซ้อนกันหลายกราฟไม่ได้สร้าง Backstack (b/214383060)

เวอร์ชัน 2.4.0-rc01

15 ธันวาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-rc01 แล้ว เวอร์ชัน 2.4.0-rc01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้อาร์กิวเมนต์ที่แยกวิเคราะห์แล้ว NavDeepLink รายการจะพิจารณาเครื่องหมายสี่เหลี่ยมในลักษณะเดียวกับเครื่องหมายคําถามเป็นตัวคั่นระหว่างอาร์กิวเมนต์ (I21309, b/180042703)

แก้ไขข้อบกพร่อง

  • Deep Link จะไม่ละเว้นอาร์กิวเมนต์ที่มีค่าเหมือนกับชื่อของตัวยึดตำแหน่งอีกต่อไป (If8017, b/207389470)
  • NavController จะไม่ขัดข้องอีกต่อไปเมื่อป้อนปลายทางที่ซ้อนกันโดยใช้การเปลี่ยนหลังจากที่กู้คืน NavController แล้ว (I0f7c9, b/205021623)
  • ข้อความแสดงข้อผิดพลาดเมื่อใช้ startDestination ที่ไม่ถูกต้องจะใช้ค่าเริ่มต้นเป็นเส้นทางของปลายทางเริ่มต้น หากมี (I86b9d, b/208041894)

แก้ไขข้อบกพร่องในการเขียนเพื่อไปยังส่วนต่างๆ

  • แก้ไขข้อขัดข้องที่อาจเกิดขึ้นซึ่งเกิดจากการสลับใช้ปลายทางเริ่มต้นและปลายทางอื่นอย่างรวดเร็วโดยใช้รายการในเมนูการนำทางด้านซ้าย (Ic8976, b/208887901)
  • ขณะนี้ปลายทางของกล่องโต้ตอบได้รับการกู้คืนอย่างเหมาะสมที่ด้านบนของหน้าจอหลังจากการเปลี่ยนแปลงการกำหนดค่าหรือกระบวนการไม่ทำงาน (I4c0dc, b/207386169)
  • แก้ไขปัญหาในกรณีที่การพยายามเรียก ViewModel จาก NavBackStackEntry ของกล่องโต้ตอบไม่สำเร็จเมื่อมีการปิดกล่องโต้ตอบ (I6b96d, b/206465487)
  • แก้ไขปัญหาเมื่อใช้ปลายทาง activity กับ NavHost ของการเขียนการนำทาง ซึ่งจะส่งผลให้มีการจัดองค์ประกอบใหม่อย่างไม่มีที่สิ้นสุด (I8f64C)
  • แก้ไขการรั่วไหลของการเขียนการนำทางในตำแหน่งที่ใช้การอ้างอิงกิจกรรมเดิมหลังจากที่เปลี่ยนการกำหนดค่าหรือกระบวนการไม่ทำงาน (I4efcb, b/204905432)

แก้ไขข้อบกพร่องของ Args ที่ปลอดภัย

  • SafeArgs ไม่ขัดข้องอีกต่อไปเมื่อพยายามกู้คืนอาร์เรย์แบบพาร์เซลที่กำหนดเองหลังจากกระบวนการเสียชีวิต (I618e8, b/207315994)
  • แก้ไขข้อบกพร่องในอาร์กิวเมนต์ที่ปลอดภัยที่ไม่อนุญาตให้อาร์เรย์บูลีนมีค่า null (I8c396, b/174787525)

เวอร์ชัน 2.4.0-beta02

3 พฤศจิกายน 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-beta02 แล้ว เวอร์ชัน 2.4.0-beta02 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • การจัดการทั้งโดยชัดแจ้งและโดยนัย Deep Link จะเพิ่มค่าสถานะ saveState โดยอัตโนมัติ เมื่อไปยังกราฟอื่น ให้แน่ใจว่าโค้ด เช่น NavigationUI.setupWithNavController และ โค้ดที่ใช้สแต็กแบ็กหลายสแต็กทำงานตามที่คาดไว้ (Ic8807)

การเปลี่ยนแปลงลักษณะการทำงาน

  • ขณะนี้มีการรวบรวมรูปแบบ Deep Link แบบ Lazy Loading ใน NavDeepLink แทนในช่วงภาวะเงินเฟ้อ ซึ่งน่าจะปรับปรุงเวลาเงินเฟ้อของกราฟการนำทางที่มี Deep Link (b8d257, b/184149935)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ NavBackStackEntries ถูกพุชไปที่ Lifecycle.State.CREATEDหลังจากย้ายไปยัง Lifecycle.State.STARTED เมื่อ ระบบจะเพิ่ม NavHost ลงใน setContent() ของกิจกรรมโดยตรง (Ia5ac1, b/203536683)
  • แก้ไขเงื่อนไขการแข่งขัน เรียกจุดหมาย DialogFragment ออกจาก Back Stack ก่อนที่กล่องโต้ตอบจะปรากฏขึ้นจริง จะไม่ปิดกล่องโต้ตอบจริงๆ ซึ่งส่งผลให้ การขัดข้องเมื่อกล่องโต้ตอบข้อผิดพลาดด้วยตนเอง ปิดโดยผู้ใช้ (I687e5)
  • แก้ไขปัญหาที่ onNavDestinationSelected API ใน NavigationUI จะ ส่งคืน true แม้ว่าจริงๆ แล้วคุณไม่ได้navigate()ไปที่ กราฟการนำทางนั้น ตอนนี้โมเดลก็ใช้ตรรกะเดียวกัน ที่ใช้ภายในโดย setupWithNavController เท่านั้น เลือก MenuItem ที่เชื่อมโยงกับ ปลายทางโดยใช้ hierarchy ของปลายทางดังกล่าว (I2b053)

เวอร์ชัน 2.4.0-beta01

27 ตุลาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-beta01 แล้ว เวอร์ชัน 2.4.0-beta01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถใช้ by navGraphViewModel กับเส้นทางเป็นทางเลือกในการใช้รหัส เพื่อให้รองรับการใช้ Navigation Kotlin DSL ด้วย Fragments ได้ดียิ่งขึ้น (I901e3, b/201446416)

การเปลี่ยนแปลง API

  • ขณะนี้ visibleEntries API อยู่ในขั้นทดลอง (I93f6f)

แก้ไขข้อบกพร่อง

  • ViewModels จะไม่ถูกทำลายเมื่อการเปลี่ยนเกิดขึ้น ถูกขัดจังหวะด้วยการกลับไปกลับมาระหว่างหน้าจอเดียวกัน (Id52d8, b/200817333)
  • อาร์กิวเมนต์ NavDeepLink ที่เป็นค่าว่างไม่ได้แล้ว ต้องระบุค่าเริ่มต้นเมื่อเพิ่ม Deep Link ไปยัง NavDestination วินาที (I5aad4, b/201320030)
  • NavBackStackEntries ซึ่งมีวงจรต่างกัน ถือว่าเท่ากันมากกว่า ซึ่งหมายความว่า NavHost จะเขียนใหม่ทั้งหมด ปลายทางเมื่อนำทางด้วย SingleTop และเมื่อเลือกใหม่ รายการในเมนูด้านล่าง (I1b351, b/196997433)
  • แก้ไขปัญหาเกี่ยวกับ AbstractListDetailFragment ที่ทำให้เกิดแอตทริบิวต์ layout_width และ layout_weight ในแผงรายการที่แสดงโดย onCreateListPaneView() เพื่อ ได้รับการจัดการหรือละเว้นอย่างไม่ถูกต้อง (f5fbf3)
  • สถานะภาพของปลายทางของกล่องโต้ตอบแล้ว ยังคงซิงค์กับฟิลด์ DialogFragmentNavigator ซึ่งหมายความว่าการเรียกใช้โฆษณาอะซิงโครนัสด้วยตัวเอง dismiss() API สำหรับ DialogFragment ล้างทั้งหมดอย่างถูกต้องแล้ว ปลายทางของกล่องโต้ตอบเหนือกล่องโต้ตอบที่ปิดอยู่ในขณะนี้ ช่วงเวลานี้ ไม่มีผลต่อกรณีที่คุณใช้ popUpTo หรือ popBackStack()เพื่อปิดกล่องโต้ตอบ (I77ba2)
  • ขณะนี้อยู่ที่ AbstractAppBarOnDestinationChangedListener มีข้อความแสดงข้อผิดพลาดที่ชัดเจนขึ้นสำหรับ onDestinationChanged() (Ie742d)

เวอร์ชัน 2.4.0-alpha10

29 กันยายน 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha10 แล้ว เวอร์ชัน 2.4.0-alpha10 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavController ให้คุณเรียกรายการที่แสดงทั้งหมด อินสแตนซ์ NavBackStackEntry รายการผ่าน StateFlow visibleEntries (Ia964e)
  • ตอนนี้ rememberNavController() จะใช้ตัวเลือกที่ไม่บังคับ ชุดของอินสแตนซ์ Navigator รายการที่จะเพิ่มลงใน ส่งคืน NavController เพื่อรองรับตัวเลือกได้ดียิ่งขึ้น Navigator เช่น ผู้ใช้จาก เนื้อหาการนำทางของ Accompanist (I4619e)

แก้ไขข้อบกพร่อง

  • การนำทางแบบไดนามิกจะไม่ขัดข้องอีกต่อไปเมื่อกิจกรรม สร้างใหม่ (Ifa6a3, b/197942869)
  • แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบที่เกิดขึ้นเฉพาะหลังจากที่เปิดกลับไปยังปลายทาง Composable ที่มี NavHost (3ed148, b/195668143)
  • ตอนนี้ SafeArgs สร้างอาร์กิวเมนต์สำหรับ fromBundle() และ fromSavedStateHandle() ในลำดับพารามิเตอร์ที่เหมาะสม (I824a8, b/200059831)

เวอร์ชัน 2.4.0-alpha09

15 กันยายน 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha09 แล้ว เวอร์ชัน 2.4.0-alpha09 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณใช้เมธอด clearBackStack() ได้แล้ว เพื่อล้างสถานะที่บันทึกไว้กับ popBackStack() หรือ popUpToSaveState (I80a0F)
  • ตอนนี้คุณสามารถส่งรายการอาร์กิวเมนต์และ/หรือลิงก์ในรายละเอียดไปยัง เครื่องมือสร้างกราฟการนำทางที่ซ้อนกันและจะเพิ่มไว้โดยอัตโนมัติ กับกราฟผลลัพธ์ (I8a470, b/182545357)

การเปลี่ยนแปลง API

  • ฟังก์ชัน Kotlin DSL ของ navArgument เป็นส่วนหนึ่งของ navigation-common จากเดิม navigation-compose ซึ่งต้องการ กำลังอัปเดตการนำเข้าเพื่อใช้ฟังก์ชันนี้ต่อไป (I1d095)

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้ Safe Args จะวางพารามิเตอร์เมื่อสร้างอาร์กิวเมนต์ ที่ไม่มีค่าเริ่มต้นอยู่ก่อนรายการที่มีค่าเริ่มต้น (I89709, b/198493585)

แก้ไขข้อบกพร่อง

  • เมื่อใช้การเขียนการนำทาง NavGraphs จะ DESTROYED เมื่อบุตรหลานทุกคนอายุครบ DESTROYED ปี (I86552, b/198741720)
  • อาร์กิวเมนต์ NavDeepLink ที่เป็นค่าว่างไม่ได้แล้ว ต้องระบุค่าเริ่มต้น (Ia14ef, b/198689811)
  • การเรียก setGraph() ด้วยกราฟใหม่ จะล้างสแต็กแบ็กที่บันทึกไว้ทั้งหมดด้วย กับลักษณะการทำงานก่อนหน้าในการเปิดแบ็กสแต็ก (I97f96)
  • แก้ไขปัญหาเกี่ยวกับ อินสแตนซ์ OnDestinationChangedListener รายการและ currentBackStackEntryFlow ไม่ได้รับการแจ้งเตือนเมื่อ ด้วย launchSingleTop (Iaaebc)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.4.0-alpha08

1 กันยายน 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha08 แล้ว เวอร์ชัน 2.4.0-alpha08 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถขยายคลาส NavType เพื่อสร้าง NavTypes ที่กำหนดเอง จะมีการรองรับประเภทที่กำหนดเองเฉพาะเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรม เช่น ผ่านทาง กราฟการนำทาง Kotlin DSL (I78440, b/196871885)

การเปลี่ยนแปลงลักษณะการทำงาน

  • เมื่อสร้างการทำงาน ตอนนี้โค้ด Kotlin ที่สร้างจาก Safe Args จะใส่อาร์กิวเมนต์โดยไม่มี ค่าเริ่มต้นก่อนหน้ารายการที่มีค่าเริ่มต้นเป็นพารามิเตอร์ (Idb697, b/188855904)
  • ตอนนี้ Deep Link ยืนยันว่ามีอาร์กิวเมนต์ที่จำเป็นทั้งหมด (ที่ไม่มีค่าเริ่มต้น) อยู่ใน Uri (#204, b/185527157)

แก้ไขข้อบกพร่อง

  • กำลังใช้ getBackStackEntry และ previousBackStackEntry ภายใน composable() ร่วมกับ remember() จะไม่ทำให้เกิด ข้อยกเว้นในกรณีที่ไม่มีปลายทางอยู่ในสแต็กด้านหลัง (I75138, b/194313238)
  • ตอนนี้การเขียนในการไปยังส่วนต่างๆ เขียนใหม่ได้ถูกต้องเมื่อเปลี่ยนกลับ อาร์กิวเมนต์แบบซ้อนและใช้ launchSingleTop=true (Iebd69, b/186392337)
  • จะไม่มีArrayIndexOutOfBoundsExceptionอีกต่อไป เมื่อโทรหา setGraph ด้วยกราฟที่มีปลายทาง 13 หรือ 29 แห่ง (I1a9f1, b/195171984)
  • โปรแกรมสร้าง Java ของ SafeArgs ไม่ควรทำให้เกิด Lint อีกต่อไป คำเตือนเมื่อสร้างคลาส Args (I1a666, b/185843837)

การสนับสนุนภายนอก

  • ขอบคุณ ospixd ที่ช่วยตรวจสอบว่า Deep Link ยืนยันว่ามีอาร์กิวเมนต์ที่จำเป็นทั้งหมด (ที่ไม่มีค่าเริ่มต้น) อยู่ใน Uri (#204, b/185527157)

เวอร์ชัน 2.4.0-alpha07

18 สิงหาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha07 แล้ว เวอร์ชัน 2.4.0-alpha07 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • การเขียนในการไปยังส่วนต่างๆ จะบันทึกสถานะอย่างถูกต้องหลังจาก และเมื่อเปลี่ยนกราฟขณะใช้ตัวแปร Back Stack (If5a3d, b/195141957)
  • การเลือกแท็บเดิมอีกครั้งเมื่อใช้การเขียนการนำทางด้วย สแต็กด้านหลังจำนวนมากจะไม่ทำให้หน้าจอว่างเปล่าอีกต่อไป (I860dc, b/194925622)
  • ขณะนี้ NavHost สังเกตเห็นการเปลี่ยนแปลงใน Lifecycle.State ของ NavBackStackEntry ซึ่งหมายความว่าการใช้ NavHost ในแฟรกเมนต์ตอนนี้จะ ได้รับการจัดองค์ประกอบใหม่อย่างเหมาะสมเมื่อวงจรเปลี่ยนไป แทนที่จะทำให้หน้าจอว่างเปล่า (I4eb85, b/195864489)
  • แก้ไขปัญหาที่การปิด DialogFragment จะไม่อัปเดต สถานะ NavController หลังจากสร้างกิจกรรมของคุณอีกครั้ง (เช่น หลังจากการเปลี่ยนแปลงการกำหนดค่า) (Icd72b)
  • แก้ไขปัญหาเมื่อดึง ปลายทางของ NavController จะไม่อัปเดต การจัดการปุ่มย้อนกลับของระบบ ซึ่งอาจเป็นสาเหตุให้ NavController เพื่อสกัดกั้นปุ่มย้อนกลับ แม้จะไม่มีแบ็กสแต็กให้โดดเด่น (If3b34)
  • ตอนนี้การกำหนดเป้าหมายที่ปลอดภัยจะสร้าง toSavedStateHandle โดยอัตโนมัติ สำหรับอาร์กิวเมนต์ที่สามารถใช้ทดสอบโค้ด ViewModel ของคุณได้ (If1e2d, b/193353880)

เวอร์ชัน 2.4.0-alpha06

4 สิงหาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha06 แล้ว เวอร์ชัน 2.4.0-alpha06 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เมธอด requireSlidingPaneLayout() และ requireDetailPaneNavHostFragment() ใน AbstractListDetailFragment ได้เปลี่ยนชื่อเป็น getSlidingPaneLayout() และ getDetailPaneNavHostFragment() ตามลำดับ (I34a08)

การเปลี่ยนแปลงลักษณะการทำงาน

  • เมื่อใช้ภาพเคลื่อนไหว (เช่น Crossfade) Lifecycle ของปลายทางใหม่จะไปถึง RESUMED เมื่อภาพเคลื่อนไหวเสร็จสมบูรณ์เท่านั้น (If0543, b/172112072, b/194301889)
  • NavHost ของการเขียนในการไปยังส่วนต่างๆ ตั้งค่าฟังก์ชัน โดยเป็นส่วนหนึ่งของการเรียบเรียงแรก (Ieb7be)

แก้ไขข้อบกพร่อง

  • การป้อนปลายทางสุดท้ายของกราฟการนำทางจะไม่ทำให้ ClassCastException แสดงอีกต่อไป (If0543, b/172112072, b/194301889)
  • แก้ไข NullPointerException ซึ่งเกิดขึ้นเมื่อเพิ่ม Deep Link โดยไม่มี Uri และนำทางผ่านเส้นทางหรือ Deep Link (938a0c, b/193805425)
  • แก้ไขปัญหาในการช่วยเขียนการนำทางในตำแหน่ง ที่ทํา Deep Link แล้ว NavBackStackEntry จะไม่เข้าถึง รัฐRESUMED (I192c5)
  • แก้ไขปัญหาที่การเปิดปลายทางของกล่องโต้ตอบไม่อัปเดตการจัดการปุ่มย้อนกลับของระบบของ NavController ซึ่งอาจส่งผลให้ NavController ดักจับปุ่มย้อนกลับ แม้ว่าจะไม่มีสแต็ก Back Stack ปรากฏขึ้น (aosp/1782668)

เวอร์ชัน 2.4.0-alpha05

21 กรกฎาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha05 แล้ว เวอร์ชัน 2.4.0-alpha05 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้ NavHost ของการเขียนในการไปยังส่วนต่างๆ จะใช้การตรวจสอบแบบครอสเฟดเสมอขณะนำทาง ผ่านปลายทาง (I07049, b/172112072)
  • ตอนนี้คุณสามารถเปลี่ยนแปลงกราฟของ NavHost ได้แล้ว กราฟ ที่มี startDestination และปลายทางเดียวกันในกราฟจะเป็น ถือว่าเท่ากันและจะไม่ล้างแบ็กสแต็ก NavController (I0b8db, b/175392262)

แก้ไขข้อบกพร่อง

  • แก้ไขNoSuchElementExceptionเมื่อ กำลังโทรหา popBackStack() จากภายใน LifecycleObserver แนบกับ NavBackStackEntry ที่เกิดจาก อัปเดตสถานะของ NavController อีกครั้ง (I64621)
  • ขณะนี้ AbstractListDetailFragment อนุญาต SlidingPaneLayout จะถูกถอดออกทั้งหมด APK ของคุณเมื่อไม่ได้ใช้ AbstractListDetailFragment (I611ad)
  • ตอนนี้ NavGraph และ NavDestination จะลบล้างเมธอด "เท่ากับ" เพื่อ ระบบจะถือว่าออบเจ็กต์ 2 รายการที่มีค่าเดียวกัน (I166eb, b/175392262)

เวอร์ชัน 2.4.0-alpha04

1 กรกฎาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha04 แล้ว เวอร์ชัน 2.4.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้อาร์ติแฟกต์ navigation-fragment มีการใช้งาน เลย์เอาต์ 2 แผงที่สร้างไว้ล่วงหน้าผ่าน AbstractListDetailFragment ใหม่แล้ว ส่วนย่อยนี้ใช้ SlidingPaneLayout เพื่อจัดการแผงรายการ (ที่คลาสย่อยของคุณมี) และแผงรายละเอียดซึ่งใช้ NavHostFragment เป็นการใช้งาน ดังที่แสดงในตัวอย่างการใช้งานของเรา (Iac4be, b/191276636)
  • ขณะนี้อาร์ติแฟกต์ NavHost จาก navigation-compose รองรับปลายทาง dialog นอกเหนือจากปลายทาง composable แล้ว ปลายทางกล่องโต้ตอบเหล่านี้แต่ละรายการจะแสดงภายใน Dialog ที่ประกอบกันได้ โดยลอยอยู่เหนือปลายทาง composable ปัจจุบัน (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

การเปลี่ยนแปลง API

  • ฟังก์ชัน add ใน NavigatorState ได้เปลี่ยนชื่อเป็น push การเรียกใช้ add() ในปัจจุบันทั้งหมดจะต้องเปลี่ยนเป็น push() (Ie89fc, b/172112072)
  • ตอนนี้อินสแตนซ์ Navigator ที่กำหนดเองสามารถใช้ API pushWithTransaction และ popWithTransition ใน NavigatorState เพื่อพุชหรือสร้างปลายทางแบบไม่พร้อมกันได้แล้ว โปรดทราบว่าตัวนำทางที่รวมอยู่ยังไม่ได้ใช้ API นี้ (Ic4d7c, b/172112072)

การเปลี่ยนแปลงลักษณะการทำงาน

  • NavDeepLinkBuilder เพิ่มแล้ว PendingIntent.FLAG_IMMUTABLE ไปยัง PendingIntent ส่งคืนโดย createPendingIntent() เพื่อให้แน่ใจว่า API นี้ทำงานได้ตามที่คาดไว้เมื่อกำหนดเป้าหมายเป็น Android 12 (If8c52)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับ <include-dynamic> ซึ่ง อาร์กิวเมนต์ที่ส่งไปยังกราฟจะไม่ถูกส่งผ่านอย่างถูกต้อง ลงในกราฟที่รวมแบบไดนามิก (I3e115)
  • แก้ไขNullPointerExceptionเมื่อนำทางไปยังจุดหมาย โดยใช้อาร์กิวเมนต์ string[] ที่มีค่าเริ่มต้นเป็น @null (I1fbe8)
  • เพิ่มกฎ ProGuard สำหรับ @Navigator.Name เพื่อแก้ไขปัญหา เมื่อใช้ R8 3.1 โหมดเต็ม (I2add9, b/191654433)
  • SafeArgs จะไม่ล้มเหลวในการสร้างแอปด้วย Kotlin เวอร์ชันก่อน 1.5.0 (Icd1ff, b/190739257)

เวอร์ชัน 2.4.0-alpha03

16 มิถุนายน 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha03 แล้ว เวอร์ชัน 2.4.0-alpha03 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ต้องเรียก navigate() 2 ครั้งเพื่อไปยังกราฟแบบไดนามิกที่รวมอยู่ (I7785c, b/188859835)
  • แก้ไขการถดถอยที่เกิดขึ้นใน นำทาง2.4.0-alpha01 ไปที่ setupActionBarWithNavController() จะไม่ เมื่อคุณอยู่บน ปลายทางระดับบนสุด (I5d443, b/189868637)
  • แก้ไขIllegalStateExceptionเมื่อ กำลังโทรหา popBackStack() หลังจากเรียกก่อนหน้านี้ กราฟรากของ NavController (I2a330, b/190265699)
  • ตอนนี้กฎ ProGuard สำหรับ by navArgs() ถูกต้องแล้ว มีผลเมื่อใช้ navigation-common หรืออาร์ติแฟกต์ ที่ขึ้นอยู่กับความต้องการนั้นๆ (I68800, b/190082521)
  • OnDestinationChangedListenerที่โทรหา navigate() ในครั้งแรกที่มีการติดต่อกลับในตอนนี้ ได้รับการติดต่อกลับครั้งที่ 2 พร้อมกับปลายทางอย่างถูกต้อง ที่มีการนำทางไป (Ie5f9e, b/190228815)
  • Safe Args ไม่ขัดข้องอีกต่อไปเมื่อใช้กับฟีเจอร์แบบไดนามิก และ AGP 7.0 ขึ้นไป (I69518, b/189966576)

ปัญหาที่ทราบ

  • Safe Args จะล้มเหลวโดยมีข้อผิดพลาด Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ เมื่อใช้ Gradle 6.7.0 เนื่องจากขึ้นอยู่กับ Kotlin เวอร์ชันเก่า คุณหลีกเลี่ยงปัญหานี้ได้ด้วยการอัปเดตไปใช้ Gradle 7.0 (b/190739257)

เวอร์ชัน 2.4.0-alpha02

2 มิถุนายน 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha02 แล้ว เวอร์ชัน 2.4.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ขณะนี้ระบบรองรับเส้นทางสำหรับปลายทางกิจกรรม ส่วนย่อย และกล่องโต้ตอบ รวมถึงปลายทาง Dynamicnavigation Kotlin DSL แล้ว (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI ได้เพิ่ม API ทดลองชั่วคราวเพื่ออนุญาตให้เลือกไม่ใช้การบันทึกสถานะของคุณ แม้ว่าการบันทึกสถานะจะเป็นลักษณะการทำงานที่ถูกต้องเสมอ แต่ก็ยังมีการใช้ไลบรารีที่เลิกใช้งานแล้ว (เช่น ส่วนย่อยที่เก็บไว้) ที่ไม่รองรับเมื่อบันทึกสถานะ ด้วยเหตุนี้จึงเปิดโอกาสให้แอปต่างๆ ค่อยๆ แปลงจาก API ที่ไม่รองรับได้ (Idf93c)
  • ขณะนี้การนำทางมี API findDestination() และ getHierarchy() ซึ่งสามารถใช้เพื่อช่วยติดตั้งใช้งาน NavigationUI ที่กำหนดเอง findDestination() เป็นฟังก์ชันส่วนขยายใน NavGraph ซึ่งจะค้นหาปลายทางภายในกราฟ getHierarchy() เป็นฟังก์ชันใน NavDestination ที่ใช้ตรวจสอบได้ว่าปลายทางที่ระบุอยู่ภายในลำดับชั้นของปลายทางอื่นหรือไม่ (I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • เมธอด NavigationUI ที่ใช้ BottomNavigationView ได้รับการอัปเดตให้ใช้ Superclass ซึ่งเปิดตัวใน Material 1.4.0, NavigationBarView แทน การดำเนินการนี้ช่วยให้ใช้วิธีการเหล่านี้กับ NavigationRailView ได้ (Ib0b36, b/182938895)

  • เมื่อขยายองค์ประกอบ <action> ผ่าน XML แอตทริบิวต์ภาพเคลื่อนไหวสามารถ ใช้แอตทริบิวต์ที่ดึงมาจากธีมของคุณโดยใช้ ไวยากรณ์ app:enterAnim="?attr/transitionEnter" (I07bc1, b/178291654)

การเปลี่ยนแปลง API

  • เราเลิกใช้งานเครื่องมือสร้าง DSL ของ Kotlin ที่ใช้รหัสแล้ว และ ควรแทนที่ด้วยเครื่องมือสร้างที่ใช้เส้นทาง (I85b42, b/188816479) (I9f58f, b/188816479)

แก้ไขข้อบกพร่อง

  • ขณะนี้ DialogFragmentNavigator ใช้เมธอด NavigatorState.pop() API เพื่อแจ้ง NavController เมื่อมีการปิดกล่องโต้ตอบโดยการกดปุ่มย้อนกลับ หรือคลิกภายนอก เพื่อให้แน่ใจว่า สถานะ NavController จะซิงค์กับ สถานะของผู้นำทาง (I2ead9)
  • การไปยังส่วนต่างๆ จะไม่แสดง ConcurrentModificationException เมื่อ โดยใช้การควบคุมรายการ OnDestinationChangedListeners จากด้วย Callback onDestinationChanged (Ib1707, b/188860458)

  • Safe Args ไม่ขัดข้องอีกต่อไปเมื่อพยายามสร้าง ใน Kotlin (รหัส 2416, b/188564435)

  • ตอนนี้เมธอด setId ใน NavDestination มีการใส่คำอธิบายประกอบอย่างถูกต้อง กับ @IdRes ดังนั้นจึงยอมรับเฉพาะรหัสทรัพยากรเท่านั้น (I69b80)

  • ตอนนี้พารามิเตอร์ int ของ findNode คือ resId แทนที่จะเป็น resid (I7711D)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้ Safe-Args ต้องใช้ปลั๊กอิน Android Gradle 4.2.0 แล้ว ซึ่งหมายความว่าคุณไม่ควรได้รับคำเตือน "applicationIdTextResource" อีกต่อไป (I6d67b, b/172824579)

เวอร์ชัน 2.4.0-alpha01

18 พฤษภาคม 2021

ปล่อย androidx.navigation:navigation-*:2.4.0-alpha01 แล้ว เวอร์ชัน 2.4.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เมธอด currentBackStackEntryAsFlow() ใน NavController จะให้ Flow ที่ปล่อยออกมาเมื่อใดก็ตามที่ NavBackStackEntry ปัจจุบันมีการเปลี่ยนแปลง ขั้นตอนนี้สามารถใช้เป็นทางเลือกในการจัดการ OnDestinationChangedListener ด้วยตนเองได้ (I19c4a, #89, b/163947280)

แบ็กสแต็กหลายรายการ

NavController มีหน้าที่จัดการปลายทางสแต็กด้านหลัง โดยเพิ่มปลายทางไปยังสแต็กด้านหลังเมื่อคุณnavigate()ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack() หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions ที่มีอยู่และการผสานรวมเข้ากับรายการ <action> ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและการกู้คืนสแต็กด้านหลัง (b/80029773)

การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI ของ onNavDestinationSelected(), BottomNavigationView.setupWithNavController() และ NavigationView.setupWithNavController() บันทึกและคืนค่าสถานะของปลายทางที่ป๊อปโดยอัตโนมัติแล้ว ซึ่งช่วยให้สามารถรองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางด้วย Fragments นี่เป็นวิธีที่แนะนำในการผสานรวมกับสแต็กแบ็กหลายสแต็ก (Ie07ca)

API ที่สำคัญสำหรับการบันทึกและคืนค่าสถานะจะแสดงผ่านหลายแพลตฟอร์ม ดังนี้

  • ใน XML การนำทาง ตอนนี้องค์ประกอบ <action> สามารถใช้แอตทริบิวต์บูลีนของ app:popUpToSaveState และ app:restoreState เพื่อบันทึกสถานะของปลายทางที่เรียกผ่าน app:popUpTo และคืนค่าสถานะที่เชื่อมโยงกับปลายทางที่ส่งผ่านเป็น app:destination ดังนี้

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • ใน navOptions Kotlin DSL คุณจะเพิ่มพร็อพเพอร์ตี้บูลีน restoreState และพร็อพเพอร์ตี้บูลีน saveState ในเครื่องมือสร้าง popUpTo ได้ โดยทำดังนี้

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • ในการสร้างออบเจ็กต์ NavOptions ด้วยตนเองผ่าน NavOptions.Builder คุณสามารถใช้ setRestoreState() และโอเวอร์โหลดใหม่ไปยัง setPopUpTo() ที่จะรับพารามิเตอร์ saveState เพิ่มเติม

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • ขณะนี้การเรียกแบบเป็นโปรแกรมไปยัง popBackStack() สามารถใส่พารามิเตอร์ saveState เพิ่มเติมได้

ในทุกกรณี NavController จะบันทึกและคืนค่าสถานะของ NavBackStackEntry แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel ที่กำหนดขอบเขตปลายทางของการนำทาง API ของ Navigator ได้รับการอัปเดตเพื่อให้ Navigator แต่ละรายการรองรับการบันทึกและคืนค่าสถานะของตนเองได้

ทั้ง ComposeNavigator ที่ใช้สำหรับ composable ปลายทางในการเขียนการนำทางและ FragmentNavigator และ DynamicFragmentNavigator ที่ใช้สำหรับปลายทาง <fragment> ในการนำทางด้วย Fragments ได้รับการอัปเดตให้ใช้ Navigator API ใหม่ และรองรับการบันทึกและการคืนค่าสถานะ

เส้นทางการนำทาง

เส้นทางคือ String ที่ระบุปลายทางแบบไม่ซ้ำ แม้ว่าก่อนหน้านี้จะใช้เฉพาะในการเขียนการนำทาง แต่ปัจจุบันแนวคิดนี้ได้กลายมาเป็นส่วนหนึ่งของ API การนำทางหลัก วิธีนี้เป็นทางเลือกหนึ่งนอกเหนือจากการใช้รหัสจำนวนเต็มเมื่อสร้างกราฟผ่าน Navigation Kotlin DSL (b/172823546)

ตอนนี้ API ทั้งหมดที่เคยใช้เพียงรหัสเดียวมีการโอเวอร์โหลดซึ่งใช้เส้นทาง String ซึ่งรวมถึง navigate(), popBackStack(), popUpTo() และ getBackStackEntry()

ปัญหานี้เกี่ยวข้องกับ API บางอย่าง

  • พร็อพเพอร์ตี้ Kotlin popUpTo ใน Kotlin DSL เลิกใช้งานแล้วเพื่อ popUpToId (I59c73, b/172823546)
  • มีการเลิกใช้งาน API ของ getStartDestination() แล้วเพื่อประโยชน์ ของ getStartDestinationId() (I0887f, b/172823546)

สำหรับนักพัฒนาซอฟต์แวร์ที่อัปเกรดจากเครื่องมือช่วยเขียนในการไปยังส่วนต่างๆ เวอร์ชันก่อนหน้าเป็น "การเขียนในการนำทาง" 2.4.0-alpha01 จะไม่ต้องนำเข้าต่อไปนี้ในเมธอดส่วนขยายอีกต่อไปและควรนำออก

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

มีการแทนที่อาร์กิวเมนต์ KEY_ROUTE ด้วยพร็อพเพอร์ตี้ route ใน NavDestination ซึ่งจะช่วยให้คุณเรียกใช้ navBackStackEntry.destination.route ได้โดยตรง

การเปลี่ยนแปลง API

  • อาร์ติแฟกต์การนำทางทั้งหมดได้รับการเขียนใหม่ใน Kotlin วิธีนี้ช่วยเพิ่มความสามารถในการเว้นว่างของชั้นเรียนที่ใช้คำทั่วไป (เช่น คลาสย่อย NavType) ระบบได้ย้ายฟังก์ชันของส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์ -ktx ไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว อาร์ติแฟกต์ -ktx จะยังคงเผยแพร่ต่อไป แต่จะว่างเปล่าทั้งหมด (b/184292145)
  • NavDeepLinkBuilder รองรับการเพิ่มแล้ว ปลายทางที่แตกต่างกันหลายแห่งไปยัง Back Stack (I3ee0d, b/147913689)
  • เพิ่มฟังก์ชันจากโรงงานสำหรับ DynamicNavHostFragment (Icd515, b/175222619)
  • รหัสที่ไม่ซ้ำกันของ NavBackStackEntry จะปรากฏเป็นส่วนหนึ่งของ API สาธารณะ (Ie033a)
  • ฟิลด์ name และ argument และฟังก์ชันการยกเลิกโครงสร้างของ NamedNavArgument แสดงเป็นแบบสาธารณะแล้ว (#174, b/181320559)
  • เปิดตัวส่วนขยาย NavBackStackEntry#provideToCompositionLocals ใหม่ที่จะให้ NavBackStackEntry แก่ท้องถิ่นในการเรียบเรียงที่เกี่ยวข้อง (#175, b/187229439)

อาร์กิวเมนต์ที่ปลอดภัย

  • ตอนนี้ Safe Args จะสร้างเมธอด fromSavedStateHandle() ให้กับคลาส NavArgs แต่ละคลาส (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • อัปเดต Safe Args เพื่อใช้ KotlinPoet 1.8.0 แล้ว (#172, b/183990444)

การเปลี่ยนแปลงลักษณะการทำงาน

  • ขณะนี้การนำทางขึ้นอยู่กับ วงจร 2.3.1 และตอนนี้ทำเครื่องหมาย setGraph(), popBackStack(), navigateUp() และ navigate() ที่อัปเดต NavBackStackEntry Lifecycle เป็น @MainThread กำลังปรับการนำทางให้อยู่ในแนวเดียวกับเทรดหลัก มีการบังคับใช้ในวงจร 2.3.0 (b/171125856)
  • ตอนนี้การแยกวิเคราะห์อาร์กิวเมนต์ Enum จาก Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่แล้ว ซึ่งทำให้ Deep Link อย่าง http://www.example.com/red จับคู่กับ Deep Link ของ www.example.com/{color} ได้ แม้ว่า enum จะมีค่าเป็น RED ก็ตาม (#152, b/135857840)

ความเข้ากันได้กับการเขียน

  • androidx.navigation:navigation-compose:2.4.0-alpha01 ใช้งานร่วมกับ Compose เวอร์ชัน 1.0.0-beta07 ขึ้นไปเท่านั้น

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายตรงกันทั้งหมด (#153, b/184072811)
  • NavHostFragment รองรับแบบกำหนดเองแล้ว ผู้นำทางที่ใช้ @Navigator.Name("dialog") เดียวกัน เป็นค่าเริ่มต้น DialogFragmentNavigator (Ib1c2c, b/175979140)
  • ปรับปรุงลักษณะการทำงานของ NavigatorProvider#addNavigator เพื่อให้มั่นใจว่าการเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันจะไม่ทำให้เกิดปัญหา (#176, b/187443146)

การสนับสนุนภายนอก

  • ขอขอบคุณ simonschiller ที่ช่วยสนับสนุนสำหรับ Safe Args ที่สร้างเมธอด fromSavedStateHandle() สำหรับ NavArgs แต่ละคลาส (#122, b/136967621)
  • ขอขอบคุณ Bradleycorn ที่แยกวิเคราะห์อาร์กิวเมนต์ Enum จาก Deep Link แบบไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#152, b/135857840)
  • ขอบคุณ osipxd ที่ช่วยแก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายตรงกันทั้งหมด (#153, b/184072811)
  • ขอขอบคุณ tatocaster ที่อัปเดต Safe Args เพื่อใช้ KotlinPoet 1.8.0 (#172, b/183990444)
  • ขอบคุณ jossiwolf ที่ทำให้ฟิลด์ name และ argument และฟังก์ชันการลดโครงสร้างของ NamedNavArgument เป็นแบบสาธารณะ (#174, b/181320559)
  • ขอขอบคุณ jossiwolf สำหรับการแนะนำส่วนขยาย NavBackStackEntry#provideToCompositionLocals ใหม่ที่ให้ข้อมูล NavBackStackEntry แก่ท้องถิ่นในการเรียบเรียงที่เกี่ยวข้อง (#175, b/187229439)
  • ขอขอบคุณ jossiwolf ที่ช่วยปรับปรุงลักษณะการทํางานของ NavigatorProvider#addNavigator เพื่อให้มั่นใจว่าการเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันจะไม่ทำให้เกิดปัญหา (#176, b/187443146)

เวอร์ชัน 1.0.0-alpha10

7 เมษายน 2021

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha10 แล้ว เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ขณะนี้ NavHost ยอมรับ Modifier ซึ่งส่งต่อไปยัง คอนเทนเนอร์ที่ประกอบกันได้ซึ่งห่อหุ้ม Composable ปลายทาง (I85aca, b/175125483)

แก้ไขข้อบกพร่อง

  • NavHost ใช้งานได้แล้ว แม้เมื่อไม่พบ OnBackPressedDispatcherOwner ในกรณีเช่นนี้เมื่อแสดงตัวอย่าง NavHost (I7d8b4)
  • ตอนนี้การเขียนในการไปยังส่วนต่างๆ จะใช้การนำทาง 2.3.5 ซึ่งแก้ไขปัญหาเมื่อใช้ BackHandler ภายในปลายทาง NavHost (I7e63b, b/182284739)

เวอร์ชัน 1.0.0-alpha09

10 มีนาคม 2021

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha09 แล้ว เวอร์ชัน 1.0.0-alpha09 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ LocalViewModelStoreOwner.current แสดงผลเป็น มีค่าว่าง ViewModelStoreOwner เพื่อให้ระบุได้ดีขึ้น ปัจจุบันมี ViewModelStoreOwner ให้ใช้งานหรือไม่ องค์ประกอบ API ที่ต้องใช้ ViewModelStoreOwner เช่น เป็น viewModel() และ NavHost ยังคงส่งข้อยกเว้น หากไม่ได้ตั้งค่า ViewModelStoreOwner ไว้ (Idf39a)

แก้ไขข้อบกพร่อง

  • การเขียนการนำทางจะขึ้นอยู่กับการนำทาง 2.3.4 ซึ่งรวมถึงการแก้ไขสำหรับการพยายามตั้งค่า ViewModelStore เดียวกัน หลังจากที่ตั้งค่ากราฟแล้ว (I65c24, b/177825470)

เวอร์ชัน 1.0.0-alpha08

24 กุมภาพันธ์ 2021

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha08 แล้ว เวอร์ชัน 1.0.0-alpha08 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavHost จะป้อนข้อมูล NavBackStackEntry ของปลายทางนั้นใน LocalSavedStateRegistryOwner CompositionLocal เพื่อให้ระบบบันทึกและกู้คืนสถานะใดๆ ที่บันทึกไว้ใน SavedStateRegistry โดยตรงและคืนค่าควบคู่ไปกับปลายทาง (I435d7, b/179469431)

เวอร์ชัน 1.0.0-alpha07

10 กุมภาพันธ์ 2021

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha07 แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้การเขียนการนำทางขึ้นอยู่กับ Lifecycle ViewModel Compose 1.0.0-alpha01 เพื่อรองรับ viewModel() ไปยังปลายทาง composable (I7a374)
  • ตอนนี้ NavHost กำลังใช้ LocalOnBackPressedDispatcherOwner จาก Activity-Compose 1.3.0-alpha01 เพื่อรับ OnBackPressedDispatcher ที่ตั้งไว้ใน NavController (I65b12)

เวอร์ชัน 1.0.0-alpha06

28 มกราคม 2021

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha06 แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่มเมธอดส่วนขยาย getBackStackEntry(route: String) ใน NavController ซึ่งแสดงผล NavBackStackEntry ที่เกี่ยวข้อง (If8931)

เวอร์ชัน 1.0.0-alpha05

13 มกราคม 2021

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha05 แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตเหล่านี้

อัปเดตเพื่อใช้ Compose 1.0.0-alpha10 แล้ว

เวอร์ชัน 1.0.0-alpha04

16 ธันวาคม 2020

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha04 แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้

  • อัปเดตเพื่อให้เข้ากันได้กับ Compose 1.0.0-alpha09

เวอร์ชัน 1.0.0-alpha03

2 ธันวาคม 2020

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha03 แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ popBackStack() และ navigateUp() ไม่ทำงานหลังจากการเปลี่ยนแปลงการกำหนดค่าหรือประมวลผลการเสียชีวิตและการสันทนาการ (Icea47, b/173281473)
  • ขณะนี้การไปยังกราฟที่ซ้อนกันภายใน NavHost ของคุณทำงานได้ตามปกติแล้ว (I0948d, b/173647694)

เวอร์ชัน 1.0.0-alpha02

11 พฤศจิกายน 2020

ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha02 แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • การเขียนการนำทางรองรับ NavOptions สำหรับการใช้ popUpTo แล้ว และlaunchSingleTop (If96c3, b/171468994)
  • เพิ่มฟังก์ชันการนำทางที่ใช้เส้นทางแทน รหัสที่ให้คุณสร้างกราฟแบบซ้อนในการเขียนการนำทาง DSL (I1661D)
  • startDestination ต้องมาก่อนเส้นทางในรายการ พารามิเตอร์สำหรับ NavHost (Ie620e)
  • ตอนนี้คุณสามารถสร้างกราฟโดยใช้เส้นทางเป็นจุดเริ่มต้นได้แล้ว ปลายทางนอก NavHost Composable (Iceb75)

เวอร์ชัน 1.0.0-alpha01

28 ตุลาคม 2020

ปล่อย android.navigation:navigation-compose:1.0.0-alpha01 แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

อาร์ติแฟกต์ navigation-compose จะมีการผสานรวมระหว่างคอมโพเนนต์การนำทางและ Jetpack Compose โดยใช้ฟังก์ชัน @Composable เป็นปลายทางในแอปพลิเคชันของคุณ

รุ่นแรกนี้มีฟีเจอร์ต่างๆ ดังต่อไปนี้

  • Composable ของ NavHost ที่ให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL
  • ขอบเขตของวงจร ViewModel และสถานะที่จำที่ระดับปลายทาง
  • การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
  • รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า
  • เขียนตัวช่วยที่เจาะจงใน rememberNavController() และ currentBackStackEntryAsState() เพื่ออนุญาตสถานะการรอปและการเชื่อมต่อ NavController กับ Composable นอก NavHost (เช่น แถบนำทางด้านล่าง)

ดูข้อมูลเพิ่มเติมที่คำแนะนำการนำทางในการเขียน

เวอร์ชัน 2.3.5

เวอร์ชัน 2.3.5

7 เมษายน 2021

ปล่อย androidx.navigation:navigation-*:2.3.5 แล้ว เวอร์ชัน 2.3.5 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เมื่อนำทางโดยใช้ NavDeepLinkRequest หรือ Uri ตอนนี้คุณสามารถ เข้าถึง Uri, การดำเนินการ และประเภท MIME ในปลายทางที่แสดงโดย การรับ Intent จากอาร์กิวเมนต์ผ่าน KEY_DEEP_LINK_INTENT ซึ่งมิเรอร์ฟังก์ชันที่มีอยู่แล้วสำหรับการทำ Deep Link ภายนอก (I975c3, b/181521877)

แก้ไขข้อบกพร่อง

  • OnBackPressedCallbacks ได้รับการเพิ่มลงในผู้มอบหมายงานที่มี ตอนนี้ NavBackStackEntry ในฐานะ LifecycleOwner ทำการสกัดกั้นได้อย่างถูกต้องแล้ว หลังจากวงจรกิจกรรมคือ STOPPED แล้วกด STARTED (Iff94f, b/182284739)
  • ตอนนี้การแยกวิเคราะห์โดเมนของ Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่แล้ว เพื่อให้แน่ใจว่า www.example.com ตรงกับทั้ง www.example.com และ www.Example.com โปรดทราบว่าชื่อพารามิเตอร์การค้นหายังคงคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#144, b/153829033)
  • แก้ไข NullPointerException ที่อาจเกิดขึ้นเมื่อปลายทางมีอาร์กิวเมนต์เริ่มต้นที่ไม่เป็นค่าว่างหลายรายการ และคุณไปยังปลายทางนั้นในขณะที่ลบล้างเซ็ตย่อยของอาร์กิวเมนต์เท่านั้น (aosp/1644827)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้ปลั๊กอิน Navigation Safe Args Gradle ต้องใช้ปลั๊กอิน Kotlin Gradle 1.4.31 (aosp/1661058, b/181156413)

การสนับสนุนภายนอก

  • ขอบคุณ bentrengrove สำหรับคำขอดึงข้อมูลที่ทำให้การแยกวิเคราะห์โดเมน Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#144, b/153829033)

เวอร์ชัน 2.3.4

เวอร์ชัน 2.3.4

10 มีนาคม 2021

ปล่อย androidx.navigation:navigation-*:2.3.4 แล้ว เวอร์ชัน 2.3.4 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ระบบสามารถแยกวิเคราะห์อาร์กิวเมนต์ ReferenceType ได้อย่างถูกต้องเมื่อส่งเป็นส่วนหนึ่งของ URI ของ Deep Link ซึ่งรองรับทั้งค่าจำนวนเต็มดิบและค่าฐานสิบหกที่นำหน้าด้วย 0x (#127, b/179166693)
  • ตอนนี้ android:defaultValue สำหรับอาร์กิวเมนต์ที่มี app:argType="float" รองรับค่าเริ่มต้นที่เป็นเลขจำนวนเต็มแล้ว ซึ่งจะช่วยให้คุณใช้ android:defaultValue="0" แทนการใช้ 0.0 ได้ (#117, b/173766247)

แก้ไขข้อบกพร่อง

  • แก้ไขความคืบหน้าในการติดตั้งที่ค้างเมื่อใช้การรองรับฟีเจอร์แบบไดนามิกของการนำทาง (Ib27a7, b/169636207)
  • กำลังโทรหา setViewModelStore หรือ setLifecycleOwner ด้วย ออบเจ็กต์ที่ตั้งค่าไว้แล้วจะเป็น no-op (Idf491, b/177825470)
  • ตอนนี้ Safe-Args เพิ่มคำอธิบายประกอบระงับการใช้งานด้วยวิธีการที่เหมาะสมแล้ว เมื่อใช้ Java (I8fbc5, b/179463137)

การสนับสนุนภายนอก

  • ขอบคุณ JvmName สำหรับคำขอพุลเพื่อให้มั่นใจได้ว่าขณะนี้อาร์กิวเมนต์ ReferenceType สามารถแยกวิเคราะห์ได้อย่างถูกต้องเมื่อส่งเป็นส่วนหนึ่งของ URI ของ Deep Link (#127, b/179166693)
  • ขอบคุณ tatocaster สำหรับคำขอดึงข้อมูลเพื่ออนุญาต defaultValue สำหรับอาร์กิวเมนต์ที่มี app:argType=”float” รองรับค่าเริ่มต้นที่เป็นจำนวนเต็ม (#117, b/173766247)

เวอร์ชัน 2.3.3

เวอร์ชัน 2.3.3

27 มกราคม 2021

ปล่อย androidx.navigation:navigation-*:2.3.3 แล้ว เวอร์ชัน 2.3.3 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ไม่มีข้อขัดข้องอีกต่อไปเมื่อไปที่ NavBackStackEntry ก่อนที่จะย้าย Lifecycle ไปยัง CREATED (Ie3ba3)
  • แก้ไขการถดถอยที่เกิดจาก b/171364502 ที่มีการไปยัง กิจกรรมที่มีค่าทรัพยากรของภาพเคลื่อนไหวเป็น 0 ทำให้เกิด ResourceNotFoundException (I7aedb, b/176819931)

เวอร์ชัน 2.3.2

เวอร์ชัน 2.3.2

2 ธันวาคม 2020

ปล่อย androidx.navigation:navigation-*:2.3.2 แล้ว เวอร์ชัน 2.3.2 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยใน NavigationUI ซึ่งการใช้ปลายทาง <activity> กับ onNavDestinationSelected จะไม่สามารถไปยังกิจกรรมได้ (I22e34, b/171364502)
  • แก้ไขปัญหาที่ navigation-dynamic-features-fragment ส่งผลให้มีการนำทางไปยังปลายทางที่ติดตั้งใหม่หลายครั้ง (aosp/1486056, b/169636207)
  • แก้ไขปัญหาที่ระบบไม่ส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์ OnDestinationChangedListener เมื่อใช้ launchSingleTop (I2c5cb)
  • แก้ไขปัญหาที่การนำทางไปยังกราฟการนำทางแบบซ้อนไม่สร้างอินสแตนซ์กราฟใหม่ในกลุ่มแบ็กสแต็ก (Ifc831)
  • แก้ไขปัญหาที่การใช้ navigate() กับ popUpTo ที่นำปลายทางสุดท้ายในกราฟการนำทางออกจะไม่ทำลายกราฟการนำทางและนำกราฟการนำทางออกจากสแต็กด้านหลังทันที (I910a3)
  • ปัจจุบันการไปยังส่วนต่างๆ SafeArgs ใช้ KotlinPoet เวอร์ชัน 1.7.2 ซึ่งเพิ่มการรองรับโหมด Explicit API ของ Kotlin (I918b5)
  • ตอนนี้ NavHostFragment.findNavController(Fragment) จะตรวจสอบมุมมองการตกแต่งระดับรูทของ DialogFragment เพิ่มเติมจากการตรวจสอบที่มีอยู่ของลำดับชั้นของ Fragment และลำดับชั้นการแสดงผลของ Fragment วิธีนี้ทำให้คุณสามารถทดสอบส่วนย่อยของกล่องโต้ตอบที่ใช้การนำทางด้วย FragmentScenario และ Navigation.setViewNavController() (I69e0d)

เวอร์ชัน 2.3.1

เวอร์ชัน 2.3.1

14 ตุลาคม 2020

ปล่อย androidx.navigation:navigation-*:2.3.1 แล้ว เวอร์ชัน 2.3.1 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มทรัพยากรเริ่มต้นของภาพเคลื่อนไหวลงใน UI การนำทางแล้ว และแนะนำให้ใช้แทนทรัพยากรเริ่มต้นของภาพเคลื่อนไหว (b/167430145)
  • ตอนนี้ NavOptions จะลบล้างแฮชโค้ดและเท่ากับ Method (b/161586466)
  • ขณะนี้การนำทางได้รวมปลายทางปัจจุบันใน "ไม่มีปลายทางที่มีรหัส" IllegalArgumentException ซึ่งจะช่วยปรับปรุงประสบการณ์ในการแก้ไขข้อบกพร่องของนักพัฒนาซอฟต์แวร์ได้ (b/168311416)

แก้ไขข้อบกพร่อง

  • Safe Args จะไม่ตัดบรรทัดส่งกลับอีกต่อไป แม้ว่าชื่อคลาสอาร์กิวเมนต์ที่สร้างขึ้นจะยาวกว่า 100 อักขระก็ตาม (b/168584987)

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ขณะนี้ navigation-ui ขึ้นอยู่กับ ลิ้นชักลิ้นชัก 1.1.1 กำลังตรวจสอบว่า NavigationUI สามารถเปิดลิ้นชักได้ แม้ในเวลาที่ใช้ LOCK_MODE_LOCKED_CLOSED หรือ LOCK_MODE_LOCKED_OPEN (b/162253907)
  • ตอนนี้ Safe Args ต้องใช้ KotlinPoet 1.6.0 (aosp/1435911) แล้ว
  • ตอนนี้ Safe Args ขึ้นอยู่กับ AGP 4.0.1 แล้ว (aosp/1442337)

เวอร์ชัน 2.3.0

เวอร์ชัน 2.3.0

24 มิถุนายน 2020

ปล่อย androidx.navigation:navigation-*:2.3.0 แล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0

  • การผสานรวมโมดูลฟีเจอร์: อาร์ติแฟกต์ navigation-dynamic-features-runtime และ navigation-dynamic-features-fragment ช่วยให้คุณนำทางไปยังปลายทางที่กำหนดไว้ในโมดูลฟีเจอร์ได้ โดยจัดการการติดตั้งโมดูลฟีเจอร์โดยอัตโนมัติตามความจำเป็น ดูข้อมูลเพิ่มเติมได้ที่นำทางด้วยโมดูลฟีเจอร์
  • การทดสอบการนำทาง: อาร์ติแฟกต์ navigation-testing มี TestNavHostController ที่ช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กด้านหลังหลังจากการดำเนินการนำทาง โปรดดูข้อมูลเพิ่มเติมที่ทดสอบการนำทาง
  • การแสดงผลลัพธ์: ตอนนี้ NavBackStackEntry ที่เชื่อมโยงกับแต่ละปลายทางในกลุ่มการนำทางย้อนกลับจะช่วยให้คุณสามารถเข้าถึง SavedStateHandle ที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อย ซึ่งควรเชื่อมโยงกับรายการแบ็กสแต็กบางรายการ โปรดดูข้อมูลเพิ่มเติมที่การส่งผลลัพธ์ไปยังปลายทางก่อนหน้า
  • การรองรับ NavigationUI สำหรับ Openable: การใช้งาน DrawerLayout ทั้งหมดใน NavigationUI ถูกแทนที่ด้วยอินเทอร์เฟซ Openable ที่มีความทั่วไปมากขึ้นซึ่งเพิ่มเข้ามาใน CustomView 1.1.0 และใช้ DrawerLayout ใน DrawerLayout 1.1.0
  • การรองรับประเภทการดำเนินการและ Mime ใน Deep Link: เราได้ขยายการทำ Deep Link เพื่อรองรับ app:action และ app:mimeType เพิ่มเติมนอกเหนือจาก app:uri ที่มีให้ใช้งานก่อนหน้านี้ ตอนนี้ NavController รองรับการนำทางตามช่องเหล่านี้ร่วมกันผ่านคลาส NavDeepLinkRequest ใหม่แล้ว โปรดดูข้อมูลเพิ่มเติมที่นำทางโดยใช้ NavDeepLinkRequest

ปัญหาที่ทราบ

  • การรองรับการดำเนินการ Deep Link และประเภท MIME ยังไม่พร้อมใช้งานใน Manifest Merger องค์ประกอบ <intent-filter> ที่สร้างขึ้นจากองค์ประกอบ <nav-graph> ในไฟล์ Manifest จะไม่รวมประเภท MIME ของคุณในองค์ประกอบ <data> หรือ <action> ที่กำหนดเองจนกว่าการดำเนินการดังกล่าวจะเสร็จสมบูรณ์ คุณต้องเพิ่ม <intent-filter> ที่เหมาะสมลงในไฟล์ Manifest ด้วยตนเอง

เวอร์ชัน 2.3.0-rc01

10 มิถุนายน 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-rc01 แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไข NullPointerException เมื่อแทนที่อินสแตนซ์ของปลายทางที่ไม่มีอาร์กิวเมนต์ด้วยอินสแตนซ์อื่น ด้วย ด้วย singleTop (b/158006669)
  • ตอนนี้ข้อยกเว้นทั้งหมดของ destination is unknown ที่เกิดจาก NavController จะมีข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติมเพื่อช่วยระบุสถานะของ NavController (b/157764916)

เวอร์ชัน 2.3.0-beta01

20 พฤษภาคม 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-beta01 แล้ว เวอร์ชัน 2.3.0-beta01 มีการคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Lifecycle ของ NavBackStackEntry ไม่ได้รับการอัปเดตอย่างถูกต้องหลังยุติกระบวนการ (b/155218371)
  • ตอนนี้ระบบจะส่งอินสแตนซ์ OnDestinationChangedListener รายการที่ลงทะเบียนไว้ก่อนการเรียกใช้ setGraph() ไปยังปลายทางที่กู้คืนอย่างเหมาะสมหลังกระบวนการสิ้นสุด (b/155218371)
  • เมื่อใช้ singleTop ตอนนี้ NavBackStackEntry จะอัปเดตอาร์กิวเมนต์อย่างถูกต้อง และมีการส่งอาร์กิวเมนต์ที่อัปเดตไปยังอินสแตนซ์ OnDestinationChangeListener ทั้งหมด (b/156545508)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.3.0-alpha06

29 เมษายน 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-alpha06 แล้ว (เวอร์ชัน 2.3.0-alpha06 มีคอมมิตเหล่านี้)

ฟีเจอร์ใหม่

  • เราได้ขยายการทํา Deep Link เพื่อรองรับ app:action และ app:mimeType นอกเหนือจาก app:uri ที่มีให้ใช้งานก่อนหน้านี้แล้ว ตอนนี้ NavController รองรับการนำทางโดยการรวมช่องเหล่านี้ผ่านคลาส NavDeepLinkRequest ใหม่ (b/136573074, b/135334841)

การเปลี่ยนแปลง API

  • ขยายการรองรับ Kotlin DSL สำหรับปลายทางการนำทางแบบไดนามิกได้อย่างมาก (b/148969800)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ระบบจะเพิกเฉยต่อ Intent ของ Deep Link เมื่อใช้ปลายทางเริ่มต้นที่ซ้อนกัน (b/154532067)

เวอร์ชัน 2.3.0-alpha05

15 เมษายน 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-alpha05 แล้ว เวอร์ชัน 2.3.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • สำหรับกราฟแบบไดนามิกรวมโดยใช้ <include-dynamic> คุณไม่จำเป็นต้องระบุ app:graphPackage อีกต่อไป และจะใช้ตัวระบุเริ่มต้นโดยการเพิ่มคำต่อท้าย moduleName ลงใน applicationId หลังจุด หากคุณต้องการปรับแต่ง graphPackage ตอนนี้ระบบรองรับตัวยึดตำแหน่ง ${applicationId} แล้ว (b/152696768)
  • ขณะนี้ Kotlin DSL กราฟการนำทางจะแสดง defaultArguments Map สำหรับการดำเนินการต่างๆ ซึ่งมิเรอร์ความสามารถในการตั้งค่าเริ่มต้นบนองค์ประกอบ <action> ในไฟล์ XML การนำทาง (b/150345605)

แก้ไขข้อบกพร่อง

  • จากการนำทาง 2.2.2: แก้ไข IllegalStateException เมื่อทำการทำ Deep Link ไปยังจุดหมายเริ่มต้นของกราฟเมื่อคุณมีอินสแตนซ์ NavHostFragment หลายรายการในกิจกรรม (b/147378752)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.3.0-alpha04

18 มีนาคม 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-alpha04 แล้ว เวอร์ชัน 2.3.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับกิจกรรมของโมดูลฟีเจอร์และปลายทางของส่วนย่อยใน Navigation Kotlin DSL (b/148969800)

การเปลี่ยนแปลง API

  • คลาส DynamicExtras ไม่ใช้รูปแบบของเครื่องมือสร้างอีกต่อไปและสามารถสร้างได้โดยตรงแล้วในตอนนี้ (aosp/1253671)
  • ตอนนี้ DynamicActivityNavigator จะใช้ Context ในตัวสร้างแทนที่จะเป็น Activity (aosp/1250252)

แก้ไขข้อบกพร่อง

  • NavigationUI ไม่ละเว้นป้ายกำกับว่างเปล่าอีกต่อไป (เช่น ปลายทางที่มี android:label=””) และจะตั้งค่าชื่อให้กับสตริงว่างได้อย่างถูกต้อง (b/148679860)

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้อาร์ติแฟกต์ฟีเจอร์แบบไดนามิกของการนำทางขึ้นอยู่กับ 1.6.5 ของ Play Core (b/149556401)

เวอร์ชัน 2.3.0-alpha03

4 มีนาคม 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-alpha03 แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • แทนที่จะพึ่งพาคลาส DrawerLayout ที่เป็นรูปธรรม ตอนนี้ AppBarConfiguration ใช้อินเทอร์เฟซ Openable ที่แนะนําใน CustomView 1.1.0-alpha02 (ซึ่ง DrawerLayout มีการใช้งานตั้งแต่วันที่ DrawerLayout 1.1.0-alpha04) คุณสามารถใช้การติดตั้งใช้งาน Openable ที่กำหนดเองกับ NavigationUI ได้ (b/129030452)

แก้ไขข้อบกพร่อง

  • ขณะนี้กฎ ProGuard ของ navigation-common-ktx จะเก็บเฉพาะคลาส NavArgs ที่ใช้เท่านั้น ไม่ใช่อินสแตนซ์ NavArgs ทั้งหมด (b/150213558)

การเปลี่ยนแปลงการขึ้นต่อกัน

  • การนำทางได้เปลี่ยนกลับการขึ้นต่อกันกับ 1.2.0 หลัก และตอนนี้ก็ขึ้นอยู่กับ 1.1.0 หลัก เพื่อหลีกเลี่ยงการบังคับให้นักพัฒนาแอปเปลี่ยนไปใช้ทรัพยากร Dependency ที่ใหม่กว่าเมื่อการนำทางไม่ได้อาศัย API ใหม่ใน 1.2.0 หลัก

เวอร์ชัน 2.3.0-alpha02

19 กุมภาพันธ์ 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-alpha02 แล้ว เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavBackStackEntry ช่วยให้คุณสามารถเข้าถึง SavedStateHandle ที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการ Back Stack บางรายการ ดูกรณีการใช้งานตัวอย่างในการแสดงผลผลลัพธ์ (b/79672220)

การเปลี่ยนแปลง API

  • เราได้เพิ่มวิธีการอำนวยความสะดวกของ getCurrentBackStackEntry() และ getPreviousBackStackEntry() เพื่อช่วยให้เรียก NavBackStackEntry สำหรับปลายทางปัจจุบันและก่อนหน้านี้ได้ง่ายขึ้น (b/79672220)

แก้ไขข้อบกพร่อง

  • ตอนนี้ navigateUp() จะส่งอาร์กิวเมนต์ของปลายทางปัจจุบันและ KEY_DEEP_LINK_INTENT ไปยังปลายทางก่อนหน้าเมื่อเปิดแอปในกลุ่มงานของคุณเอง (b/147456890)

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ขณะนี้การนำทางขึ้นอยู่กับหลัก 1.2.0

เวอร์ชัน 2.3.0-alpha01

5 กุมภาพันธ์ 2020

ปล่อย androidx.navigation:navigation-*:2.3.0-alpha01 แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • อาร์ติแฟกต์ navigation-testing ใหม่มีคลาส TestNavHostController คลาสนี้มีทางเลือกในการใช้การจำลอง NavController เมื่อทดสอบการนำทาง ซึ่งช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กด้านหลังหลังจากดำเนินการนำทาง (b/140884273)
  • navigation-dynamic-features-fragment ใหม่ (และทรัพยากร Dependency แบบทรานซิทีฟ navigation-dynamic-features-runtime) จะช่วยให้คุณระบุปลายทางหรือกราฟการนำทางทั้งหมด (ผ่าน <include-dynamic>) ได้จากโมดูลฟีเจอร์ ซึ่งช่วยให้ติดตั้งโมดูลฟีเจอร์แบบออนดีมานด์ได้อย่างราบรื่นเมื่อไปยังปลายทางเหล่านั้น ดูข้อมูลเพิ่มเติมได้ที่นำทางด้วยโมดูลฟีเจอร์ (b/132170186)

แก้ไขข้อบกพร่อง

  • จากการนำทาง 2.2.1: ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะเพิกเฉยต่อพารามิเตอร์การค้นหาอย่างถูกต้อง แทนที่จะนำไปต่อท้ายองค์ประกอบ {argument} ต่อท้ายหรือไม่ตรงกับ Deep Link (b/147447512)
  • จากการนำทาง 2.2.1: อัปเดตกฎ ProGuard navigation-ui สำหรับ DrawerArrowDrawable เพื่อให้มั่นใจว่าไม่จำเป็นต้องใช้ android.enableJetifier=true (b/147610424)
  • จากการนำทาง 2.2.1: ตอนนี้โมดูล navigation-common-ktx มีชื่อแพ็กเกจไฟล์ Manifest ที่ไม่ซ้ำกันแทนที่จะแชร์ชื่อแพ็กเกจไฟล์ Manifest เดียวกันกับ navigation-runtime-ktx (aosp/1141947)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.2.2

เวอร์ชัน 2.2.2

15 เมษายน 2020

ปล่อย androidx.navigation:navigation-*:2.2.2 แล้ว เวอร์ชัน 2.2.2 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไข IllegalStateException เมื่อทำการทำ Deep Link ไปยังจุดหมายเริ่มต้นของกราฟเมื่อมี NavHostFragment หลายอินสแตนซ์ในกิจกรรม (b/147378752)
  • NavigationUI ไม่ละเว้นป้ายกำกับว่างเปล่าอีกต่อไป (เช่น ปลายทางที่มี android:label=””) และจะตั้งค่าชื่อให้กับสตริงว่างได้อย่างถูกต้อง ซึ่งเคยเปิดตัวมาในการนำทาง 2.3.0-alpha04 (b/148679860)
  • ขณะนี้กฎ ProGuard ของ navigation-common-ktx จะเก็บเฉพาะคลาส NavArgs ที่ใช้เท่านั้น ไม่ใช่อินสแตนซ์ NavArgs ทั้งหมด ซึ่งเคยเปิดตัวมาในการนำทาง 2.3.0-alpha03 (b/150213558

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.2.1

เวอร์ชัน 2.2.1

5 กุมภาพันธ์ 2020

ปล่อย androidx.navigation:navigation-*:2.2.1 แล้ว เวอร์ชัน 2.2.1 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้อง แทนที่จะนำไปต่อท้ายองค์ประกอบ {argument} ต่อท้ายหรือไม่ตรงกับ Deep Link (b/147447512)
  • อัปเดตกฎ ProGuard navigation-ui สำหรับ DrawerArrowDrawable เพื่อให้มั่นใจว่าไม่จำเป็นต้องใช้ android.enableJetifier=true (b/147610424)
  • ตอนนี้โมดูล navigation-common-ktx มีชื่อแพ็กเกจไฟล์ Manifest ที่ไม่ซ้ำกันแทนที่จะแชร์ชื่อแพ็กเกจไฟล์ Manifest เดียวกันกับ navigation-runtime-ktx (aosp/1141947)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 2.2.0

เวอร์ชัน 2.2.0

22 มกราคม 2020

ปล่อย androidx.navigation:navigation-*:2.2.0 แล้ว เวอร์ชัน 2.2.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.1.0

  • NavBackStackEntry: คุณสามารถเรียกใช้ NavController.getBackStackEntry() ด้วยการส่งผ่านรหัสปลายทางหรือกราฟการนำทางในกลุ่มแบ็กสแต็กได้ NavBackStackEntry ที่แสดงผลจะให้ LifecycleOwner, ViewModelStoreOwner ที่ขับเคลื่อนด้วยการนำทาง (อันเดียวกับที่ NavController.getViewModelStoreOwner() แสดงผล) และ SavedStateRegistryOwner นอกเหนือจากการระบุอาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น
  • การผสานรวม Lifecycle ViewModel savedState: ขณะนี้ SavedStateViewModelFactory เป็นค่าเริ่มต้นจากโรงงานเมื่อใช้ by navGraphViewModels() หรือเครื่องมือสร้าง ViewModelProvider ที่มี ViewModelStoreOwner ที่แสดงผลโดย NavController.getBackStackEntry() หรือ NavController.getViewModelStoreOwner()
  • การรองรับพารามิเตอร์การค้นหาของ Deep Link: ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่เรียงลำดับใหม่แล้ว ตอนนี้อาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็นค่าว่างจะใส่หรือไม่ก็ได้เมื่อจับคู่ Deep Link
  • การสนับสนุนภาพเคลื่อนไหวที่ดียิ่งขึ้น: ขณะนี้ NavHostFragment ใช้ FragmentContainerView จาก Fragment 1.2.0 เพื่อแก้ไขปัญหาการเรียงลำดับ Z ของภาพเคลื่อนไหวและการส่งหน้าต่างไปยัง Fragments

เวอร์ชัน 2.2.0-rc04

18 ธันวาคม 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-rc04 แล้ว เวอร์ชัน 2.2.0-rc04 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ปรับภาพเคลื่อนไหวที่ค่อยๆ จางเริ่มต้นที่ navigation-ui ใช้อยู่ให้ตรงกับภาพเคลื่อนไหวที่ค่อยๆ จางลงที่ปรับแล้วใน Fragment 1.2.0-rc04 (b/145769814)

เวอร์ชัน 2.2.0-rc03

4 ธันวาคม 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-rc03 แล้ว เวอร์ชัน 2.2.0-rc03 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการแยกวิเคราะห์ Deep Link เมื่อใช้พารามิเตอร์การค้นหาและอาร์กิวเมนต์เป็นส่วนสุดท้ายของเส้นทางที่ป้องกันไม่ให้แยกวิเคราะห์อาร์กิวเมนต์เส้นทางสุดท้ายมากกว่า 1 อักขระ (b/144554689)
  • แก้ไขปัญหาการแยกวิเคราะห์ Deep Link ที่พารามิเตอร์ที่ไม่บังคับจะได้รับ "@null" แทน null (b/141613546)
  • ตอนนี้ NavHostFragment จะคืนค่ากราฟอย่างถูกต้องหลังจากเปลี่ยนแปลงการกำหนดค่าเมื่อใช้กับ FragmentContainerView (b/143752103)

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ตอนนี้การนำทางขึ้นอยู่กับวงจร 2.2.0-rc03, Lifecycle ViewModel savedState 1.0.0-rc03, กิจกรรม 1.1.0-rc03 และ Fragment 1.2.0-rc03 ตามความเหมาะสม

เวอร์ชัน 2.2.0-rc02

7 พฤศจิกายน 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-rc02 แล้ว เวอร์ชัน 2.2.0-rc02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงการขึ้นต่อกัน

  • การนำทางตอนนี้ขึ้นอยู่กับ androidx.lifecycle 2.2.0-rc02

เวอร์ชัน 2.2.0-rc01

23 ตุลาคม 2019

ระบบเผยแพร่ androidx.navigation:navigation-*:2.2.0-rc01 โดยไม่มีการเปลี่ยนแปลงตั้งแต่วันที่ 2.2.0-beta01 เวอร์ชัน 2.2.0-rc01 มีคอมมิตเหล่านี้

เวอร์ชัน 2.2.0-beta01

9 ตุลาคม 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-beta01 แล้ว เวอร์ชัน 2.2.0-beta01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavDestination และคลาสย่อยจะลบล้าง toString() เพื่อให้ข้อมูลที่เป็นประโยชน์มากขึ้นเมื่อแก้ไขข้อบกพร่อง (b/141264986)

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้ระบบจะไม่สนใจพารามิเตอร์การค้นหาเพิ่มเติมเมื่อจับคู่ Deep Link ไม่ใช่ทําให้การจับคู่ล้มเหลว (b/141482822)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ระบบไม่สนใจอาร์กิวเมนต์ในเส้นทางของ Deep Link หากระบุพารามิเตอร์การค้นหาด้วย (b/141505755)
  • ตอนนี้ส่วนขยาย Kotlin navArgs() ใน Activity มีข้อความแสดงข้อผิดพลาดที่ดีขึ้นเมื่อไม่มีรายการเพิ่มเติม (b/141408999)
  • ตอนนี้ Safe Args ที่สร้างคลาส Java Directions คลาสมีค่าเริ่มต้นแล้วในตอนนี้ (b/141099045)
  • ตอนนี้ Safe Args ที่สร้างคลาส Java Args คลาสมีค่าเริ่มต้นแล้วในตอนนี้ (b/140123727)
  • เมื่อใช้ Toolbar อยู่ NavigationUI จะไม่ทำให้ข้อความมีการเปลี่ยนแปลงอีกต่อไปเมื่อย้ายไปมาระหว่างปลายทางระดับบนสุด 2 แห่ง (b/140848160)

เวอร์ชัน 2.2.0-alpha03

18 กันยายน 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-alpha03 แล้ว เวอร์ชัน 2.2.0-alpha03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงลักษณะการทำงาน

  • การโทรหา setViewModelStore() หลังจากโทรหา setGraph จะส่งผลให้เกิด IllegalStateException ควรตั้งค่านี้โดย NavHost เสมอ ซึ่งเป็นส่วนหนึ่งของการตั้งค่าเริ่มต้นเพื่อให้แน่ใจว่าอินสแตนซ์ NavBackStackEntry ทั้งหมดมีพื้นที่เก็บข้อมูลที่สอดคล้องกันสำหรับอินสแตนซ์ ViewModel (aosp/1111821)

แก้ไขข้อบกพร่อง

  • แก้ไข ConcurrentModificationException เมื่อใช้อินสแตนซ์ ViewModel ที่แนบกับกราฟการนำทางต่างๆ หลายรายการที่กำหนดขอบเขตอินสแตนซ์ ViewModelStore (aosp/1112257)

เวอร์ชัน 2.2.0-alpha02

5 กันยายน 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-alpha02 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่เรียงลำดับใหม่แล้ว ตอนนี้อาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็นค่าว่างจะใส่หรือไม่ก็ได้เมื่อจับคู่ Deep Link (b/133273839)
  • คุณสามารถเรียกใช้ NavController.getBackStackEntry() ได้แล้วโดยการส่งผ่านรหัสจุดหมายหรือกราฟการนำทางในกลุ่มแบ็กสแต็ก NavBackStackEntry ที่แสดงผลจะให้ LifecycleOwner, ViewModelStoreOwner ที่ขับเคลื่อนด้วยการนำทาง (อันเดียวกับที่ NavController.getViewModelStoreOwner() แสดงผล) และ SavedStateRegistryOwner นอกเหนือจากการระบุอาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น (aosp/1101691, aosp/1101710)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการเพิ่ม NavHostFragment ไปยัง ViewPager2 ไม่สำเร็จด้วย IllegalArgumentException (b/133640271)
  • ตอนนี้ NavInflater จะหลีกเลี่ยงการเรียกใช้ getResourceName() โดยไม่จำเป็น ซึ่งจะช่วยเร่งระยะเวลาเงินเฟ้อได้สูงสุดถึง 40% (b/139213740)

เวอร์ชัน 2.2.0-alpha01

7 สิงหาคม 2019

ปล่อย androidx.navigation:navigation-*:2.2.0-alpha01 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ขณะนี้ SavedStateViewModelFactory เป็นค่าเริ่มต้นจากโรงงานเมื่อใช้ by navGraphViewModels() หรือตัวสร้าง ViewModelProvider ที่มี ViewModelStoreOwner ที่แสดงผลโดย NavController.getViewModelStoreOwner() (b/135716331)

การเปลี่ยนแปลง API

  • จากการนำทาง 2.1.0-rc01: ระบบได้นำ getViewModelStore() API ที่เลิกใช้งานแล้วเมื่อ NavController ซึ่งเปิดตัวไปใน 2.1.0-alpha02 ออก (aosp/1091021)

แก้ไขข้อบกพร่อง

  • ตอนนี้ NavHostFragment ใช้ FragmentContainerView เพื่อแก้ไขปัญหาการเรียงลำดับ Z ของภาพเคลื่อนไหวและการส่งชิ้นส่วนหน้าต่างไปยัง Fragments (b/137310379)

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

5 กันยายน 2019

ปล่อย androidx.navigation:navigation-*:2.1.0 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.0.0

  • การกำหนดขอบเขต ViewModels ไปยังกราฟการนำทาง: ตอนนี้คุณสามารถสร้าง ViewModels ที่กำหนดขอบเขตที่ระดับกราฟการนำทางได้โดยใช้การมอบสิทธิ์พร็อพเพอร์ตี้ by navGraphViewModels() สำหรับผู้ใช้ Kotlin โดยใช้ไลบรารี -ktx หรือใช้ getViewModelStoreOwner() API ที่เพิ่มลงใน NavController ดูข้อมูลเพิ่มเติมที่หัวข้อแชร์ข้อมูลเกี่ยวกับ UI ระหว่างปลายทาง
  • ปลายทางกล่องโต้ตอบ: ตอนนี้คุณสามารถสร้างปลายทาง <dialog> ที่จะแสดง DialogFragment เมื่อคุณnavigateปลายทางเหล่านั้น NavHostFragment รองรับปลายทางของกล่องโต้ตอบโดยค่าเริ่มต้น โปรดดูข้อมูลเพิ่มเติมที่สร้างปลายทางจาก DialogFragment
  • การนำทางด้วย URI: ตอนนี้คุณสามารถ navigate โดยใช้ Uri ได้ ซึ่งใช้ <deepLink> ที่คุณเพิ่มไว้สำหรับปลายทางเพื่อไปยังจุดดังกล่าว ดูข้อมูลเพิ่มเติมที่นำทางโดยใช้ URI
  • NavHostController: API ที่ใช้สําหรับการสร้าง NavHost ที่กําหนดเองโดยเฉพาะได้ย้ายไปที่ NavHostController แล้ว เพื่อให้สามารถเชื่อมต่อ NavController ของตนกับโฮสติ้ง LifecycleOwner, OnBackPressedDispatcher และ ViewModelStore ได้

เวอร์ชัน 2.1.0-rc01

7 สิงหาคม 2019

ปล่อย androidx.navigation:navigation-*:2.1.0-rc01 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลง API

  • ระบบได้นำ API getViewModelStore() ที่เลิกใช้งานไปเมื่อวันที่ NavController ซึ่งเปิดตัวไปใน 2.1.0-alpha02 ออกแล้ว (aosp/1091021)

เวอร์ชัน 2.1.0-beta02

19 กรกฎาคม 2019

ปล่อย androidx.navigation:*:2.1.0-beta02 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • นำการพึ่งพา Jacoco โดยไม่ตั้งใจซึ่งเปิดตัวไปใน 2.1.0-beta01 ออกแล้ว (b/137782950)

เวอร์ชัน 2.1.0-beta01

17 กรกฎาคม 2019

ปล่อย androidx.navigation:*:2.1.0-beta01 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ NavigationUI ทำให้ปุ่ม "ขึ้น" เคลื่อนไหวเมื่อใช้ setupWithNavController() กับ Toolbar หรือ CollapsingToolbarLayout (b/131403621)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับเวลาเมื่อใช้ NavHostFragment หลายรายการที่มีคอนเทนเนอร์เดียวกันด้วย findNavController() (b/136021571)

เวอร์ชัน 2.1.0-alpha06

2 กรกฎาคม 2019

ปล่อย androidx.navigation:*:2.1.0-alpha06 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้แอตทริบิวต์ app:navGraph ที่ NavHostFragment ใช้ได้ย้ายไปยังอาร์ติแฟกต์ navigation-runtime แล้ว ตัวนำทางที่กำหนดเองซึ่งสามารถเพิ่มผ่าน XML ควรใช้แอตทริบิวต์นี้เพื่อให้มีการรวมเข้ากับแผงโฮสต์ของตัวแก้ไขการนำทาง (b/133880955)

การเปลี่ยนแปลง API

  • getViewModelStore() API ใน NavController เลิกใช้งานแล้วเพื่อใช้เมธอด getViewModelStoreOwner() ใหม่ที่แสดงผล ViewModelStoreOwner (aosp/987010)
  • การติดตั้งใช้งานปลายทางหน้าต่างแบบลอย เช่น ปลายทาง <dialog> ได้รับการทำให้เป็นอินเทอร์เฟซเครื่องหมาย FloatingWindow ซึ่งขณะนี้ปลายทาง <dialog> ทั้งหมดนำมาใช้แล้ว ตอนนี้เมธอด NavigationUI สำหรับการโต้ตอบกับแถบแอปด้านบนจะไม่สนใจปลายทาง FloatingWindow (b/133600763)

การเปลี่ยนแปลงลักษณะการทำงาน

  • ขณะนี้การนำทางจะปรับสถานะให้ตรงกับสิ่งที่เห็นบนหน้าจออย่างถูกต้องเมื่อใช้ปลายทาง <dialog> ดังนั้น ตอนนี้การนำทางจะแสดงปลายทาง <dialog> โดยอัตโนมัติเมื่อคุณไปยังปลายทางที่ไม่มีกล่องโต้ตอบและไม่ใช่กิจกรรม เช่น ปลายทาง <fragment> (b/134089818)

แก้ไขข้อบกพร่อง

  • ตอนนี้การนําทางจะระงับภาพเคลื่อนไหวที่เกิดขึ้นเมื่อสร้างกิจกรรมใหม่เมื่อจัดการ Deep Link หรือการแก้ไข Flash ภาพ (b/130362979)
  • แก้ไขข้อบกพร่องที่สแต็กการนำทางย้อนกลับไม่ซิงค์เมื่อเปิด Fragment เมื่อมีการเพิ่มส่วนย่อยเริ่มต้น (b/133832218)

เวอร์ชัน 2.1.0-alpha05

5 มิถุนายน 2019

ปล่อย androidx.navigation:*:2.1.0-alpha05 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลง API

  • API ที่เกี่ยวข้องกับโฮสต์ใน NavController ถูกเปลี่ยนชื่อและย้ายไปยังคลาสย่อยใหม่ของ NavController, NavHostController (aosp/966091)
  • ระบบได้แทนที่เมธอด NavController setHostOnBackPressedDispatcherOwner() ด้วยเมธอด setOnBackPressedDispatcher() ของ NavHostController แล้ว และตอนนี้คุณจะต้องเรียกใช้ setLifecycleOwner() ก่อนที่จะเรียกใช้เมธอดดังกล่าว (aosp/965409)
  • ขณะนี้ NavHostController มีเมธอด enableOnBackPressed(boolean) ที่แทนที่คลาส NavHostOnBackPressedManager ที่ setHostOnBackPressedDispatcherOwner() แสดงผลก่อนหน้านี้ (aosp/966091)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่แบ็กสแต็กไม่ถูกต้องหลังจากนำทางตาม URI (b/132509387)
  • ตอนนี้ Deep Link ที่ NavController จัดการโดยอัตโนมัติจะทริกเกอร์เพียงครั้งเดียว (b/132754763)

เวอร์ชัน 2.1.0-alpha04

16 พฤษภาคม 2019

ปล่อย androidx.navigation:*:2.1.0-alpha04 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • NavHostFragment ดำเนินการตาม app:defaultNavHost อย่างถูกต้องเมื่อสกัดกั้นเหตุการณ์ของปุ่ม "กลับ" ของระบบ ซึ่งจะแก้ไขการถดถอยในการนำทาง 2.1.0-alpha03 b/132077777
  • DialogFragmentNavigator จัดการการดำเนินการ popBackStack() และ navigateUp() อย่างถูกต้องแล้วในขณะนี้ b/132576764
  • แก้ไขปัญหา IllegalStateException: unknown destination during restore เมื่อมีการไปยังส่วนต่างๆ ของกราฟที่ซ้อนกันซ้ำๆ b/131733658

เวอร์ชัน 2.1.0-alpha03

7 พฤษภาคม 2019

ปล่อย androidx.navigation:*:2.1.0-alpha03 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ปัญหาที่ทราบ

  • NavHostFragment ยังคงสกัดกั้นปุ่มย้อนกลับของระบบอยู่แม้ว่าจะใช้ app:defaultNavHost="false" b/132077777

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถสร้างปลายทาง <dialog> ที่จะแสดง DialogFragment เมื่อคุณnavigateไปยังปลายทางเหล่านั้น NavHostFragment รองรับปลายทางของกล่องโต้ตอบโดยค่าเริ่มต้น b/80267254
  • นอกจากการเรียกใช้ navigate ด้วยรหัสทรัพยากรหรืออินสแตนซ์ NavDirections แล้ว ตอนนี้คุณสามารถนำทางผ่าน Uri ซึ่งใช้ <deepLink> ที่คุณเพิ่มลงในปลายทางเพื่อนำทางไปยังปลายทางที่ถูกต้องได้แล้ว b/110412864

การเปลี่ยนแปลงลักษณะการทำงาน

  • ภาพเคลื่อนไหวเริ่มต้นจาก NavigationUI ได้เพิ่มความเร็วจาก 400 มิลลิวินาทีเป็น 220 มิลลิวินาที เพื่อให้สอดคล้องกับความเร็วภาพเคลื่อนไหวเริ่มต้นของกิจกรรมและส่วนย่อย b/130055522

การเปลี่ยนแปลง API

  • เราเลิกใช้งานเมธอด createFragmentNavigator() ของ NavHostFragment แล้ว และได้ย้ายฟังก์ชันการทำงานไปยังเมธอด onCreateNavController() ใหม่ เพื่อให้เห็นชัดเจนยิ่งขึ้นว่านี่คือจุดแรกเข้าที่ถูกต้องของการเพิ่ม Navigators ที่กำหนดเองเมื่อจัดประเภทย่อย NavHostFragment b/122802849
  • เพิ่มเมธอด hasDeepLink() ลงใน NavDestination แล้วเพื่อให้คุณตรวจสอบว่าปลายทางนั้นๆ จัดการ Uri ที่ระบุได้หรือไม่ หรือในกรณีของ NavGraph ให้ใช้ปลายทางใดก็ได้ในกราฟการนำทาง b/117437718

แก้ไขข้อบกพร่อง

  • ส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์ OnDestinationChangedListener อย่างถูกต้องแล้ว b/130630686
  • ปัจจุบัน NavHostFragment สกัดกั้นเหตุการณ์ "ย้อนกลับ" ของระบบโดยใช้ OnBackPressedDispatcher ซึ่งแก้ไขปัญหาเมื่อนำทางแบบมีเงื่อนไขในวิธีวงจรของ Fragment เมื่อกลับไปยัง Fragment b/111598096
  • สำหรับ Safe Args ทำให้ android:defaultValue=”@null” ที่มี app:argType ที่ไม่ระบุถือว่าเป็นอาร์กิวเมนต์ string ได้อย่างถูกต้องแล้ว b/129629192

เวอร์ชัน 2.1.0-alpha02

3 เมษายน 2019

ปล่อย androidx.navigation:*:2.1.0-alpha02 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถสร้าง ViewModels ที่กำหนดขอบเขตที่ระดับกราฟการนำทางผ่านการมอบสิทธิ์พร็อพเพอร์ตี้ by navGraphViewModels() สำหรับผู้ใช้ Kotlin หรือใช้ getViewModelStore() API ที่เพิ่มลงใน NavController ได้แล้ว b/111614463

การเปลี่ยนแปลง API

  • คุณเพิ่ม app:targetPackage ไปยังปลายทาง <activity> เพื่อจำกัดชื่อแพ็กเกจที่ตรงกันได้แล้ว แอปรองรับ app:targetPackage="${applicationId}" เพื่อจำกัดแพ็กเกจเฉพาะรหัสแอปพลิเคชันของคุณ b/110975456

แก้ไขข้อบกพร่อง

  • จะไม่มีการแยกวิเคราะห์ android:name สำหรับปลายทาง <activity> เป็น Class เมื่อเงินเฟ้ออีกต่อไป ทำให้ ClassNotFoundException เมื่อใช้ฟีเจอร์แบบไดนามิก b/124538597

เวอร์ชัน 2.1.0-alpha01

19 มีนาคม 2019

นี่เป็นรุ่นอัลฟ่ารุ่นแรกของการนำทาง 2.1.0

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ขณะนี้การนำทางขึ้นอยู่กับ androidx.core:core:1.0.1 และ androidx.fragment:fragment:1.1.0-alpha05 รุ่นนี้ยังนำ การพึ่งพา androidx.legacy:legacy-support-core-utils:1.0.0 b/128632612

การเปลี่ยนแปลง API

  • เมธอด Navigation.createNavigateOnClickListener(NavDirections) ใหม่ ได้เพิ่มเข้ามาเป็นทางเลือกในการสร้าง Listener การคลิกด้วย รหัสทรัพยากรและ Bundle b/127631752
  • FragmentNavigator.instantiateFragment เลิกใช้งานแล้ว ค่าเริ่มต้น ขณะนี้การใช้งาน FragmentFactory เพื่อสร้าง Fragments b/119054429

แก้ไขข้อบกพร่อง

  • การนำทางจะไม่ส่ง Bundle ที่เป็นค่าว่างอีกต่อไปเมื่อมีการแนบอาร์กิวเมนต์ ไปยังปลายทาง เพื่อแก้ไขปัญหาเมื่อใช้ android:defaultValue="@null" b/128531879
  • ตอนนี้ Safe Args ต้องใช้ KotlinPoet 1.1.0 แล้ว ซึ่งการแก้ไขปัญหาเกี่ยวกับ ชื่อแพ็กเกจที่ยาวมากๆ b/123654948

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

14 มีนาคม 2019

การนำทาง 2.0.0 ได้รับการเผยแพร่แล้วโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc02

เวอร์ชัน 2.0.0-rc02

6 มีนาคม 2019

การนำทาง 2.0.0-rc02 มอบอาร์ติแฟกต์ใหม่ๆ ด้วย androidx.navigation รหัสกลุ่มและเปลี่ยนทรัพยากร Dependency เป็น AndroidX ที่เทียบเท่ากัน

ลักษณะการทำงานของ 2.0.0-rc02 นั้นเหมือนกับลักษณะการทำงานของ Navigation 1.0.0-rc02 และไม่จำเป็นต้องเปลี่ยนแปลงโค้ดของคุณเพื่ออัปเดตจาก 1.0.0-rc02 นอกเหนือจากการอัปเดต ทรัพยากร Dependency ให้ตรงกับ ทรัพยากร Dependency ใหม่

โปรเจ็กต์ต้องมี ได้ย้ายข้อมูลไปยัง AndroidX เพื่อใช้รุ่น 2.X ของ การนำทาง การนำทางเวอร์ชัน 1.0 เวอร์ชันเสถียรจะเป็นรุ่นล่าสุดที่ใช้การสนับสนุน ทรัพยากร Dependency ของไลบรารี การพัฒนาในอนาคตทั้งหมดนอกเหนือจาก 1.0 จะอิงตาม AndroidX และสร้างมาจากรุ่น 2.0 ที่เสถียร

การขึ้นต่อกันก่อน AndroidX

สำหรับการนำทางเวอร์ชันก่อน AndroidX ให้รวมทรัพยากร Dependency ต่อไปนี้

dependencies {
    def nav_version = "1.0.0"

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

สำหรับอาร์กิวเมนต์ที่ปลอดภัย ให้เพิ่มเมธอด ตาม classpath ในไฟล์ ระดับบนสุด build.gradle ของคุณ

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

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0

14 มีนาคม 2019

การนำทาง 1.0.0 ได้รับการเผยแพร่แล้วโดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-rc02

เวอร์ชัน 1.0.0-rc02

26 กุมภาพันธ์ 2019

นี่เป็นรุ่นที่ 2 ที่เป็นตัวเลือกสำหรับรุ่นเสถียร 1.0.0 ของการนำทาง รุ่นนี้มีการแก้ไขข้อบกพร่องหลายรายการ

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ระบบละเว้น popBackStack() หากกราฟราก ไม่มีรหัส b/126251695
  • navigateUp() จัดการการกลับไปยังงานของแอปอย่างถูกต้องแล้ว เมื่อเรียกใช้หลังจากจัดการ Deep Link ที่ไม่มี FLAG_ACTIVITY_NEW_TASK b/126082008
  • แก้ไขปัญหาเกี่ยวกับ ActivityNavigator.applyPopAnimationsToPendingTransition ไม่ได้ใช้ภาพเคลื่อนไหวของการออกจากป๊อปที่ถูกต้อง b/126237567
  • ตอนนี้โค้ด Kotlin ที่สร้างโดย Safe Args สามารถใช้อักขระหลีกกับคีย์เวิร์ด Kotlin ได้อย่างถูกต้องแล้ว เช่น in และ fun ในชื่อแพ็กเกจที่เชื่อมโยงกับคลาส R b/126020455

เวอร์ชัน 1.0.0-rc01

21 กุมภาพันธ์ 2019

นี่คือรุ่นที่อาจได้รับการเผยแพร่สำหรับรุ่นเสถียร 1.0.0 ของการนำทาง ช่วงเวลานี้ รุ่นมีการแก้ไขข้อบกพร่อง 1 รายการ

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเมื่อใช้การดำเนินการนำทาง Fragments และ singleTop b/124294805

เวอร์ชัน 1.0.0-beta02

12 กุมภาพันธ์ 2019

รุ่นนี้มีการปรับปรุงเล็กน้อยและการแก้ไขข้อบกพร่องที่สำคัญ

ฟีเจอร์ใหม่

  • ขณะนี้คุณสามารถใช้ 0 เป็น android:defaultValue สำหรับอาร์กิวเมนต์ reference b/124248602

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้ระบบให้ความสำคัญกับการจับคู่ Deep Link ที่ตรงทั้งหมดมากกว่า Deep Link ด้วย .* หรือ การจับคู่อาร์กิวเมนต์ b/123969518

แก้ไขข้อบกพร่อง

  • ตอนนี้ popBackStack() และ navigateUp แสดงผล false อย่างถูกต้องเมื่อป้อนข้อมูล ปลายทางสุดท้ายในกลุ่มแบ็กสแต็ก ซึ่งทำให้เกิดการแก้ไขการถดถอย ใน 1.0.0-beta01 b/123933201
  • ขณะนี้การนำทางตั้งค่า ClassLoader อย่างถูกต้องในระหว่างการกู้คืน สถานะอินสแตนซ์ที่บันทึกไว้ เพื่อหลีกเลี่ยงปัญหาเมื่อใช้คลาสที่กำหนดเองใน สถานะที่บันทึกไว้ Navigator รายการหรือในอาร์กิวเมนต์ที่ส่งไปยัง NavDestination b/123893858
  • Safe Args ที่สร้างคลาส NavArgs จะไม่ขัดข้องอีกต่อไปเมื่อกู้คืน อาร์กิวเมนต์ Parcelable[] จากสถานะอินสแตนซ์ที่บันทึกไว้ b/123963545
  • ตอนนี้ Safe Args ล้างคลาส Kotlin ที่สร้างขึ้นที่ไม่จำเป็นออกอย่างเหมาะสมแล้ว b/124120883

เวอร์ชัน 1.0.0-beta01

4 กุมภาพันธ์ 2019

นี่คือการนำทางเวอร์ชันเบต้ารุ่นแรก ไปข้างหน้า การนำทาง คาดว่า API จะมีความเสถียรจนถึงเวอร์ชันถัดไป เว้นแต่จะมี ปัญหาร้ายแรง รุ่นนี้มีการแก้ไขข้อบกพร่องและการเปลี่ยนแปลงลักษณะการทํางาน

การเปลี่ยนแปลงลักษณะการทำงาน

  • การนำทางตอนนี้ช่วยให้มั่นใจว่าค่าเริ่มต้นของอาร์กิวเมนต์ได้รับการดำเนินการเหมือนกัน ขณะรันไทม์และผ่าน Safe Args ดังนั้น เฉพาะอาร์กิวเมนต์ที่มี app:argType="reference" สามารถใช้ค่าเริ่มต้นชี้ไปยังทรัพยากรอื่น (เช่น @color/colorPrimary) การพยายามใช้ค่าเริ่มต้นของข้อมูลอ้างอิง ที่มี app:argType ต่างกันจะส่งผลให้ได้รับข้อยกเว้นเมื่อ การแยกวิเคราะห์ XML การไปยังส่วนต่างๆ b/123551990
  • ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle 3.3.0 แล้ว aosp/888413
  • ตอนนี้ Safe Args ต้องใช้ Kotlin 1.3.20 แล้ว aosp/888414

แก้ไขข้อบกพร่อง

  • ตอนนี้สามารถใช้ Safe Args ในไลบรารีและโมดูลฟีเจอร์ในทุกเวอร์ชันได้แล้ว ของปลั๊กอิน Android Gradle b/121304903
  • แก้ไขการถดถอยที่จะทำให้เกิดการดำเนินการ popBackStack() เดี่ยว แสดงสำเนาของปลายทางทั้งหมดที่ด้านบนของกลุ่มสำรอง เพียงแห่งเดียวต่อครั้งเท่านั้น b/123552990
  • แก้ไขปัญหาที่สถานะ FragmentNavigator จะซิงค์ข้อมูล ด้วยสถานะของ NavController ซึ่งทำให้เกิด IllegalStateException เมื่อ กำลังพยายามคืนค่าแบ็กสแต็ก b/123803044
  • แก้ไขปัญหาที่ลูกศรย้อนกลับที่ NavigationUI จัดการไม่ ปรากฏขึ้นเมื่อใช้ ProGuard ที่มีการปรับให้ยากต่อการอ่าน (Obfuscate) b/123449431
  • ตอนนี้โค้ดที่สร้างโดย Safe Args ได้รับการจัดการอย่างเหมาะสมโดยใช้ app:argType แล้ว ที่ชี้ไปยังชั้นเรียนแบบคงที่ในรูปแบบ .OuterClass$InnerClass b/123736741
  • ตอนนี้โค้ด Java ที่สร้างโดย Safe Args จะจัดการการดำเนินการส่วนกลางได้อย่างถูกต้อง และปลายทางที่ฝังหลายระดับ b/123347762

เวอร์ชัน 1.0.0-alpha11

23 มกราคม 2019

นี่เป็นรุ่นแก้ไขด่วนของ 1.0.0-alpha10 ซึ่งแก้ไขปัญหาเกี่ยวกับ Safe Args

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Safe Args นำเข้าคลาส Directions ไม่สำเร็จ ที่เชื่อมโยงกับการดำเนินการส่วนกลาง b/123307342

เวอร์ชัน 1.0.0-alpha10

23 มกราคม 2019

ปัญหาที่ทราบ

  • Safe Args ไม่สามารถนำเข้าคลาส "เส้นทาง" ที่เชื่อมโยงกับการดำเนินการส่วนกลาง b/123307342

รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง

ฟีเจอร์ใหม่

  • ผู้ใช้ Kotlin สามารถใช้ผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ by navArgs() เพื่อ Lazy Loading ได้แล้ว รับการอ้างอิงไปยังคลาส NavArgs ที่สร้างอย่างปลอดภัยใน Activity หรือ Fragment b/122603367
  • ตอนนี้ Safe Args ช่วยให้คุณสร้างโค้ด Kotlin ได้โดยใช้พารามิเตอร์ ปลั๊กอิน androidx.navigation.safeargs.kotlin ระบบสร้างโค้ด Kotlin ขึ้น สำหรับโมดูล Kotlin โดยเฉพาะ โดยใช้อาร์กิวเมนต์เริ่มต้น คลาสที่เปลี่ยนแปลงไม่ได้ในรูปแบบของเครื่องมือสร้างที่ยังใช้งานได้ผ่าน ปลั๊กอิน androidx.navigation.safeargs ก่อนหน้านี้ b/110263087

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้ Deep Link ที่ตรงกันจะถือว่ามีอคติต่อ Deep Link ที่มี อาร์กิวเมนต์ที่ตรงกันมากที่สุด b/118393029
  • การเรียกใช้ setGraph() บน NavController จะรีเซ็ตแบ็กสแต็กแล้ว b/111450672
  • Deep Link ที่ไม่รู้จักจะไม่ส่ง IllegalStateException อีกต่อไป แต่ ไม่สนใจ กำลังแก้ไขปัญหาเกี่ยวกับ NavHostFragment ที่ซ้อนกันหรือ NavHostFragment หลายรายการ b/121340440

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

  • เมธอด NavOptions.applyPopAnimationsToPendingTransition() สำหรับ การใช้ภาพเคลื่อนไหวป๊อปกับกิจกรรมได้ย้ายไปที่ ActivityNavigator แล้ว b/122413117
  • ตอนนี้ Safe Args หลีกเลี่ยงการทำซ้ำคลาสที่เหมือนกันสำหรับการดำเนินการที่ไม่มี อาร์กิวเมนต์ ประเภทการแสดงผลสำหรับเมธอดที่ไม่มีอาร์กิวเมนต์ใน NavDirections ที่สร้างขึ้น ชั้นเรียนเปลี่ยนเป็น NavDirections b/123233147
  • คลาส "เส้นทาง" ที่สร้าง Safe Args จะไม่มีตัวสร้างสาธารณะอีกต่อไป คุณควรโต้ตอบกับเมธอดแบบคงที่ที่สร้างขึ้นเท่านั้น b/123031660
  • Args ที่ปลอดภัยสร้างคลาส NavDirections รายการไม่มีโดเมนสาธารณะอีกต่อไป เครื่องมือสร้าง - ควรสร้างโดยใช้เมธอดแบบคงที่ใน คลาสเส้นทางที่สร้างขึ้น b/122963206
  • Bundle ที่ส่งคืนจาก NavDirections' ตอนนี้ทำเครื่องหมาย getArguments() แล้ว เป็น @NonNull แทนที่จะเป็น @Nullable b/123243957

แก้ไขข้อบกพร่อง

  • NavDeepLinkBuilder จัดการหลายรายการพร้อมกันได้อย่างถูกต้องแล้ว PendingIntent ไปยังปลายทางเดียวกันโดยใช้อาร์กิวเมนต์ที่คุณส่ง เพื่อระบุความเป็นเอกลักษณ์ b/120042732
  • NavController จะจัดการการดำเนินการของ popBackStack() ได้อย่างถูกต้องเมื่อ การใช้ NavHostFragment หรือ Fragment ย่อยอื่นๆ ที่มี Back Stack b/122770335
  • NavigationUI ตั้งค่าคำอธิบายเนื้อหาของปุ่ม "ขึ้น" อย่างถูกต้องแล้ว b/120395362
  • ตอนนี้คลาส "คำแนะนำ" ที่สร้าง Safe Args จะจัดการการดำเนินการส่วนกลางได้อย่างถูกต้อง ที่มีรหัสเดียวกับการดำเนินการในปลายทาง b/122962504
  • ตอนนี้ Args ที่ปลอดภัยที่สร้าง NavDirections คลาสมีค่าเท่ากับอย่างถูกต้อง hashCode() ค่าเมื่อ equals() จะแสดงผลเป็น "จริง" b/123043662
  • ตอนนี้ FragmentNavigator จะแสดงข้อความแสดงข้อผิดพลาดที่ดีขึ้นหากคุณพยายาม กำหนดค่า FragmentTransactions ใน NavHostFragment FragmentManager คุณควรใช้ getChildFragmentManager() เสมอ b/112927148

เวอร์ชัน 1.0.0-alpha09

18 ธันวาคม 2018

รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง

เราเลือกที่จะไม่พัฒนา อาร์ติแฟกต์ android.arch.navigation:navigation-testing รายการ แม้ว่าจะมีการพิสูจน์แล้ว มีประโยชน์สำหรับการทดสอบภายในของ NavController เราขอแนะนำ กลยุทธ์การทดสอบสำรอง เช่น การจำลองอินสแตนซ์ NavController เพื่อยืนยันว่าการโทร navigate() ถูกต้อง ช่วงเวลานี้ จะกล่าวถึงรายละเอียดใน การเสวนาเรื่องกิจกรรมเดี่ยวที่งาน AndroidDevSummit 2018 เราจะจัดทำเอกสารเพิ่มเติม โดยเฉพาะเกี่ยวกับการทดสอบ ด้วยระบบนำทาง

ฟีเจอร์ใหม่

  • MenuItem ที่มี menuCategory="secondary" จะไม่แสดงด้านหลังอีกต่อไป ซ้อนเมื่อใช้กับ NavigationUI เมธอด b/120104424
  • ตอนนี้ AppBarConfiguration ให้คุณตั้งค่าวิดีโอสำรองแล้ว OnNavigateUpListener ซึ่งจะถูกเรียกเมื่อ navController.navigateUp() กลับมา false b/79993862 b/120690961

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

  • เมื่อใช้ <argument> กับ argType="reference" การนำทางจะไม่อีกต่อไป แยกวิเคราะห์ข้อมูลอ้างอิงแทนการระบุรหัสทรัพยากรดิบ b/111736515
  • onNavDestinationSelected() ระบบจะแสดงกลับไปที่จุดหมายเริ่มต้นของกราฟการนำทางโดยค่าเริ่มต้น ทำให้สอดคล้องกับเมธอด setup เพิ่ม menuCategory="secondary" ใน MenuItem เพื่อหลีกเลี่ยงการกองหลังทับ aosp/852869
  • ตอนนี้เมธอด fromBundle() ของ Args คลาสที่สร้างขึ้นจะไม่ใช่ค่าว่าง Bundle แทนที่จะเป็น Bundle ที่ไม่มีข้อมูล aosp/845616

แก้ไขข้อบกพร่อง

  • ตอนนี้ระบบแยกวิเคราะห์อาร์กิวเมนต์จาก Deep Link อย่างถูกต้องเป็น argType ที่ถูกต้องแล้ว แทนที่จะเป็นสตริงเสมอ b/110273284
  • ขณะนี้การนำทางส่งออกทรัพยากรสาธารณะได้อย่างถูกต้องแล้ว b/121059552
  • ตอนนี้ Safe Args ใช้ได้กับปลั๊กอิน Android Gradle 3.4 Canary 4 ขึ้นไปแล้ว b/119662045

เวอร์ชัน 1.0.0-alpha08

6 ธันวาคม 2018

รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง

ฟีเจอร์ใหม่

  • ตอนนี้เมื่อใช้ร่วมกับ NavigationUI เมธอด ป้ายกำกับปลายทางจะมีผลโดยอัตโนมัติ แทนที่ {argName} อินสแตนซ์ใน android:label ด้วยอาร์กิวเมนต์ที่ถูกต้อง b/80267266
  • ขณะนี้การนำทางขึ้นอยู่กับไลบรารีการสนับสนุน 28.0.0 b/120293333

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

  • OnNavigatedListener ถูกเปลี่ยนชื่อเป็น OnDestinationChangedListener แล้ว b/118670572
  • ตอนนี้ OnDestinationChangedListener ส่งผ่านอาร์กิวเมนต์ Bundle ด้วย aosp/837142
  • แอตทริบิวต์ app:clearTask และ app:launchDocument และข้อมูลที่เกี่ยวข้อง ลบเมธอดแล้ว ใช้ app:popUpTo กับรากของกราฟเพื่อ นำปลายทางทั้งหมดออกจากแบ็กสแต็กของคุณ b/119628354
  • ตอนนี้ ActivityNavigator.Extras ใช้รูปแบบ Builder และเพิ่มความสามารถในการ ตั้งค่าสถานะ Intent.FLAG_ACTIVITY_ ใดก็ได้ aosp/828140
  • NavController.onHandleDeepLink ถูกเปลี่ยนชื่อเป็น handleDeepLink แล้ว aosp/836063
  • มีคลาสและวิธีการมากมายที่ไม่ได้มีไว้สำหรับการแยกประเภทย่อย เช่น NavOptions, NavInflater, NavDeepLinkBuilder และ AppBarConfiguration กำหนดเป็น final แล้ว aosp/835681
  • นำเมธอด NavHostFragment.setGraph() ที่เลิกใช้งานแล้วออกแล้ว aosp/835684
  • เมธอด NavigationUI.navigateUp(DrawerLayout, NavController) ที่เลิกใช้งานแล้ว นำออกแล้ว aosp/835684
  • การสร้าง Fragment ได้ย้ายไปที่ FragmentNavigator ซึ่งทำให้ มอบสิทธิ์การสร้าง Fragment ให้กับ FragmentFactory b/119054429
  • ตัวสร้างสำหรับ NavGraphNavigator ไม่ต้องใช้ Context อีกต่อไป aosp/835340
  • NavigatorProvider เปลี่ยนชื่อเป็น ชั้นเรียน แทนที่จะเป็นอินเทอร์เฟซ คืนเงิน NavigatorProvider โดย getNavigatorProvider() ไม่ได้เปลี่ยนฟังก์ชันการทำงาน aosp/830660
  • นำ NavDestination.navigate() ออกแล้ว โทรหา navigate() บน Navigator แทน aosp/830663
  • การเปลี่ยนโครงสร้างภายในโค้ด Navigator อย่างมาก ทำให้ไม่จำเป็นต้องใช้ OnNavigatorNavigatedListener และให้ navigate แสดง NavDestination ที่ถูกนำทางไปแทน
  • อินสแตนซ์ Navigator รายการส่งเหตุการณ์ป๊อปอัปไปยัง NavController ไม่ได้อีกต่อไป พิจารณา ใช้ OnBackPressedCallback เพื่อ ดักจับการกดปุ่มย้อนกลับและโทรหา navController.popBackStack() aosp/833716

แก้ไขข้อบกพร่อง

  • ตอนนี้ popUpTo ทำงานอย่างสม่ำเสมอเมื่อปลายทางเป็นองค์ประกอบ <navigation> b/116831650
  • แก้ไขข้อบกพร่องจำนวนหนึ่งที่ทำให้เกิด IllegalArgumentException เมื่อใช้กราฟซ้อน b/118713731 b/113611083 b/113346925 b/113305559
  • ตอนนี้ระบบจะป้อนข้อมูลแอตทริบิวต์ dataPattern ของปลายทาง <activity> อาร์กิวเมนต์จากอาร์กิวเมนต์ที่ไม่ใช่สตริงโดยการเรียกใช้ toString() b/120161365

อาร์กิวเมนต์ที่ปลอดภัย

  • Safe Args รองรับออบเจ็กต์ที่แยกอนุกรมได้ รวมถึงค่า Enum ประเภท enum สามารถตั้งค่าเริ่มต้นโดยใช้ลิเทอรัล enum ที่ไม่มีชื่อคลาส (เช่น app:defaultValue="READ") b/111316353
  • Safe Args รองรับอาร์เรย์ของทุกประเภทที่รองรับ b/111487504
  • ตอนนี้ Safe Args จะไม่สนใจโฟลเดอร์ย่อยของไดเรกทอรีทรัพยากรแล้ว b/117893516
  • Safe Args จะเพิ่มคำอธิบายประกอบ @Override ตามความเหมาะสม b/117145301

เวอร์ชัน 1.0.0-alpha07

29 ตุลาคม 2018

ฟีเจอร์ใหม่

  • AppBarConfiguration ใหม่ ทำให้คุณสามารถกำหนดปลายทางที่ถือว่าเป็นระดับบนสุดได้ ปลายทาง ดูเอกสารฉบับปรับปรุง เพื่อดูรายละเอียด b/117333663
  • คุณส่งอาร์กิวเมนต์ไปยังปลายทางเริ่มต้นของกราฟได้แล้ว b/110300470
  • ตอนนี้ Deep Link รองรับรูปแบบที่กำหนดเองซึ่งมีจุด ขีดกลาง และเครื่องหมายบวกแล้ว b/112806402

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ

  • พับโมดูล navigation-testing-ktx ลงใน navigation-testing artifact และจะไม่เผยแพร่อีก
  • ตอนนี้อาร์ติแฟกต์ navigation-testing ต้องใช้มาตรฐาน Kotlin แล้ว ไลบรารี มีการเปลี่ยนแปลง API ให้สอดคล้องกับ Kotlin มากขึ้น แต่คุณสามารถใช้สำหรับการทดสอบที่เขียนด้วย Java ต่อไปได้
  • ไม่สนับสนุนกราฟการนำทางที่ลงทะเบียนในไฟล์ Manifest ของข้อมูลเมตาอีกต่อไป b/118355937
  • แนบการดำเนินการกับ <activity> ไม่ได้อีกต่อไป ปลายทาง aosp/785539

แก้ไขข้อบกพร่อง

  • Deep Link แยกวิเคราะห์พารามิเตอร์การค้นหาได้อย่างถูกต้องแล้วในตอนนี้ b/110057514
  • ปลายทางของกิจกรรมใช้ภาพเคลื่อนไหวแบบเข้าและออกทั้งหมดอย่างถูกต้องแล้ว b/117145284
  • แก้ไขข้อขัดข้องที่เกิดขึ้นหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อใช้ การนำทาง b/110763345

อาร์กิวเมนต์ที่ปลอดภัย

  • ตอนนี้อาร์กิวเมนต์ที่ปลอดภัยใช้ปลั๊กอิน Android Gradle 3.2.1 แบบคงที่แล้ว b/113167627
  • สามารถสร้างเส้นทางสำหรับชั้นเรียนภายในได้แล้ว b/117407555
  • แก้ไขปัญหาเกี่ยวกับการสร้างเส้นทางไปยัง <include> กราฟ b/116542123

เวอร์ชัน 1.0.0-alpha06

20 กันยายน 2018

ฟีเจอร์ใหม่

การเปลี่ยนแปลง API

  • การเปลี่ยนแปลงสำคัญ: ตอนนี้เมธอด Navigator navigate() จะใช้พารามิเตอร์ Navigator.Extras
  • ตอนนี้เมธอด getGraph() ของ NavController คือ NonNull b/112243286

แก้ไขข้อบกพร่อง

  • NavigationUI.setupWithNavController() ไม่ทำให้ข้อมูลรั่วไหลอีกต่อไปหากใช้กับยอดดูจากปลายทางแต่ละแห่ง b/111961977
  • ตอนนี้มีการเรียกใช้การนำทาง onSaveState() เพียงครั้งเดียว b/112627079

อาร์กิวเมนต์ที่ปลอดภัย

  • ตอนนี้คลาสปลายทางของการนำทางจะขยายคลาสเส้นทางของผู้ปกครองได้ หากมี b/79871405
  • ตอนนี้คลาสเส้นทางและ Args มีการใช้ toString() ที่เป็นประโยชน์ b/111843389

เวอร์ชัน 1.0.0-alpha05

10 สิงหาคม 2018

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้เกิดลักษณะการทำงานของ Backstack ที่ไม่ถูกต้อง b/111907708
  • แก้ไขข้อบกพร่องในคลาส Args ที่สร้างขึ้น equals() รายการ b/111450897
  • แก้ไขความล้มเหลวของบิลด์ใน Safe Args b/109409713
  • แก้ไขการแปลงจากตัวระบุทรัพยากรเป็นชื่อ Java b/111602491
  • แก้ไขข้อความแสดงข้อผิดพลาดเกี่ยวกับความสามารถในการเว้นว่างในปลั๊กอิน Safe Args
  • เพิ่มคำอธิบายประกอบที่ไม่มีข้อมูล

เวอร์ชัน 1.0.0-alpha04

19 กรกฎาคม 2018

การไปยังส่วนต่างๆ 1.0.0-alpha04 และปลั๊กอิน Gradle ของ Safe Args ที่เกี่ยวข้องมีการเปลี่ยนแปลง API, การเปลี่ยนแปลงการทำงาน และการแก้ไขข้อบกพร่องหลายรายการ

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • NavHostFragment จะตั้งค่า Fragment ปัจจุบันเป็นส่วนย่อยการนำทางหลักเสมอ เพื่อให้แน่ใจว่ามีการเรียกตัวจัดการส่วนย่อยย่อยก่อนที่จะเรียก NavController ภายนอก b/111345778

อาร์กิวเมนต์ที่ปลอดภัย

  • การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: app:type มีการเปลี่ยนแปลงเป็น app:argType เพื่อหลีกเลี่ยงความขัดแย้งกับไลบรารีอื่นๆ เช่น ConstraintLayout 2.0.0-alpha1 b/111110548
  • ตอนนี้ข้อความแสดงข้อผิดพลาดจาก Safe Args สามารถคลิกได้แล้ว b/111534438
  • คลาส Args จะยืนยันว่าแอตทริบิวต์ NonNull นั้นไม่เป็นค่าว่างจริงๆ b/111451769
  • มีการเพิ่มคำอธิบายประกอบ NonNull ไปยังคลาสที่สร้าง NavDirections และ Args เพิ่มเติม b/111455455 b/111455456

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบหลังจากทำ Deep Link ไปยังปลายทางของส่วนย่อย b/111515685

เวอร์ชัน 1.0.0-alpha03

12 กรกฎาคม 2018

การไปยังส่วนต่างๆ 1.0.0-alpha03 และปลั๊กอิน Gradle ของ Safe Args ที่เกี่ยวข้องมีการเปลี่ยนแปลง API, การเปลี่ยนแปลงการทำงาน และการแก้ไขข้อบกพร่องหลายรายการ

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับ Toolbar แล้ว b/109868820
  • เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับ CollapsingToolbarLayout ออก b/110887183
  • ตอนนี้ popBackStack() แสดงผลเท็จเมื่อสแต็กด้านหลังว่างหรือเมื่อรหัสปลายทางที่ระบุไม่ได้อยู่ในสแต็กแบ็ก b/110893637
  • ตอนนี้ FragmentNavigator จะละเว้นการดำเนินการนำทางหลังจากที่ FragmentManager ได้บันทึกสถานะแล้ว โดยหลีกเลี่ยงข้อยกเว้น "ไม่สามารถดำเนินการนี้หลังจาก onSaveInstanceState" b/110987825

อาร์กิวเมนต์ที่ปลอดภัย

  • การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: การทำงานของอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันและชื่ออาร์กิวเมนต์จะถูกแทนที่ด้วยตัวอักษรพิมพ์เล็ก-ใหญ่ในชื่อเมธอด NavDirections ที่เกี่ยวข้อง
    • เช่น DemoController.index จะกลายเป็น setDemoControllerIndex b/79995048
    • เช่น action_show_settings จะกลายเป็น actionShowSettings b/79642240
  • การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: โดยค่าเริ่มต้น อาร์กิวเมนต์จะถือว่าไม่ใช่ค่าว่าง หากต้องการอนุญาตให้ใช้ค่า Null ในอาร์กิวเมนต์สตริงและพาร์เซล ให้เพิ่ม app:nullable="true" b/79642307
  • ต่อไปนี้คุณจะใช้ app:type="long" กับ defaultValues ในรูปแบบ "123L" b/79563966 ได้แล้ว
  • ขณะนี้ระบบรองรับอาร์กิวเมนต์ที่แยกวิเคราะห์ได้แล้ว โดยใช้ชื่อคลาสที่มีคุณสมบัติครบถ้วนสำหรับ app:type ค่าเริ่มต้นคือ "@null" b/79563966 เท่านั้น
  • ตอนนี้คลาส Args ใช้ equals() และ hashCode() b/79642246 แล้ว
  • ตอนนี้ปลั๊กอิน Safe Args ใช้กับโปรเจ็กต์ไลบรารีได้แล้ว b/80036553
  • ตอนนี้ปลั๊กอิน Safe Args ใช้กับโปรเจ็กต์ฟีเจอร์ได้แล้ว b/110011752

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเมื่อนำทางในระหว่างวิธีการในวงจรของ Fragment b/109916080
  • แก้ไขปัญหาเมื่อนำทางผ่านกราฟที่ซ้อนกันหลายครั้ง b/110178671
  • แก้ไขปัญหาเมื่อใช้ setPopUpTo กับปลายทางแรกในกราฟ b/109909461
  • แก้ปัญหาที่มีการส่งค่า app:defaultValue ทั้งหมดเป็นสตริง b/110710788
  • aapt2 ที่มาพร้อมกับ Android Gradle Plugin 3.2 Beta 01 ได้เพิ่มกฎ Keep ให้กับแอตทริบิวต์ android:name ทุกรายการในไฟล์ XML การนำทาง b/79874119
  • แก้ไขการรั่วไหลของหน่วยความจำเมื่อแทนที่ FragmentNavigator เริ่มต้น b/110900142

เวอร์ชัน 1.0.0-alpha02

7 มิถุนายน 2018

การเปลี่ยนแปลงลักษณะการทำงาน

  • ตอนนี้ FragmentNavigator ใช้ setReorderingAllowed(true) b/109826220

  • Navigation now URLDecodesอาร์กิวเมนต์ที่แยกวิเคราะห์จาก URL ของ Deep Link b/79982454

แก้ไขข้อบกพร่อง

  • แก้ไข IllegalStateException เมื่อเรียกใช้การไปยังส่วนต่างๆ จากวิธีวงจรของ Fragment b/79632233

  • ตอนนี้การนำทางขึ้นอยู่กับไลบรารีการสนับสนุน 27.1.1 เพื่อแก้ไขภาพกะพริบเมื่อใช้ภาพเคลื่อนไหว b/80160903

  • แก้ไข IllegalArgumentException เมื่อใช้ defaultNavHost="true" เป็นส่วนย่อย b/79656847

  • แก้ไข StackOverflowError เมื่อใช้ NavDeepLinkBuilder b/109653065

  • แก้ไข IllegalArgumentException เมื่อนำทางกลับไปยังกราฟที่ซ้อนกัน b/80453447

  • แก้ไขปัญหาเกี่ยวกับ Fragment ที่ทับซ้อนกันเมื่อใช้ launchSingleTop b/79407969

  • ขณะนี้การนำทางจะสร้างสแต็กย้อนกลับสังเคราะห์ที่ถูกต้องสำหรับกราฟที่ซ้อนกัน b/79734195

  • ตอนนี้ NavigationUI จะไฮไลต์รายการที่ถูกต้องเมื่อใช้กราฟที่ซ้อนกันเป็น MenuItem b/109675998

การเปลี่ยนแปลง API

  • แอตทริบิวต์ clearTask สำหรับการดำเนินการและ API ที่เชื่อมโยงใน NavOptions เลิกใช้งานแล้ว b/80338878

  • แอตทริบิวต์ launchDocument สำหรับการดำเนินการและ API ที่เชื่อมโยงใน NavOptions เลิกใช้งานแล้ว b/109806636

เวอร์ชัน 1.0.0-alpha01

8 พฤษภาคม 2018

การนำทางเป็นเฟรมเวิร์กสำหรับการสร้างในแอป การนำทาง รุ่นเริ่มต้นนี้คือ 1.0.0-alpha01