การนำทาง

การนำทางเป็นเฟรมเวิร์กสำหรับ การไปยังส่วนต่างๆ ระหว่าง "ปลายทาง" ภายในแอปพลิเคชัน Android ซึ่งมี API ที่สอดคล้องกันไม่ว่าปลายทางจะได้รับการติดตั้งใช้งานเป็น Fragment, Activity หรือ คอมโพเนนต์อื่นๆ
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
28 มกราคม 2026 2.9.7 - - -

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

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

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

Groovy

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

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

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

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

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

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

Kotlin

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

dependencies {
  val nav_version = "2.9.7"

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

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

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

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

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

Safe Args

หากต้องการเพิ่ม Safe Args ลงในโปรเจ็กต์ ให้ใส่ classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

Groovy

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

Kotlin

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

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

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

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

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

ความคิดเห็น

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

สร้างปัญหาใหม่

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

เวอร์ชัน 2.9

เวอร์ชัน 2.9.7

28 มกราคม 2026

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.7 เวอร์ชัน 2.9.7 มีการเปลี่ยนแปลงเหล่านี้

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

  • การนำทาง SafeArgs จะไม่มีปัญหาการแคชการกำหนดค่าอีกต่อไปเมื่อใช้กับบริการของ Google (I57cda, b/458071608)
  • แก้ไขSavedStateHandleคอนสตรัคเตอร์การทดสอบใน navigation-testing ที่ไม่ได้ถอดรหัส List<String> (I26aac,b/454180135)

เวอร์ชัน 2.9.6

5 พฤศจิกายน 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.6 เวอร์ชัน 2.9.6 มีการเปลี่ยนแปลงเหล่านี้

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

  • เราได้ย้ายข้อมูลปลั๊กอินการนำทาง SafeArgs ไปยัง API ของปลั๊กอิน Android Gradle สมัยใหม่แล้ว ซึ่งจะช่วยให้มั่นใจได้ว่าปลั๊กอินจะเข้ากันได้กับการเผยแพร่ AGP 8.4.2 ขึ้นไปทั้งหมด การเปลี่ยนแปลงเหล่านี้ส่งผลให้ไดเรกทอรีเอาต์พุตสำหรับไฟล์ที่ปลั๊กอินสร้างขึ้นเปลี่ยนเป็นตำแหน่งเริ่มต้นที่ AGP ระบุ (Ie09d6, I7c431, b/203559535, b/293920476, b/269532448, b/443261197)
  • ปลั๊กอิน Navigation SafeArgs จะไม่จำเป็นต้องตั้งค่าพร็อพเพอร์ตี้ useAndroidX อีกต่อไปเมื่อใช้กับ AGP 9.0.0-alpha04 ขึ้นไป (I6c3a4, b/444746731, b/443106400)

เวอร์ชัน 2.9.5

24 กันยายน 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.5 เวอร์ชัน 2.9.5 มีการคอมมิตเหล่านี้

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

  • ตอนนี้ Navigation Safe Args สามารถรองรับการรองรับ Kotlin ในตัวของ AGP 9.0 ได้แล้ว (I1d9d76)

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

  • ตอนนี้ปลั๊กอิน Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 8.4.2 แล้ว (b/431847270, I5932a)

เวอร์ชัน 2.9.4

10 กันยายน 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.4 เวอร์ชัน 2.9.4 มีการเปลี่ยนแปลงเหล่านี้

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

  • ป้องกันไม่ให้เกิดข้อขัดข้องเมื่อมีการส่งเหตุการณ์ย้อนกลับแบบคาดการณ์ในช่วงกลางเฟรมหลังจากที่ปิดใช้ตัวแฮนเดิลในการเปลี่ยน NavHost (I5667c, b/384186542)

เวอร์ชัน 2.9.3

30 กรกฎาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.3 เวอร์ชัน 2.9.3 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขข้อผิดพลาดใน NavController ที่ทำให้เกิด ConcurrentModificationException เมื่อใช้ OnDestinationChangedListeners (If7406, b/417784831)
  • แก้ไขข้อผิดพลาดเมื่อใช้ navigate(uri, navOptions,navigationExtras) ซึ่งระบบไม่สนใจส่วนเสริม (I67fb7, b/430336813)

เวอร์ชัน 2.9.2

16 กรกฎาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.2 เวอร์ชัน 2.9.2 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่รายการไม่กลับมาทำงานต่อเมื่อปิดกล่องโต้ตอบเหนือรายการ (Idb20e, b/418746335)
  • แก้ไขข้อผิดพลาด MissingFieldException เมื่อทดสอบ SavedStateHandle ด้วยเส้นทางที่ปลอดภัยสำหรับประเภทขณะใช้ NavTypes ที่กำหนดเอง (I2f843, b/421002511)

เวอร์ชัน 2.9.1

2 กรกฎาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.1 เวอร์ชัน 2.9.1 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่ทำให้ NavEntries ซึ่งสร้างขึ้นโดยใช้ single top ไม่เคยไปไกลกว่าสถานะ CREATED ใน Lifecycle.State (I043ba, b/421095236)

เวอร์ชัน 2.9.0

7 พฤษภาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0 เวอร์ชัน 2.9.0 มีการเปลี่ยนแปลงเหล่านี้

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

  • ตอนนี้ระบบจะสร้างการดำเนินการ Navigation Safe Args ด้วยคำอธิบายประกอบ @CheckResult เพื่อให้มั่นใจว่ามีการใช้งาน

อินเทอร์เฟซ SupportingPane

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

Compose Kotlin Multiplatform

  • ตอนนี้การนำทางมีฟังก์ชัน NavController.handleDeepLink() ใหม่ที่ใช้กันทั่วไปซึ่งรับ NavDeepLinkRequest แทน Intent ซึ่งจะช่วยให้แพลตฟอร์มอื่นๆ ที่ไม่ใช่ Android จัดการ Deep Link ได้อย่างเหมาะสม ขอขอบคุณ Konstantin Tskhovrebov
  • ตอนนี้การนำทางมี NavUri ซึ่งเป็นฟังก์ชันตัวแยกวิเคราะห์ทั่วไปใหม่ที่เป็น API ที่เข้ากันได้สำหรับ URI ของ Android ในแพลตฟอร์มอื่นๆ ซึ่งช่วยให้สร้าง URI ในลักษณะที่ไม่ขึ้นอยู่กับแพลตฟอร์มได้ ขอขอบคุณ Konstantin Tskhovrebov

ฟังก์ชันที่ปลอดภัยต่อประเภท

  • API ที่ปลอดภัยตามประเภทซึ่งก่อนหน้านี้เข้าถึงได้ผ่านreifiedเมธอดเท่านั้น เช่น composable<YourScreen> มีเวอร์ชันที่ไม่ใช่แบบเรียลไทม์ซึ่งรับอินสแตนซ์ KClass โดยตรง
  • ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว

เวอร์ชัน 2.9.0-rc01

23 เมษายน 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-rc01 เวอร์ชัน 2.9.0-rc01 มีการคอมมิตเหล่านี้

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

  • นำเป้าหมายแพลตฟอร์มที่ไม่ใช่ Android ทั้งหมดออกจาก Jetpack Navigation เนื่องจากเป้าหมายเหล่านั้นใช้งานไม่ได้จริง ตอนนี้เรามี Stub สำหรับแพลตฟอร์มต่างๆ ให้แทนแล้ว (I2877d)

เวอร์ชัน 2.9.0-beta01

9 เมษายน 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-beta01 เวอร์ชัน 2.9.0-beta01 มีการคอมมิตเหล่านี้

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

  • API ทั่วไปของ parseStringAsNavUri ได้รับการเปลี่ยนแปลงเป็นฟังก์ชันโรงงาน NavUri ที่รับสตริง (I4db6e, b/403616316)

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

  • ตอนนี้ไลบรารีนี้กำหนดเป้าหมายเป็นระดับภาษา Kotlin 2.0 และต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)

เวอร์ชัน 2.9.0-alpha09

26 มีนาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha09 เวอร์ชัน 2.9.0-alpha09 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้โมดูล navigation-testing รองรับการใช้งานบนเดสก์ท็อป, Linux, macOS และ iOS นอกเหนือจาก Android แล้ว (I2b770, b/398265336)
  • NavType รองรับการใช้งานบนเดสก์ท็อป, Linux, macOS และ iOS แล้ว นอกเหนือจาก Android (I297d8)

เวอร์ชัน 2.9.0-alpha08

12 มีนาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha08 เวอร์ชัน 2.9.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้

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

  • จากการนำทาง 2.8.9: แก้ไขการถดถอยที่พบในการนำทาง 2.8.8 ซึ่งกำหนดให้ Deep Link ต้องตรงกับช่องทั้งหมดของคำขอหรือ Intent ของ Deep Link อย่างแม่นยำจึงจะถือว่าตรงกัน ซึ่งทำให้ Deep Link ที่มีการจับคู่ฟิลด์บางส่วนและไม่มีฟิลด์อื่นๆ ใช้งานไม่ได้อีกต่อไป (Ie5e36, b/399826566)

การมีส่วนร่วมภายนอก

  • ฟังก์ชันตัวแยกวิเคราะห์ทั่วไปใหม่เพื่อสร้าง NavUri ขอขอบคุณ Konstantin Tskhovrebov (If0a6a)

