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

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

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

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

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

ดึงดูด

dependencies {
  def nav_version = "2.8.0"

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

  // 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

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

ดึงดูด

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

Kotlin

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

นอกจากนี้ คุณต้องใช้ปลั๊กอิน 1 ใน 2 รายการที่มีอยู่ด้วย

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

ดึงดูด

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

หากต้องการสร้างโค้ด Kotlin ที่เหมาะสำหรับโมดูล Kotlin เท่านั้น ให้เพิ่มรายการต่อไปนี้

ดึงดูด

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

Kotlin

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

คุณต้องมี android.useAndroidX=true ใน gradle.properties ไฟล์ตาม การย้ายข้อมูลไปยัง AndroidX

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร 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