เวอร์ชัน 2.9.0-alpha07

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha07 เวอร์ชัน 2.9.0-alpha07 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่การพยายาม saveState ด้วยป๊อปอัปที่ไม่ครอบคลุมจะทำให้เกิด savedState ที่เป็นค่าว่าง ซึ่งอาจทำให้เกิดข้อขัดข้องเมื่อกู้คืน (I9f3e8, b/395091644)
  • จาก Navigation 2.8.8: แก้ไขการNavDeepLinkจับคู่ที่ Deep Link และคำขอ Deep Link ต้องตรงกันทุกประการใน URI, การดำเนินการ และ MIME ระบบจะไม่อนุญาตให้จับคู่หากมีฟิลด์ที่ตรงกันเพียง 1 หรือ 2 รายการ (I3b029, b/395712033)
  • จาก Navigation 2.8.8: แก้ไขข้อบกพร่องที่เส้นทางที่มีเส้นทางไวลด์การ์ดไม่ตรงกับ Deep Link ที่เพิ่ม (I7ea92, b/389970341)

การมีส่วนร่วมภายนอก

  • แยก API การนำทาง-ทั่วไป, การนำทาง-รันไทม์ และการนำทาง-คอมโพสไปยังแพลตฟอร์มทั่วไป ขอขอบคุณ Konstantin Tskhovrebov (I1e626, Ica76f, Idf479)

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

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

เวอร์ชัน 2.9.0-alpha06

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha06 เวอร์ชัน 2.9.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ระบบจะสร้างการดำเนินการ Navigation Safe Args ด้วยคำอธิบายประกอบ @CheckResult เพื่อให้มั่นใจว่ามีการใช้งาน (I14d4c, b/356323084)

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

  • แก้ไขข้อผิดพลาดใน NavController ที่พยายามกู้คืนสถานะ BackStack ลงในอาร์เรย์อย่างไม่ถูกต้องเมื่อบันทึกลงในรายการ (Idfb9b)
  • จาก Navigation 2.8.7: ตอนนี้ Navigation Safe Args รองรับปลายทางที่ประกอบได้แล้ว (I35320, b/362791955)

เวอร์ชัน 2.9.0-alpha05

29 มกราคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha05 เวอร์ชัน 2.9.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่ทำให้เกิดภาพเคลื่อนไหวการปรับขนาดที่ไม่คาดคิดเมื่อใช้ Navigation Compose (I480f4, b/353294030)
  • จากการนำทาง 2.8.6: ป้ายกำกับ NavDestination ที่ระบุผ่าน XML จะได้รับการแยกวิเคราะห์ผ่าน NavType.get เพื่อให้มั่นใจว่าระบบจะใช้ตรรกะ NavType ที่กำหนดเอง (I7ec2f, b/388100796)
  • จากการนำทาง 2.8.6: เมื่อนำทางไปยังกิจกรรมที่มี dataPattern ตอนนี้ ActivityNavigator จะพยายามเข้ารหัสค่าอาร์กิวเมนต์ด้วย NavType ของอาร์กิวเมนต์ (I16376, b/383616432)
  • จากการนำทาง 2.8.5: แก้ไขปัญหาที่ทำให้เกิดภาพเคลื่อนไหวการปรับขนาดที่ไม่คาดคิดเมื่อใช้ Navigation Compose และเรียกใช้การนำทางในเฟรมเดียวกันกับที่ภาพเคลื่อนไหวปัจจุบันกำลังสิ้นสุด (I26cb1, b/353294030)

เวอร์ชัน 2.9.0-alpha04

11 ธันวาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha04 เวอร์ชัน 2.9.0-alpha04 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • API ที่ปลอดภัยตามประเภทซึ่งก่อนหน้านี้เข้าถึงได้ผ่านreifiedเมธอดเท่านั้น เช่น composable<YourScreen> มีเวอร์ชันที่ไม่ใช่เวอร์ชันที่สร้างขึ้นใหม่ซึ่งใช้โดยตรงกับอินสแตนซ์ KClass แล้ว (Ia7eed, Id2879, Ibf244, I17d79, Id09d2, I54696, Ia47be, I93281, Ic1bf0, Iba4ee, If56a5, Icf969, I67644, I6f788, b/382094941, b/366291612, b/381938808)

ตารางด้านล่างแสดง API ที่ทำให้เป็นจริงและ KClass

ทำให้เป็นรูปธรรม KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

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

  • ระบบจะซ่อนการโอเวอร์โหลด NavGraph.setStartDestination เฉพาะ Kotlin เพื่อความปลอดภัยของประเภทจากแหล่งที่มาของ Java (Ic640c, b/364634035)

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

  • จาก Navigation 2.8.5: แก้ไขปัญหาที่ NavHost อาจทำให้เกิดข้อยกเว้นภายใน PredictiveBackHandler หากมีการป๊อปแบ็กสแต็กจนเหลือ 1 รายการและมีการเรียกใช้การย้อนกลับของระบบในเฟรมเดียวกัน (I1a429, b/375343407)
  • จากการนำทาง 2.8.5: แก้ไข NavDestination NullPointerException เมื่ออัปเดต startDestination ของกราฟ (I99421, b/361560785)

การมีส่วนร่วมภายนอก

  • จากการนำทาง 2.8.5: ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับ List<Enum> เป็นประเภทอาร์กิวเมนต์ของเส้นทางโดยไม่ต้องใช้ NavType ที่กำหนดเอง ขอขอบคุณ Csaba Kozák (GH-725, b/375559962)

เวอร์ชัน 2.9.0-alpha03

13 พฤศจิกายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha03 เวอร์ชัน 2.9.0-alpha03 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว (I9344a, b/374347483)

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

  • แก้ไขConcurrentModificationExceptionที่อาจเกิดขึ้นเมื่อ LifecycleObserver ที่แนบกับ NavBackStackEntry ทริกเกอร์การเปลี่ยนแปลงสแต็กย้อนกลับเมื่อโฮสต์ LifecycleOwner เช่น Activity หรือ Fragment ที่มีอยู่ เปลี่ยนสถานะวงจรของตัวเอง (Ia9494)

เวอร์ชัน 2.9.0-alpha02

30 ตุลาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha02 เวอร์ชัน 2.9.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้

การมีส่วนร่วมภายนอก

  • NavController.handleDeepLink(request: NavDeepLinkRequest)วิธีใหม่ที่ใช้กันโดยทั่วไป ขอขอบคุณ Konstantin Tskhovrebov (I3e228)

เวอร์ชัน 2.9.0-alpha01

16 ตุลาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.9.0-alpha01 เวอร์ชัน 2.9.0-alpha01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ผู้ให้บริการนำทางที่กำหนดเองสามารถทำเครื่องหมายปลายทางของตนว่าใช้SupportingPaneอินเทอร์เฟซ ซึ่งจะระบุให้ NavController ทราบว่าปลายทางเหล่านี้จะแสดงควบคู่ไปกับปลายทางอื่นๆ การใช้อินเทอร์เฟซนี้จะช่วยให้คุณRESUMEDหลายปลายทางได้พร้อมกัน เช่น (Id5559)
  • จากการนำทาง 2.8.3: เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูล navigation-common, navigation-runtime และ navigation-compose เพื่อช่วยระบุเส้นทางที่ปลอดภัยสำหรับประเภทที่ไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย @Serializable การตรวจสอบนี้ใช้กับฟังก์ชันส่วนขยาย NavGraphBuilder และ NavDeepLinkBuilder ทั้งหมด (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • จากการนำทาง 2.8.3: เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูล navigation-common, navigation-runtime และ navigation-compose เพื่อช่วยระบุเส้นทางที่ปลอดภัยสำหรับประเภทที่มีอาร์กิวเมนต์ Enum ซึ่งไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย @Keep การตรวจสอบนี้ใช้กับฟังก์ชันส่วนขยาย NavGraphBuilder และ NavDeepLinkBuilder ทั้งหมด (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

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

  • การพยายามใช้ NavController ที่DESTROYEDก่อนหน้านี้จะทำให้เกิด IllegalStateException (I520da, b/369616172)

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

  • อัปเดตข้อยกเว้น "ไม่พบคลาส Enum" เพื่อแนะนำให้ใช้คำอธิบายประกอบ @Keep ในกรณีที่คลาส Enum ถูกลบในการสร้างที่ย่อขนาด (I90e79, b/358137294)

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

  • กฎ Lint ใหม่ที่เพิ่มเข้ามาใน Navigation 2.8.* มีปัญหาที่ทำให้เกิดข้อผิดพลาด Obsolete custom lint check เมื่อพยายามเรียกใช้ Lint ด้วยปลั๊กอิน Android Gradle 8.4 ขึ้นไป (b/368070326, b/371463741)

เวอร์ชัน 2.8

เวอร์ชัน 2.8.9

12 มีนาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.9 เวอร์ชัน 2.8.9 มีการคอมมิตเหล่านี้

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

  • แก้ไขการถดถอยที่พบใน Navigation 2.8.8 ซึ่งกำหนดให้ Deep Link ต้องตรงกับช่องทั้งหมดของคำขอหรือ Intent ของ Deep Link อย่างแม่นยำจึงจะถือว่าตรงกัน ซึ่งทำให้ Deep Link ที่มีการจับคู่ฟิลด์บางส่วนและไม่มีฟิลด์อื่นๆ ใช้งานไม่ได้อีกต่อไป (Ie5e36, b/399826566)

เวอร์ชัน 2.8.8

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.8 เวอร์ชัน 2.8.8 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขข้อบกพร่องที่เส้นทางที่มีเส้นทางไวลด์การ์ดไม่ตรงกับ Deeplink ที่เพิ่ม (I7ea92, b/389970341)
  • เราได้แก้ไขการจับคู่ NavDeepLink ที่ Deep Link และคำขอ Deep Link ต้องตรงกันทุกประการใน URI, การดำเนินการ และ MIME ระบบจะไม่อนุญาตให้จับคู่หากมีฟิลด์ที่ตรงกันเพียง 1 หรือ 2 รายการ (I3227f, b/395712033)

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

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

เวอร์ชัน 2.8.7

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.7 เวอร์ชัน 2.8.7 มีการคอมมิตเหล่านี้

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

  • ตอนนี้ Navigation Safe Args รองรับปลายทางที่ประกอบได้แล้ว (I35320, b/362791955)

เวอร์ชัน 2.8.6

29 มกราคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.6 เวอร์ชัน 2.8.6 มีการเปลี่ยนแปลงเหล่านี้

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

  • ระบบจะแยกวิเคราะห์ป้ายกำกับ NavDestination ที่ระบุผ่าน XML โดยใช้ NavType.get เพื่อให้มั่นใจว่าระบบจะปฏิบัติตามตรรกะ NavType ที่กำหนดเอง (Id366d, b/388100796)
  • เมื่อไปยังกิจกรรมด้วย dataPattern ตอนนี้ ActivityNavigator จะพยายามเข้ารหัสค่าอาร์กิวเมนต์ด้วย NavType ของอาร์กิวเมนต์ (I1a71d, b/383616432)

เวอร์ชัน 2.8.5

11 ธันวาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.5 เวอร์ชัน 2.8.5 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่ NavHost อาจทำให้เกิดข้อยกเว้นภายใน PredictiveBackHandler หากมีการป๊อป Back Stack ลงไปที่ 1 รายการและมีการเรียกใช้การย้อนกลับของระบบในเฟรมเดียวกัน (I1a429, b/375343407)
  • แก้ไข NavDestination NullPointerException เมื่ออัปเดต startDestination ของกราฟ (I99421, b/361560785)
  • แก้ไขปัญหาที่ทำให้เกิดภาพเคลื่อนไหวการปรับขนาดที่ไม่คาดคิดเมื่อใช้ Navigation Compose และเรียกใช้ navigate ในเฟรมเดียวกันกับที่ภาพเคลื่อนไหวปัจจุบันสิ้นสุดลง (I26cb1, b/353294030)
  • แก้ไขConcurrentModificationExceptionที่อาจเกิดขึ้นเมื่อ LifecycleObserver ที่แนบกับ NavBackStackEntry ทริกเกอร์การเปลี่ยนแปลงสแต็กย้อนกลับเมื่อโฮสต์ LifecycleOwner เช่น Activity หรือ Fragment ที่มีอยู่ เปลี่ยนสถานะวงจรของตัวเอง (Ia9494)

การมีส่วนร่วมภายนอก

  • ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับ List<Enum> เป็นประเภทอาร์กิวเมนต์ของเส้นทางโดยไม่ต้องใช้ NavType ที่กำหนดเอง ขอขอบคุณ Csaba Kozák (GH-725, b/375559962)

เวอร์ชัน 2.8.4

13 พฤศจิกายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.4 เวอร์ชัน 2.8.4 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • จากการนำทาง 2.9.0-alpha03: ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว (I9344a, b/374347483)

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

เวอร์ชัน 2.8.3

16 ตุลาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.3 เวอร์ชัน 2.8.3 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูล navigation-common, navigation-runtime และ navigation-compose เพื่อช่วยระบุเส้นทางที่ปลอดภัยตามประเภทซึ่งไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย @Serializable การตรวจสอบนี้ใช้กับฟังก์ชันส่วนขยาย NavGraphBuilder และ NavDeepLinkBuilder ทั้งหมด (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูล navigation-common, navigation-runtime และ navigation-compose เพื่อช่วยระบุเส้นทางที่ปลอดภัยต่อประเภทที่มีอาร์กิวเมนต์ Enum ซึ่งไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย @Keep การตรวจสอบนี้ใช้กับฟังก์ชันส่วนขยาย NavGraphBuilder และ NavDeepLinkBuilder ทั้งหมด (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

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

  • แก้ไขปัญหาที่กฎ Lint ใหม่ซึ่งเพิ่มเข้ามาใน Navigation 2.8.* จะทําให้เกิดข้อผิดพลาด Obsolete custom lint check เมื่อพยายามเรียกใช้ Lint ด้วยปลั๊กอิน Android Gradle 8.4 ขึ้นไป (I1be3d, b/368070326, b/371463741)

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

  • การตรวจสอบ Lint ของการนำทางจะแสดงข้อผิดพลาด "การตรวจสอบ Lint ที่กำหนดเองที่ล้าสมัย" เมื่อพยายามเรียกใช้ Lint ด้วย Lint 16 (AGP 8.7) ขึ้นไป (b/371926651)

เวอร์ชัน 2.8.2

2 ตุลาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.2 เวอร์ชัน 2.8.2 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Navigation Type Safety รองรับคลาสที่ทำให้อ่านและเขียนได้ ซึ่งรวมถึง Double, Double?, DoubleArray, DoubleArray?, List<Double> และ List<Double>? โดยไม่ต้องใช้ NavType ที่กำหนดเอง (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)

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

  • ปรับปรุงข้อความแสดงข้อผิดพลาดในกรณีที่การนำทางไม่สามารถแมปอาร์กิวเมนต์ของเส้นทางกับ NavType ข้อความแสดงข้อผิดพลาดใหม่จะมีชื่ออาร์กิวเมนต์ ชื่อที่สมบูรณ์ของอาร์กิวเมนต์ และชื่อที่สมบูรณ์ของเส้นทาง (Id8416, b/346264232)

เวอร์ชัน 2.8.1

18 กันยายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.1 เวอร์ชัน 2.8.1 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มกฎ Lint ใหม่เพื่อให้แน่ใจว่ามีการใช้ฟังก์ชัน popBackStack ที่ใช้ประเภทคลาสที่ทำให้เป็นจริงเมื่อพยายาม popBackStack โดยใช้ API ที่ปลอดภัยต่อประเภท (Ief161, b/358095343)

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

  • ตอนนี้การนำทางกำหนดให้เส้นทางที่ส่งไปยัง NavGraph ของ startDestination ต้องมีค่าสำหรับอาร์กิวเมนต์ที่จำเป็นทั้งหมด ซึ่งรวมถึงอาร์กิวเมนต์ที่ต้องระบุและไม่มีค่าเริ่มต้น (I18e74, b/362594265)
  • Navigation Safe Args ได้เพิ่มการรองรับสตริงที่กำหนดให้มีค่าได้เสมอเพื่อให้ระบบแยกวิเคราะห์ค่า "null" และจัดเก็บไว้ใน Bundle ตามเดิม ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะแยกวิเคราะห์ค่า "null" เป็นออบเจ็กต์ null การเปลี่ยนแปลงนี้มีผลกับประเภท String ที่ไม่ใช่ค่า Null เท่านั้น สตริงที่อนุญาตให้เป็นค่าว่างจะยังคงเดิม (I08b4a, b/348936238)
  • ระบบจะ Deep Link ไปยัง NavDestination ไม่ได้อีกต่อไป ยกเว้นผ่าน Deep Link ที่เพิ่มไปยังปลายทางอย่างชัดเจน ซึ่งหมายความว่าคุณจะไปยังเส้นทางของจุดหมายได้โดยใช้ฟังก์ชันการนำทางที่โอเวอร์โหลดซึ่งใช้เส้นทางสตริงเท่านั้น การแก้ไขนี้จะปิดช่องโหว่ที่ทำให้สามารถ Deep Link ไปยังปลายทางที่อาจได้รับการปกป้อง (Ie30e6)

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

  • ตอนนี้ Navigation Safe Args ขึ้นอยู่กับ Kotlin 1.9.24 แทนที่จะเป็น Kotlin 2.X เพื่อให้มั่นใจว่านักพัฒนาแอปจะไม่ถูกบังคับให้อัปเดต (a4129a)
  • ตอนนี้การเขียนการนำทางจะขึ้นอยู่กับ Compose 1.7.2

เวอร์ชัน 2.8.0

4 กันยายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0 เวอร์ชัน 2.8.0 มีการเปลี่ยนแปลงเหล่านี้

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

ความปลอดภัยของประเภท DSL ของ Kotlin สำหรับการนำทาง

  • ตอนนี้การนำทางมี 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)
        }
    }

ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์ Navigation Compose meet Type Safety

การนำทาง Compose Predictive Back

  • ตอนนี้ Navigation Compose รองรับการย้อนกลับในแอปที่คาดการณ์ได้ผ่าน SeekableTransitionState API ใหม่จาก compose-animation ซึ่งช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมด้วยการเปลี่ยนฉากที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก

Composable ของ Navigation Fragment

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

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

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

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

เวอร์ชัน 2.8.0-rc01

21 สิงหาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-rc01 เวอร์ชัน 2.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขข้อขัดข้องในการนำทางเมื่อส่งคลาส Enum ระดับบนสุดเป็นอาร์กิวเมนต์ที่ปลอดภัยต่อประเภท (I0ba76, b/358137294)
  • ตอนนี้ Navigation 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)
  • การนำทางใน Safe Args มี NavType.EnumType ใหม่เพิ่มเข้ามาแล้ว ซึ่งหมายความว่าEnumประเภทต่างๆ ไม่จำเป็นต้องมีNavTypeที่กำหนดเองอีกต่อไป โปรดทราบว่า EnumSerialName ต้องเป็นชื่อแบบสมบูรณ์ในตัวเองเริ่มต้น (I66d22, b/346475493)
  • การนำทางใน Safe Args ได้เพิ่มการรองรับประเภทอาร์กิวเมนต์ที่อนุญาตให้เป็น Null ในตัว ซึ่งรวมถึง Int?, Long?, Float?, Boolean? และ Enum<*>? (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • ตอนนี้ NavGraph ของ startDestination จะใช้ค่าอาร์กิวเมนต์เริ่มต้นหากเส้นทาง startDestination ที่ส่งไปยัง NavGraph เท่ากับ startDestination.route ทุกประการ (I13762, b/354046047)

เวอร์ชัน 2.8.0-beta06

24 กรกฎาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-beta06 เวอร์ชัน 2.8.0-beta06 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 2.8.0-beta05

10 กรกฎาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-beta05 เวอร์ชัน 2.8.0-beta05 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 2.8.0-beta04

26 มิถุนายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-beta04 เวอร์ชัน 2.8.0-beta04 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 2.8.0-beta03

12 มิถุนายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-beta03 เวอร์ชัน 2.8.0-beta03 มีการเปลี่ยนแปลงเหล่านี้

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

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

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

  • เพิ่มเอกสารประกอบเกี่ยวกับ NavType.serializeAsValue และ serializeAsValues เพื่อเน้นว่าเอาต์พุตสุดท้ายควรมีการเข้ารหัส Uri (Ida6bd, b/344943214)
  • แก้ไขข้อขัดข้องเมื่อเรียก toRoute<T> โดยมีอาร์กิวเมนต์ CollectionNavType เป็นค่าว่าง เมื่อไปยังส่วนต่างๆ ด้วย CollectionNavType ที่เป็นค่าว่าง อาร์กิวเมนต์เอาต์พุตจะเป็นค่าเริ่มต้นที่ประกาศในคลาส Serializable หรือค่าที่ส่งคืนของ emptyCollection() หากไม่มีค่าเริ่มต้น (I84158, Id630f, b/342672856)

เวอร์ชัน 2.8.0-beta02

29 พฤษภาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-beta02 เวอร์ชัน 2.8.0-beta02 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขClassCastExceptionการขัดข้องเมื่อใช้ NavBackStackEntry.toRoute กับ NavType ที่กำหนดเองซึ่งยอมรับค่า Null ได้ (I1c29b, b/342239473)
  • แก้ไขปัญหาการกู้คืนสถานะ Back Stack ของการนำทางที่เกิดขึ้นเมื่อพยายามกู้คืนรายการ Back Stack ที่เข้าถึงไม่ได้ผ่านรหัสจากปลายทางปัจจุบัน เนื่องจากเส้นทางได้รับการสนับสนุนโดยรหัส ปลายทางที่สร้างด้วยเส้นทางจึงได้รับผลกระทบด้วย นอกจากนี้ยังแก้ไขข้อขัดข้องที่เกิดจากการเรียกใช้ 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 (Id4867, b/339080702)

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

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

เวอร์ชัน 2.8.0-alpha08

1 พฤษภาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-alpha08 เวอร์ชัน 2.8.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้

Safe Args ใน 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)
      }
  }

ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์ Navigation Compose meet Type Safety

ฟีเจอร์ใหม่

  • ตอนนี้อาร์ติแฟกต์ navigation-fragment-compose มีLocalFragmentองค์ประกอบเฉพาะสำหรับเมธอดที่ใช้ร่วมกันได้ภายใน ComposableFragment (If35e5)
  • NavType ตอนนี้รองรับรายการ Int, String, บูลีน, 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 ในแต่ละปลายทาง เมื่อไปยังปลายทางใดปลายทางหนึ่งเหล่านี้ ระบบจะสร้าง Fragment ที่มีอยู่เพื่อแสดงเนื้อหาที่ใช้ Composable (I0ef2e, b/265480755)

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

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

  • การรองรับ Safe Args ใน Navigation Compose โดยใช้วิธีการที่อิงตาม Kotlin Serialization ยังคงมีต่อไป API เหล่านี้ยังไม่เสร็จสมบูรณ์และมีคำอธิบายประกอบ ExperimentalSafeArgsApi เราจะนำคำอธิบายประกอบนี้ออกเมื่อ API ทั้งหมดพร้อมใช้งานในรุ่นต่อๆ ไป (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)

เวอร์ชัน 2.8.0-alpha06

3 เมษายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-alpha06 เวอร์ชัน 2.8.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้

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

  • เราได้เริ่มรองรับ Safe Args ใน Navigation Compose โดยใช้วิธีการที่อิงตาม Kotlin Serialization แล้ว API เหล่านี้ยังไม่เสร็จสมบูรณ์และมีคำอธิบายประกอบ ExperimentalSafeArgsApi เราจะนำคำอธิบายประกอบนี้ออกเมื่อ API ทั้งหมดพร้อมใช้งานในรุ่นต่อๆ ไป (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)

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

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

เวอร์ชัน 2.8.0-alpha05

20 มีนาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-alpha05 เวอร์ชัน 2.8.0-alpha05 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณส่งอาร์กิวเมนต์ไปยัง NavGraph ของ startDestination ได้โดยตรงในเส้นทาง 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 สำหรับการเปลี่ยนฉากใน Navigation Compose ได้แล้วโดยกำหนดให้เป็นส่วนหนึ่งของการเริ่มต้นสำหรับฟังก์ชัน composable และ/หรือ navigation (I91062, b/296912651)

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

  • แก้ไขปัญหาที่ NavHost ใน Compose Navigation แสดงการเปลี่ยนไม่ถูกต้องเมื่อใช้ปุ่มย้อนกลับของระบบโดยไม่ใช้ท่าทางสัมผัส (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)

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

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

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

  • ตอนนี้ Navigation Compose ขึ้นอยู่กับ Compose 1.7.0-alpha03 แล้ว

เวอร์ชัน 2.8.0-alpha02

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-alpha02 เวอร์ชัน 2.8.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Navigation Compose รองรับการย้อนกลับในแอปที่คาดการณ์ได้ผ่าน SeekableTransitionState API ใหม่จาก compose-animation ซึ่งช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมด้วยการเปลี่ยนฉากที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก (I8b8e9)

เวอร์ชัน 2.8.0-alpha01

24 มกราคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.8.0-alpha01 เวอร์ชัน 2.8.0-alpha01 มีคอมมิตเหล่านี้

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

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

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

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

การมีส่วนร่วมภายนอก

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

เวอร์ชัน 2.7.7

เวอร์ชัน 2.7.7

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.7 เวอร์ชัน 2.7.7 มีคอมมิตเหล่านี้

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

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

การมีส่วนร่วมภายนอก

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

เวอร์ชัน 2.7.6

เวอร์ชัน 2.7.6

13 ธันวาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.6 เวอร์ชัน 2.7.6 มีคอมมิตเหล่านี้

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

  • ตอนนี้ฟังก์ชัน 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)

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

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

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

  • การนำทางด้วย Fragment จะขึ้นอยู่กับ Fragment 1.6.2 ซึ่งแก้ไขปัญหาที่อินสแตนซ์ ViewModel ของ Fragment ที่ซ้อนกันจะไม่ถูกล้างเมื่อเรียกใช้ 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 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.7.2

เวอร์ชัน 2.7.2

6 กันยายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.2 เวอร์ชัน 2.7.2 มีคอมมิตเหล่านี้

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

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

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

  • ตอนนี้ Navigation Compose ขึ้นอยู่กับ Compose 1.5.1 แล้ว

เวอร์ชัน 2.7.1

เวอร์ชัน 2.7.1

23 สิงหาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.1 เวอร์ชัน 2.7.1 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.7.0

เวอร์ชัน 2.7.0

9 สิงหาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.0 เวอร์ชัน 2.7.0 มีคอมมิตเหล่านี้

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

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

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

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

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

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

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

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

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

เวอร์ชัน 2.7.0-rc01

26 กรกฎาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.0-rc01 เวอร์ชัน 2.7.0-rc01 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่แลมบ์ดา EnterTransition และ ExitTransition ที่สร้างขึ้นเป็นส่วนหนึ่งของ NavHost อาจยังคงอยู่ในหน่วยความจำแม้ว่าจะนำ NavHost ออกจากองค์ประกอบแล้วก็ตาม (I893d0)

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

  • การนำทาง 2.6.x มีปัญหาที่อาจทำให้เกิด IllegalArgumentException เมื่อนำทางด้วย popUpTo คุณอาจหลีกเลี่ยงข้อยกเว้นนี้ได้โดยการปรับโครงสร้างกราฟใหม่ ซึ่งคล้ายกับคำแนะนำที่ระบุไว้ที่นี่ (b/287133013)

เวอร์ชัน 2.7.0-beta02

28 มิถุนายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.0-beta02 เวอร์ชัน 2.7.0-beta02 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.7.0-beta01

7 มิถุนายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.0-beta01 เวอร์ชัน 2.7.0-beta01 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.7.0-alpha01

24 พฤษภาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.7.0-alpha01 เวอร์ชัน 2.7.0-alpha01 มีคอมมิตเหล่านี้

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

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

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

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

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

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

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

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

เวอร์ชัน 2.6.0

เวอร์ชัน 2.6.0

7 มิถุนายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.6.0 เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้

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

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

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

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

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

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

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

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

เวอร์ชัน 2.6.0-rc01

10 พฤษภาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.6.0-rc01 เวอร์ชัน 2.6.0-rc01 มีคอมมิตต่อไปนี้

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

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

เวอร์ชัน 2.6.0-beta01

19 เมษายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.6.0-beta01 เวอร์ชัน 2.6.0-beta01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • NavBackStackEntry มีการติดตั้งใช้งาน toString ที่กำหนดเองแล้ว (Iff00b)

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

  • เมื่อใช้การนำทางด้วย Fragment การพยายามทำ FragmentTransaction ด้วยตนเองซึ่งจะเพิ่ม Fragment ลงใน Back Stack ของ FragmentManager จะทำให้เกิด IllegalArgumentException คุณควรเพิ่ม Fragment ผ่าน navigate() API เสมอ (I6d38e)
  • เมื่อมี navigate ที่เพิ่มรายการและ popBackStack ที่นำรายการออกในเฟรมเดียวกัน ตอนนี้รายการสูงสุดที่ได้ในสแต็กย้อนกลับจะนำผู้ใช้กลับไปยัง RESUMED Lifecycle.State ได้อย่างสม่ำเสมอ (Id8067, b/276495952)

เวอร์ชัน 2.6.0-alpha09

5 เมษายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.6.0-alpha09 เวอร์ชัน 2.6.0-alpha09 มีคอมมิตต่อไปนี้

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

  • แก้ไขการตรวจสอบเส้นทางที่ไม่ถูกต้องเพื่อให้หาก NavDestination มี NavArgument ที่ไม่ใช่ค่าว่าง เส้นทางของปลายทางนี้ต้องมีตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์ที่มีชื่อเดียวกับ NavArgument ที่ไม่ใช่ค่าว่าง (Ic62bf, b/274697949)
  • การนำทาง Deep Link ที่อิงตาม Action/MimeType จะล้มเหลวหากการดำเนินการนำทางไม่มี NavArgument ที่ไม่เป็นค่าว่างซึ่ง NavDestination กำหนดให้ Action/MimeType ตรงกัน (Ibfa17, b/271777424)
  • เมื่อ NavController ตั้งค่ากราฟที่มีเส้นทางและปลายทางเดียวกันกับกราฟก่อนหน้า ตอนนี้กราฟจะแทนที่โหนดกราฟปัจจุบันและปลายทางในสแต็กย้อนกลับด้วยอินสแตนซ์ใหม่ได้อย่างถูกต้อง การแก้ไขนี้จะช่วยแก้ปัญหาการขัดข้องเมื่อใช้ onLaunchSingleTop โดยไม่ได้บันทึกสถานะใน Navigation Compose นอกจากนี้ ยังแก้ไขข้อผิดพลาดที่การไปยังปลายทางที่เชื่อมโยงกับกราฟรูททำให้เกิดการสร้างสแต็กย้อนกลับที่ไม่ถูกต้องด้วย (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() และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับ Fragment หรือไม่ก็ตาม (I81bdf)
  • การเพิ่ม Fragment ลงใน FragmentNavigator's 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 ที่ใช้เส้นทางจะใช้รูปแบบเส้นทางที่มีอาร์กิวเมนต์และพารามิเตอร์การค้นหาที่อนุญาตให้เป็น Null (I22294, b/269302500)
  • แก้ไขปัญหาที่การเรียก clearBackStack() จาก NavController จะไม่ล้างสถานะที่บันทึกไว้ใน Fragment Manager ที่เชื่อมโยงกับ Back Stack ที่ล้างแล้ว (Ic1cce, b/271190202)
  • แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้ไฮไลต์ MenuItem ที่ไม่ถูกต้องใน BottomNavigationView เมื่อใช้การย้อนกลับของระบบระหว่างแท็บ (I634f6, b/270447657)
  • แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้NavBackStackEntrys ไม่ย้ายไปที่สถานะ RESUMED เมื่อใช้ Animations (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

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

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

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

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

  • เมื่อใช้การนำทางกับ Fragment วงจรของ NavBackStackEntry จะไม่ถึง RESUMED เมื่อใช้ API ของ Animation (b/269646882)
  • เมื่อใช้การนำทางกับ Fragment และนำทางด้วย BottomNavigation หากคุณพยายามกู้คืนสแต็กย้อนกลับที่มีหลายรายการ ระบบจะไม่สามารถอัปเดต BottomMenuItem ได้อย่างถูกต้อง (b/270447657)
  • เมื่อใช้การนำทางกับ Fragment หลังจากกู้คืนสถานะแล้ว NavBackStackEntry Lifecycle จะไม่ได้รับ DESTROYED เมื่อ Fragment เป็น 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 ตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัป NavBackStackEntries ซึ่งหมายความว่าตอนนี้ NavBackStackEntry Lifecycle จะรอให้เอฟเฟกต์พิเศษของ Fragment ที่เข้าและออกเสร็จสมบูรณ์ก่อนที่จะย้าย Lifecycle.State สุดท้าย (I3cb19, b/238686802)
  • DialogFragmentNavigator ตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัป NavBackStackEntries ซึ่งหมายความว่าตอนนี้ NavBackStackEntry Lifecycle จะรอให้ DialogFragment Lifecycle ย้ายไปที่ DESTROYED ก่อน แล้วจึงย้ายไปที่ DESTROYED เอง (I53ee5, b/261213893)

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

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

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

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

เวอร์ชัน 2.6.0-alpha04

9 พฤศจิกายน 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.6.0-alpha04 เวอร์ชัน 2.6.0-alpha04 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

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

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

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

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

  • การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารี Play Feature Delivery แบบละเอียด (Ib4ddc)
  • ตอนนี้ Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.3.0 แล้ว ซึ่งหมายความว่าตอนนี้จะใช้ได้กับเวอร์ชัน 7.3.0 ขึ้นไปเท่านั้น (I47e49)

เวอร์ชัน 2.6.0-alpha03

24 ตุลาคม 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.6.0-alpha03 เวอร์ชัน 2.6.0-alpha03 มีคอมมิตเหล่านี้

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

  • จากการนำทาง 2.5.3: NavHost จะไม่ทำให้เกิด NoSuchElementException อีกต่อไปเมื่อไม่มีปลายทางให้ Crossfade สร้าง ตอนนี้ระบบจะข้ามเฉพาะการเรียบเรียง (Ieb46e, b/253299416)
  • จาก Navigation 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 ที่ว่างเปล่าโดยใช้ navDeepLink Kotlin DSL จะทําให้เกิดคําเตือน Lint ซึ่งระบุว่า Deep Link ต้องมี URI, การกระทํา และ/หรือ MIME Type จึงจะถูกต้อง (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 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางเริ่มต้นที่ผุดขึ้นใหม่ (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 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางเริ่มต้นที่ผุดขึ้นมาใหม่ (I9f7cb, b/243778589)

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

เวอร์ชัน 2.5.1

27 กรกฎาคม 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.5.1 เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้

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

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

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

  • ตอนนี้ไลบรารีการนำทางขึ้นอยู่กับ Lifecycle 2.5.1 แล้ว (Ib4451)
  • ตอนนี้ไลบรารีการนำทางขึ้นอยู่กับ Activity 1.5.1 แล้ว (I3efe8)
  • ตอนนี้ไลบรารีการนำทางขึ้นอยู่กับ Fragment 1.5.1 แล้ว (I56177)

เวอร์ชัน 2.5.0

29 มิถุนายน 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.5.0 เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้

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

  • การผสานรวม CreationExtras - ตอนนี้ Navigation สามารถระบุ ViewModelProvider.Factory แบบไม่มีสถานะผ่าน Lifecycle 2.5.0 ของ CreationExtras ได้แล้ว

Navigation SafeArgs

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

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

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

เวอร์ชัน 2.5.0-rc02

15 มิถุนายน 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.5.0-rc02 เวอร์ชัน 2.5.0-rc02 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.5.0-rc01

11 พฤษภาคม 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.5.0-rc01 เวอร์ชัน 2.5.0-rc01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

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

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

  • ตอนนี้ระบบจะทิ้งขอบเขตที่ประกอบได้ใน NavHost และ DialogHost ตามลำดับที่คาดไว้ นั่นคือ ระบบจะทิ้งขอบเขตที่ประกอบได้ด้านในก่อนขอบเขตที่ประกอบได้ด้านนอก (I157e6)
  • ตอนนี้ Navigation SafeArgs ใช้ PathSensitivity.RELATIVE ใน ArgumentsGenerationTask เพื่อให้แคชย้ายตำแหน่งได้ ซึ่งหมายความว่าตอนนี้คุณสามารถนำรายการแคชกลับมาใช้ซ้ำจากบิลด์ CI ไปยังบิลด์ในเครื่องได้แล้ว (I5f67c, b/173420454)
  • เราได้อัปเดตกฎ 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รายการหนึ่งในแท็บการนำทางด้านล่างที่ไม่ใช่แท็บหลักเมื่อใช้ Back Stack หลายรายการ

เวอร์ชัน 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)
  • visibleEntries StateFlow ที่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 เพื่อสร้าง ViewModel (I69161, b/217617710)
  • ตอนนี้ Navigation Safe Args รองรับการใช้เนมสเปซที่กำหนดไว้ ใน build.gradle แทนแพ็กเกจใน AndroidManifest แล้ว (I659ef, b/217414933)

เวอร์ชัน 2.5.0-alpha02

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.5.0-alpha02 เวอร์ชัน 2.5.0-alpha02 มีคอมมิตเหล่านี้

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

  • จากการนำทาง 2.4.1: ตอนนี้ NavHostFragment จะตั้งค่า OnBackPressedDispatcher อย่างถูกต้องเมื่อใช้ View Binding กับกราฟที่ซ้อนกัน (Ifbb51, b/214577959)
  • จากการนำทาง2.4.1: เมื่อ Deep Link ผ่าน NavGraph หลายรายการที่ซ้อนกัน ตอนนี้ Back Stack จะรวมปลายทางเริ่มต้นระดับกลางอย่างถูกต้องแล้ว (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)
  • NavDeepLinks จะไม่ถอดรหัสอาร์กิวเมนต์ซ้ำ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้ระบบจะส่งอาร์กิวเมนต์ที่เหมาะสมไปยังปลายทางสุดท้ายของคุณแล้ว (I31b0a, b/210711399)

Safe Args

  • ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Navigation Safe 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)
  • ย้อนกลับจาก Navigation 2.5.0-alpha03: ตอนนี้ Navigation SafeArgs รองรับการใช้เนมสเปซที่กำหนดไว้ ใน build.gradle แทนแพ็กเกจใน AndroidManifest แล้ว (I659ef, b/217414933)
  • ย้อนกลับจากการนำทาง 2.5.0-alpha04: Navigation Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อใช้ เนมสเปซและไม่มี AndroidManifest.xml (I17ccf, b/227229815)
  • ย้อนกลับจากการนำทาง 2.5.0-alpha04: ตอนนี้ระบบถือว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องใน 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 ที่ซ้อนกันหลายรายการ ตอนนี้ Back Stack จะรวมปลายทางเริ่มต้นระดับกลางอย่างถูกต้องแล้ว (I504c0, b/214383060)
  • ย้อนกลับจากการนำทาง 2.5.0-alpha01: แก้ไขปัญหาที่การเข้าถึง ViewModel ที่สร้างผ่าน by navGraphViewModels() จาก onCreate() ของ Fragment จะล้มเหลวพร้อมกับ IllegalStateException (I8a14d)
  • ย้อนกลับจากการนำทาง 2.5.0-alpha01: NavDeepLinks no longer unnecessarily decode args twice, meaning that the properly decoded args are now passed to your final destination. (I31b0a, b/210711399)
  • พอร์ตจาก Navigation 2.5.0-alpha01: ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Navigation Safe Args จะใช้กับ Android Studio เวอร์ชันก่อน 7.0 ไม่ได้อีกต่อไป แต่จะใช้ได้กับ Android Gradle Plugin 7.1.0 ขึ้นไป (I41c88, b/213086135, b/207670704)

เวอร์ชัน 2.4.0

เวอร์ชัน 2.4.0

26 มกราคม 2022

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.4.0 เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้

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

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

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

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

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

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

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

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

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

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

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

ซึ่งส่งผลต่อ API ดังนี้

  • เราได้เลิกใช้งานพร็อพเพอร์ตี้ popUpTo Kotlin ใน Kotlin DSL แล้วเพื่อใช้ popUpToId แทน
  • เราได้เลิกใช้งาน getStartDestination() API แล้วเพื่อหันไปใช้ getStartDestinationId() แทน

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

Navigation Compose

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

การเปิดตัวนี้มีสิ่งต่อไปนี้

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

ดูข้อมูลเพิ่มเติมได้ที่คู่มือการนำทางด้วย Compose

สแต็กย้อนกลับหลายรายการ

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

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

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 Builder ได้

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • ในการสร้างออบเจ็กต์ 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)

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

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

การแก้ไขข้อบกพร่องของ Navigation Compose

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

การแก้ไขข้อบกพร่องของ Safe Args

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

เวอร์ชัน 2.4.0-beta02

3 พฤศจิกายน 2021

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.4.0-beta02 เวอร์ชัน 2.4.0-beta02 มีคอมมิตเหล่านี้

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

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

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

  • ตอนนี้ระบบจะคอมไพล์รูปแบบ Deep Link แบบเลซี่ใน NavDeepLink แทนที่จะคอมไพล์ระหว่างการขยาย ซึ่งจะช่วยปรับปรุงเวลาในการขยายกราฟการนำทางที่มี Deep Link (b8d257, b/184149935)

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

  • แก้ไขปัญหาที่ NavBackStackEntries ถูกส่งไปยัง Lifecycle.State.CREATED หลังจากย้ายไปยัง Lifecycle.State.STARTED เมื่อ มีการเพิ่ม NavHost ลงใน setContent() ของกิจกรรมโดยตรง (Ia5ac1, b/203536683)
  • แก้ไขเงื่อนไขการแข่งขันที่การ นำปลายทาง DialogFragment ออกจาก สแต็กย้อนกลับก่อนที่กล่องโต้ตอบจะแสดงจริง จะไม่ปิดกล่องโต้ตอบจริง ส่งผลให้ เกิดข้อขัดข้องเมื่อผู้ใช้ปิดกล่องโต้ตอบที่ผิดพลาดด้วยตนเอง (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 กับ Fragment ได้ดียิ่งขึ้น (I901e3, b/201446416)

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

  • ตอนนี้ visibleEntries API อยู่ในเวอร์ชันทดลอง (I93f6f)

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

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

เวอร์ชัน 2.4.0-alpha10

29 กันยายน 2021

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.4.0-alpha10 เวอร์ชัน 2.4.0-alpha10 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ NavController มีความสามารถในการดึงข้อมูลรายการอินสแตนซ์ NavBackStackEntry ทั้งหมดที่มองเห็นได้ ผ่าน visibleEntries StateFlow (Ia964e)
  • rememberNavController() ตอนนี้รับชุดอินสแตนซ์ Navigator ที่ไม่บังคับซึ่งจะเพิ่มลงใน NavController ที่ส่งคืนเพื่อรองรับ Navigator ที่ไม่บังคับได้ดียิ่งขึ้น เช่น 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)
  • ตอนนี้คุณสามารถส่งรายการอาร์กิวเมนต์และ/หรือ Deep Link ไปยังตัวสร้างของ กราฟการนำทางที่ซ้อนกันได้แล้ว และระบบจะเพิ่มรายการเหล่านั้น ลงในกราฟผลลัพธ์โดยอัตโนมัติ (I8a470, b/182545357)

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

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

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

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

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

  • เมื่อใช้ Navigation Compose NavGraphs จะเป็น DESTROYED ก็ต่อเมื่อองค์ประกอบย่อยทั้งหมดเป็น DESTROYED (I86552, b/198741720)
  • อาร์กิวเมนต์ NavDeepLink ที่ยอมรับค่า Null ได้ไม่จำเป็นต้องมีค่าเริ่มต้นอีกต่อไป (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 เพื่อสร้าง NavType ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรมเท่านั้น เช่น ผ่านNavigation Graph Kotlin DSL (I78440, b/196871885)

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

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

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

  • การใช้ getBackStackEntry และ previousBackStackEntry ภายใน composable() ร่วมกับ remember() จะไม่ทำให้เกิดข้อยกเว้นเนื่องจากไม่มีปลายทางใน Back Stack อีกต่อไป (I75138, b/194313238)
  • ตอนนี้ Navigation Compose จะทำการคอมโพสใหม่อย่างถูกต้องเมื่อเปลี่ยนอาร์กิวเมนต์ของ Back Stack และใช้ 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 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.4.0-alpha06

4 สิงหาคม 2021

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.4.0-alpha06 เวอร์ชัน 2.4.0-alpha06 มีคอมมิตเหล่านี้

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

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

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

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

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

  • การป๊อปปลายทางสุดท้ายของกราฟการนำทางจะไม่ทำให้เกิด ClassCastException อีกต่อไป (If0543, b/172112072, b/194301889)
  • แก้ไขNullPointerExceptionที่อาจเกิดขึ้นเมื่อเพิ่ม Deep Link โดยไม่มี Uri และไปยังส่วนต่างๆ ผ่านเส้นทางหรือ Deep Link (938a0c, b/193805425)
  • แก้ไขปัญหาใน Navigation Compose ที่ NavBackStackEntry ที่ทำ Deep Link จะไม่เข้าสู่สถานะ 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 ของ Navigation Compose จะใช้การเปลี่ยนฉากแบบครอสเฟดเสมอเมื่อไปยังส่วนต่างๆ ของปลายทาง (I07049, b/172112072)
  • ตอนนี้คุณสามารถทำการเปลี่ยนแปลงกราฟของ NavHost ได้แล้ว กราฟที่มี startDestination และปลายทางเดียวกันในกราฟจะถือว่าเท่ากันและจะไม่ล้างNavController Back Stack (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 ใหม่แล้ว Fragment นี้ใช้ 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 หรืออาร์ติแฟกต์ใดๆ ที่ขึ้นอยู่กับ by navArgs() (I68800, b/190082521)
  • OnDestinationChangedListener ที่เรียกใช้ navigate() เป็นครั้งแรกที่ได้รับ Callback จะได้รับ Callback ครั้งที่ 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

  • Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อพยายามสร้างพร็อพเพอร์ตี้ การนำทางใน Kotlin (Id2416, 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 มีหน้าที่จัดการ Back Stack ของปลายทาง เพิ่มปลายทางไปยัง Back Stack เมื่อคุณnavigate()ไปยังปลายทางนั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack() หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions ที่มีอยู่และการผสานรวมกับรายการ <action> ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและกู้คืนสแต็กย้อนกลับ (b/80029773)

การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI ของ onNavDestinationSelected(), BottomNavigationView.setupWithNavController() และ NavigationView.setupWithNavController() บันทึกและกู้คืนสถานะของปลายทางที่ป๊อปอัปโดยอัตโนมัติ ซึ่งช่วยให้รองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางกับ Fragment นี่คือวิธีที่แนะนำในการผสานรวมกับ Back Stack หลายรายการ (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 Builder ได้

    // 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 ใน Navigation Compose และ FragmentNavigator กับ DynamicFragmentNavigator ที่ใช้สำหรับปลายทาง <fragment> ในการนำทางด้วย Fragment เพื่อให้ใช้ Navigator API ใหม่ รวมถึงรองรับการบันทึกและกู้คืนสถานะ

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

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

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

ซึ่งส่งผลต่อ API ดังนี้

  • เราได้เลิกใช้งานพร็อพเพอร์ตี้ popUpTo kotlin ใน Kotlin DSL แล้วเพื่อใช้ popUpToId แทน (I59c73, b/172823546)
  • เราได้เลิกใช้งาน getStartDestination() API แล้วเพื่อหันไปใช้ getStartDestinationId() แทน (I0887f, b/172823546)

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

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

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

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

  • อาร์ติแฟกต์การนำทางทั้งหมดได้รับการเขียนใหม่ใน Kotlin ซึ่งช่วยปรับปรุงความสามารถในการกำหนดค่า Null ของคลาสที่ใช้ Generics (เช่น คลาสย่อย 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

  • ตอนนี้ 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)

ความเข้ากันได้ของ Compose

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

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

  • แก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายที่ตรงกัน (#153, b/184072811)
  • NavHostFragment รองรับ Custom Navigators ที่ใช้ @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 ซึ่งส่งต่อไปยัง คอนเทนเนอร์ที่ประกอบกันได้ซึ่งรวมคอมโพสابلปลายทาง (I85aca, b/175125483)

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

  • NavHost ใช้งานได้แล้ว แม้ว่าจะไม่พบ OnBackPressedDispatcherOwner เช่น ในกรณีที่ดูตัวอย่าง NavHost (I7d8b4)
  • ตอนนี้ Navigation Compose ขึ้นอยู่กับ Navigation 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 ที่อนุญาตให้เป็น Null ได้ เพื่อให้ระบุได้ดียิ่งขึ้นว่ามี ViewModelStoreOwner ในองค์ประกอบปัจจุบันหรือไม่ API ที่ต้องใช้ ViewModelStoreOwner เช่น viewModel() และ NavHost จะยังคงแสดงข้อยกเว้น หากไม่ได้ตั้งค่า ViewModelStoreOwner (Idf39a)

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

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

เวอร์ชัน 1.0.0-alpha08

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-compose:1.0.0-alpha08 เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

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

เวอร์ชัน 1.0.0-alpha07

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-compose:1.0.0-alpha07 เวอร์ชัน 1.0.0-alpha07 มีคอมมิตต่อไปนี้

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

  • ตอนนี้ Navigation Compose ขึ้นอยู่กับ 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

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

เวอร์ชัน 1.0.0-alpha01

28 ตุลาคม 2020

ระบบจะถอนการอ้างสิทธิ์android.navigation:navigation-compose:1.0.0-alpha01 เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

ดูข้อมูลเพิ่มเติมได้ที่คู่มือการนำทางด้วย Compose

เวอร์ชัน 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 ซึ่งเป็นการจำลองฟังก์ชันการทำงานที่มีอยู่แล้วสำหรับการลิงก์โดยตรงภายนอก (I975c3, b/181521877)

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

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

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

  • ตอนนี้ปลั๊กอิน Gradle ของ Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Kotlin Gradle 1.4.31 แล้ว (aosp/1661058, b/181156413)

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ bentrengrove สำหรับคำขอ Pull ที่ทำให้การแยกวิเคราะห์โดเมน 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)

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

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

การมีส่วนร่วมภายนอก

  • ขอขอบคุณ JvmName สำหรับคำขอ Pull เพื่อให้มั่นใจว่าตอนนี้ระบบจะแยกวิเคราะห์อาร์กิวเมนต์ ReferenceType ได้อย่างถูกต้องเมื่อส่งเป็นส่วนหนึ่งของ URI ของ Deep Link (#127, b/179166693)
  • ขอขอบคุณ tatocaster สำหรับคำขอ Pull เพื่ออนุญาตให้ 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)
  • แก้ไขปัญหาที่การไปยังกราฟการนำทางที่ซ้อนกันจะไม่สร้างอินสแตนซ์กราฟใหม่ใน Back Stack (Ifc831)
  • แก้ไขปัญหาที่การใช้ navigate() กับ popUpTo ที่นำปลายทางสุดท้ายในกราฟการนำทางออกจะไม่ทำลายและนำกราฟการนำทางออกจากสแต็กย้อนกลับทันที (I910a3)
  • ตอนนี้ Navigation SafeArgs ใช้ KotlinPoet เวอร์ชัน 1.7.2 ซึ่งเพิ่มการรองรับโหมด API ที่ชัดเจนของ Kotlin (I918b5)
  • NavHostFragment.findNavController(Fragment) ยังตรวจสอบมุมมองการตกแต่งรูทของ DialogFragment นอกเหนือจากการตรวจสอบลำดับชั้นของ Fragment และลำดับชั้นของมุมมองของ Fragment ที่มีอยู่ด้วย ซึ่งจะช่วยให้คุณทดสอบ DialogFragment ที่ใช้ Navigation ด้วย FragmentScenario และ Navigation.setViewNavController() ได้ (I69e0d)

เวอร์ชัน 2.3.1

เวอร์ชัน 2.3.1

14 ตุลาคม 2020

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.3.1 เวอร์ชัน 2.3.1 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 2.3.0

เวอร์ชัน 2.3.0

24 มิถุนายน 2020

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.3.0 เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้

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

  • การผสานรวมโมดูลฟีเจอร์: อาร์ติแฟกต์ navigation-dynamic-features-runtime และ navigation-dynamic-features-fragment ช่วยให้คุณไปยังปลายทางที่กำหนดไว้ในโมดูลฟีเจอร์ได้ โดยระบบจะจัดการการติดตั้งโมดูลฟีเจอร์โดยอัตโนมัติตามต้องการ ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ ด้วยโมดูลฟีเจอร์
  • การทดสอบการนำทาง: อาร์ติแฟกต์ navigation-testing มี TestNavHostController ที่ช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กย้อนกลับหลังจากการดำเนินการนำทางได้ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบการนำทาง
  • การแสดงผลลัพธ์: NavBackStackEntry ที่เชื่อมโยงกับปลายทางแต่ละแห่งใน Back Stack ของการนำทางจะช่วยให้คุณเข้าถึง SavedStateHandle ที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการ Back Stack ที่เฉพาะเจาะจงได้ ดูข้อมูลเพิ่มเติมได้ที่การแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า
  • 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

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

  • Manifest Merger ยังไม่รองรับการดำเนินการ Deep Link และประเภท MIME จนกว่าจะดำเนินการเสร็จสมบูรณ์ <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 มีคอมมิตเหล่านี้)

ฟีเจอร์ใหม่

  • เราได้ขยายการลิงก์ในรายละเอียดเพื่อรองรับ 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 ของ Navigation Graph จะแสดง defaultArguments Map สำหรับการดำเนินการ ซึ่งเป็นการจำลองความสามารถในการตั้งค่าเริ่มต้นในองค์ประกอบ <action> ในไฟล์ XML ของการนำทาง (b/150345605)

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

  • จาก Navigation 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

เวอร์ชัน 2.3.0-alpha03

4 มีนาคม 2020

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.3.0-alpha03 เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้

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

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

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

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

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

  • การนำทางได้เปลี่ยนกลับไปใช้ Core 1.2.0 และตอนนี้ใช้ Core 1.1.0 เพื่อหลีกเลี่ยงการบังคับให้นักพัฒนาแอปย้ายไปใช้การอ้างอิงที่ใหม่กว่าเมื่อการนำทางไม่ได้ขึ้นอยู่กับ API ใหม่ใน Core 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)

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

  • ตอนนี้การนำทางจะขึ้นอยู่กับ Core 1.2.0

เวอร์ชัน 2.3.0-alpha01

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.3.0-alpha01 เวอร์ชัน 2.3.0-alpha01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

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

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

  • จากการนำทาง 2.2.1: ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้องแทนที่จะต่อท้ายองค์ประกอบ {argument} หรือไม่ตรงกับ Deep Link (b/147447512)
  • จากการนำทาง 2.2.1: เราได้อัปเดตnavigation-ui กฎ ProGuard สำหรับ 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=””) และตอนนี้จะตั้งค่าชื่อเป็นสตริงว่างอย่างถูกต้อง ฟีเจอร์นี้ได้รับการเผยแพร่ก่อนหน้านี้ใน Navigation 2.3.0-alpha04 (b/148679860)
  • navigation-common-ktx กฎ ProGuard จะเก็บเฉพาะNavArgsคลาสที่ใช้เท่านั้น ไม่ใช่NavArgsอินสแตนซ์ทั้งหมด ฟีเจอร์นี้เปิดตัวไปแล้วใน Navigation 2.3.0-alpha03 (b/150213558

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

เวอร์ชัน 2.2.1

เวอร์ชัน 2.2.1

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

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.2.1 เวอร์ชัน 2.2.1 มีคอมมิตเหล่านี้

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

  • ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้องแทนที่จะต่อท้ายองค์ประกอบ {argument} หรือไม่ตรงกับ Deep Link (b/147447512)
  • เราได้อัปเดตnavigation-uiกฎ ProGuard สำหรับ 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() ได้แล้วโดยส่งรหัสของปลายทางหรือกราฟการนำทางใน Back Stack NavBackStackEntry ที่ส่งคืนจะให้ LifecycleOwner ที่ขับเคลื่อนด้วยการนำทาง ViewModelStoreOwner (เหมือนกับที่ NavController.getViewModelStoreOwner() ส่งคืน) และ SavedStateRegistryOwner นอกเหนือจากการระบุอาร์กิวเมนต์ที่ใช้ในการเริ่มต้นปลายทางนั้น
  • การผสานรวม Lifecycle ViewModel SavedState: ตอนนี้ SavedStateViewModelFactory เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้ by navGraphViewModels() หรือตัวสร้าง ViewModelProvider ที่มี ViewModelStoreOwner ซึ่ง NavController.getBackStackEntry() หรือ NavController.getViewModelStoreOwner() ส่งคืน
  • การรองรับพารามิเตอร์การค้นหาสำหรับ Deep Link: ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่จัดลำดับใหม่แล้ว และอาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็น Null ได้จะกลายเป็นอาร์กิวเมนต์ที่ไม่บังคับเมื่อจับคู่ Deep Link
  • การรองรับภาพเคลื่อนไหวที่ดียิ่งขึ้น: NavHostFragment ตอนนี้ใช้ FragmentContainerView จาก Fragment 1.2.0 แล้ว ซึ่งจะช่วยแก้ไขปัญหาการจัดลำดับ z ของภาพเคลื่อนไหวและการส่งการแทรกในหน้าต่างไปยัง Fragment

เวอร์ชัน 2.2.0-rc04

18 ธันวาคม 2019

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.2.0-rc04 เวอร์ชัน 2.2.0-rc04 มีคอมมิตเหล่านี้

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

  • ปรับภาพเคลื่อนไหวเลือนเริ่มต้นที่ใช้โดย navigation-ui ให้ตรงกับภาพเคลื่อนไหวเลือนที่ปรับใน 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)

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

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

เวอร์ชัน 2.2.0-rc02

7 พฤศจิกายน 2019

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.2.0-rc02 เวอร์ชัน 2.2.0-rc02 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 2.2.0-rc01

23 ตุลาคม 2019

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

เวอร์ชัน 2.2.0-beta01

9 ตุลาคม 2019

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.2.0-beta01 เวอร์ชัน 2.2.0-beta01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

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

  • แก้ไขปัญหาที่ระบบจะไม่สนใจอาร์กิวเมนต์ในเส้นทางของ Deep Link หากมีการระบุพารามิเตอร์การค้นหาด้วย (b/141505755)
  • navArgs()ส่วนขยาย Kotlin ใน Activity มีข้อความแสดงข้อผิดพลาดที่ดีขึ้นแล้วในกรณีที่ไม่มีส่วนเสริม (b/141408999)
  • ตอนนี้อาร์กิวเมนต์ที่ปลอดภัยซึ่งสร้างคลาส Directions Java จะมีค่าเริ่มต้น (b/141099045)
  • ตอนนี้อาร์กิวเมนต์ที่ปลอดภัยซึ่งสร้างคลาส Args Java จะมีค่าเริ่มต้น (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 ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่จัดเรียงใหม่แล้ว และอาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็น Null ได้จะถือเป็นอาร์กิวเมนต์ที่ไม่บังคับเมื่อจับคู่ Deep Link (b/133273839)
  • ตอนนี้คุณสามารถเรียกใช้ NavController.getBackStackEntry() ได้แล้วโดยส่งรหัสของปลายทางหรือกราฟการนำทางใน Back Stack 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

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

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

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

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

5 กันยายน 2019

ระบบจะถอนการอ้างสิทธิ์androidx.navigation:navigation-*:2.1.0 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • การกำหนดขอบเขต ViewModel ให้กับกราฟการนำทาง: ตอนนี้คุณสามารถสร้าง ViewModel ที่กำหนดขอบเขตที่ระดับกราฟการนำทางได้โดยใช้พร็อพเพอร์ตี้ Delegate by navGraphViewModels() สำหรับผู้ใช้ Kotlin ที่ใช้ไลบรารี -ktx หรือโดยใช้ API getViewModelStoreOwner() ที่เพิ่มลงใน 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

  • ระบบได้นำ getViewModelStore() API ที่เลิกใช้งานแล้วใน 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 ซึ่งจะแก้ไขการกะพริบของภาพ (b/130362979)
  • แก้ไขข้อบกพร่องที่ทำให้สแต็กย้อนกลับของการนำทางไม่ซิงค์เมื่อป๊อป Fragment ขณะที่ระบบกำลังเพิ่ม 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 จะทำงานอย่างถูกต้องเมื่อสกัดกั้นเหตุการณ์ปุ่มย้อนกลับของระบบ ซึ่งแก้ไขการถดถอยในการนำทาง 2.1.0-alpha03app:defaultNavHost 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 มิลลิวินาทีเพื่อให้ตรงกับความเร็วของภาพเคลื่อนไหวเริ่มต้นของกิจกรรมและ Fragment b/130055522

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

  • เราได้เลิกใช้งานcreateFragmentNavigator()เมธอดของ NavHostFragment แล้ว และย้ายฟังก์ชันการทำงานไปยังเมธอด onCreateNavController() ใหม่เพื่อให้ชัดเจนยิ่งขึ้นว่านี่คือจุดแรกเข้าที่ถูกต้องในการเพิ่ม Navigator ที่กำหนดเองเมื่อสร้างคลาสย่อยของ 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 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 2.1.0-alpha01

19 มีนาคม 2019

นี่คือรุ่นอัลฟ่าแรกของ Navigation 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)เมธอดใหม่ เพื่อเป็นทางเลือกแทนการสร้างเครื่องมือฟังการคลิกด้วย รหัสทรัพยากรและ Bundle b/127631752
  • FragmentNavigator.instantiateFragment เลิกใช้งานแล้ว ตอนนี้การใช้งานเริ่มต้น ใช้ FragmentFactory เพื่อสร้างอินสแตนซ์ของ Fragment b/119054429

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

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

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

14 มีนาคม 2019

การนำทาง 2.0.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc02

เวอร์ชัน 2.0.0-rc02

6 มีนาคม 2019

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

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

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

การอ้างอิงก่อน AndroidX

สำหรับ Navigation เวอร์ชันก่อน 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
}

สำหรับ Safe args ให้เพิ่ม classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

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

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0

14 มีนาคม 2019

การนำทาง 1.0.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-rc02

เวอร์ชัน 1.0.0-rc02

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

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

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

  • แก้ไขปัญหาที่ระบบจะละเว้น 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

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

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

  • แก้ไขปัญหาเมื่อใช้ Fragment และการดำเนินการนำทาง 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
  • คลาส NavArgs ที่สร้างขึ้นโดย Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อกู้คืนอาร์กิวเมนต์ Parcelable[] จากสถานะอินสแตนซ์ที่บันทึกไว้ b/123963545
  • ตอนนี้ Safe Args จะล้างคลาส Kotlin ที่สร้างขึ้นโดยไม่จำเป็นได้อย่างถูกต้อง b/124120883

เวอร์ชัน 1.0.0-beta01

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

นี่คือเวอร์ชันเบต้าแรกของ Navigation ในอนาคตคาดว่า Navigation 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 กับการปิดบัง 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 นำเข้าคลาส Directions ที่เชื่อมโยงกับการดำเนินการส่วนกลางไม่สำเร็จ b/123307342

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

  • NavDeepLinkBuilder ตอนนี้จะจัดการ PendingIntent หลายรายการพร้อมกันไปยังปลายทางเดียวกันได้อย่างถูกต้องโดยใช้อาร์กิวเมนต์ที่คุณส่ง เพื่อพิจารณาความไม่ซ้ำกัน b/120042732
  • ตอนนี้ NavController จัดการการดำเนินการ popBackStack() อย่างถูกต้องเมื่อ ใช้ NavHostFragment ที่ซ้อนกันหรือ Fragment อื่นๆ ที่เป็นส่วนย่อยที่มี Back Stack b/122770335
  • NavigationUI ตอนนี้ได้ตั้งค่าคำอธิบายเนื้อหาของปุ่มขึ้นอย่างถูกต้องแล้ว b/120395362
  • ตอนนี้คลาส Directions ที่สร้างโดย Safe Args จะจัดการการทำงานส่วนกลาง ที่มีรหัสเดียวกันกับการทำงานในปลายทางได้อย่างถูกต้อง b/122962504
  • ตอนนี้คลาส NavDirections ที่สร้างโดย Safe Args มีค่าเท่ากัน 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() ที่ถูกต้อง เราได้อธิบายแนวทางนี้อย่างละเอียดในการพูดคุยเรื่อง Single Activity ที่ AndroidDevSummit 2018 และจะจัดทำเอกสารเพิ่มเติมเกี่ยวกับการทดสอบด้วย Navigation โดยเฉพาะ

ฟีเจอร์ใหม่

  • 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 ที่ไม่ใช่ Null แทน Bundle ที่เป็น Null ได้ 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
  • ตอนนี้การนำทางขึ้นอยู่กับ Support Library 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

  • 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 มากขึ้น แต่คุณยังคงใช้ API นี้กับเทสต์ที่เขียนด้วย Java ได้
  • ระบบจะไม่รองรับกราฟการนำทางที่ลงทะเบียนไว้ในไฟล์ Manifest ของข้อมูลเมตาอีกต่อไป b/118355937
  • แนบการดำเนินการกับปลายทาง <activity> ไม่ได้อีกต่อไป aosp/785539

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

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

Safe Args

  • ตอนนี้ Safe Args มีทรัพยากร Dependency ที่แก้ไขแล้วในปลั๊กอิน 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
  • ตอนนี้ Navigator onSaveState() จะเรียกใช้เพียงครั้งเดียวเท่านั้น b/112627079

Safe Args

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

เวอร์ชัน 1.0.0-alpha05

10 สิงหาคม 2018

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

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

เวอร์ชัน 1.0.0-alpha04

19 กรกฎาคม 2018

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

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

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

Safe Args

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

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

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

เวอร์ชัน 1.0.0-alpha03

12 กรกฎาคม 2018

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

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

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

Safe Args

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

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

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

เวอร์ชัน 1.0.0-alpha02

7 มิถุนายน 2018

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

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

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

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

  • แก้ไข IllegalStateException เมื่อเรียกใช้การนำทางจากเมธอดวงจรของ Fragment b/79632233

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

  • แก้ไข IllegalArgumentException เมื่อใช้ defaultNavHost="true" เป็น Fragment ย่อย 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