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

การนำทางคือเฟรมเวิร์กสำหรับการไปยังส่วนต่างๆ ภายใน "ปลายทาง" ของแอปพลิเคชัน Android ซึ่งให้บริการ API ที่สอดคล้องกันไม่ว่าจะติดตั้งใช้งานปลายทางเป็นฟragment, กิจกรรม หรือคอมโพเนนต์อื่นๆ
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
13 พฤศจิกายน 2024 2.8.4 - - 2.9.0-alpha03

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

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

เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ 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.8.4"

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

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

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

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

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

Kotlin

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

dependencies {
  val nav_version = "2.8.4"

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

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

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

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

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

Safe Args

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

Groovy

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

Kotlin

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

นอกจากนี้ คุณยังต้องใช้ปลั๊กอิน 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.0-alpha03

13 พฤศจิกายน 2024

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

ฟีเจอร์ใหม่

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

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

  • แก้ไข ConcurrentModificationException ที่อาจเกิดขึ้นเมื่อ LifecycleObserver ที่แนบอยู่กับ NavBackStackEntry ทริกเกอร์การเปลี่ยนแปลงสแต็กด้านหลังเมื่อ LifecycleOwner โฮสต์ เช่น กิจกรรมหรือ Fregment ที่มีการเปลี่ยนแปลงสถานะวงจรชีวิตของ LifecycleOwner (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 กับปลั๊กอิน Gradle ของ Android เวอร์ชัน 8.4 ขึ้นไป (b/368070326, b/371463741)

เวอร์ชัน 2.8

เวอร์ชัน 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 16 (AGP 8.7) ขึ้นไป (b/371926651)

เวอร์ชัน 2.8.2

2 ตุลาคม 2024

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

ฟีเจอร์ใหม่

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

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

  • ปรับปรุงข้อความแสดงข้อผิดพลาดเมื่อการนําทางแมปอาร์กิวเมนต์ของเส้นทางกับ 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)

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

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

อัปเดตทรัพยากร Dependency

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

เวอร์ชัน 2.8.0

4 กันยายน 2024

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

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

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

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

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

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

ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์เกี่ยวกับความปลอดภัยของประเภทการเขียนโปรแกรม Navigation Compose Meet

การนําทาง เขียนการคาดคะเนกลับ

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

คอมโพสิชันสำหรับส่วนย่อยการนำทาง

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

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

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

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

เวอร์ชัน 2.8.0-rc01

21 สิงหาคม 2024

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

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

  • แก้ไขข้อขัดข้องในการนําทางเมื่อส่งคลาส Enum ระดับบนสุดเป็นอาร์กิวเมนต์ที่ปลอดภัยตามประเภท (I0ba76, b/358137294)
  • ตอนนี้ 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 ระบบจะรองรับเฉพาะ Enums ที่ฝังอยู่ในคลาสอื่นโดยค่าเริ่มต้น ระบบจะรองรับ Enums ระดับบนสุดในรุ่นถัดไป

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

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

เวอร์ชัน 2.8.0-beta06

24 กรกฎาคม 2024

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

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

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

เวอร์ชัน 2.8.0-beta05

10 กรกฎาคม 2024

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

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

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

เวอร์ชัน 2.8.0-beta04

26 มิถุนายน 2024

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

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

  • ตอนนี้การนําทางรองรับการไปยังส่วนต่างๆ ด้วยสตริงว่างในอาร์กิวเมนต์เส้นทางแล้ว (Ic5dbd, b/339481310)
  • ปรับปรุงข้อความแสดงข้อผิดพลาดสำหรับ Serializer ที่กําหนดเองซึ่งประกาศในช่องคลาสโดยตรงผ่าน @Serializable(with =...) เพื่อชี้แจงว่าฟีเจอร์นี้ยังไม่รองรับในขณะนี้ (I052b0, b/341319151)
  • ตอนนี้ SavedStateHandleFactory test api สามารถใช้กับการทดสอบที่ไม่ใช่ Android ได้ แต่จะต้องให้ Robolectric รองรับการแยกวิเคราะห์อาร์กิวเมนต์ด้วย Bundle (I76cdc, b/340966212)
  • แก้ไขข้อขัดข้องจากการกู้คืนสถานะเมื่อกลับมาเปิดแอปอีกครั้งหลังจากกระบวนการสิ้นสุดลงด้วยการใช้การนําทางที่ปลอดภัยตามประเภทใน Compose (Ia8f38, b/341801005)
  • แก้ไขปัญหาใน Navigation Compose ที่หลังจากยกเลิกท่าทางสัมผัสเพื่อกลับโดยประมาณแล้ว NavBackStackEntry ที่ผู้ใช้กลับไปจะไม่กลับไปที่สถานะวงจร RESUMED วิธีนี้ยังช่วยให้ปลายทางที่กลับมาแสดงภาพเคลื่อนไหวอย่างถูกต้องแทนที่จะกระโดดกลับเข้าที่หลังจากการฟลิง (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)
  • แก้ไขปัญหาการคืนค่าสถานะกองซ้อนของการนำทางย้อนกลับซึ่งเกิดขึ้นเมื่อพยายามกู้คืนรายการกองซ้อนของการนำทางย้อนกลับที่เข้าถึงไม่ได้ผ่านรหัสจากปลายทางปัจจุบัน เนื่องจากเส้นทางมีรหัสรองรับ ปลายทางที่สร้างด้วยเส้นทางจึงได้รับผลกระทบด้วย การอัปเดตนี้ยังแก้ไขข้อขัดข้องที่เกิดจากการเรียกใช้ 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 Serializable (Id4867, b/339080702)

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

  • เพิ่มเอกสารพารามิเตอร์ที่ขาดหายไปสำหรับฟังก์ชัน 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

ฟีเจอร์ใหม่

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

เวอร์ชัน 2.8.0-alpha07

17 เมษายน 2024

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

ฟีเจอร์ใหม่

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

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

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

  • รองรับ Safe Args ใน Navigation Compose โดยใช้แนวทางที่อิงตามการแปลงข้อมูลโค้ด Kotlin 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 แล้ว 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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

  • เพิ่มคลาส CollectionNavType<T> นามธรรมใหม่ ซึ่งเป็นคลาสย่อยของ NavType<T> สำหรับอาร์กิวเมนต์ที่อิงตามคอลเล็กชัน เช่น รายการ อาร์เรย์ แผนที่ (Ic6d63, b/188693139)
  • ตอนนี้อาร์เรย์ NavType เริ่มต้นทั้งหมด (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType และ StringArrayType) เป็นประเภท CollectionNavType (Idcf79, b/188693139)
  • ตอนนี้ NavType มี valueEquals API แบบเปิดใหม่ซึ่งจะระบุว่าค่า 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 ได้แล้วโดยกำหนด SizeTranform เป็นส่วนหนึ่งของการเริ่มต้นใช้งานสำหรับฟังก์ชัน composable และ/หรือ navigation (I91062, b/296912651)

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

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

เวอร์ชัน 2.8.0-alpha03

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

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

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

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

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

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

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 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)

อัปเดตทรัพยากร Dependency

  • ตอนนี้การคอมโพสิชันการนำทางจะขึ้นอยู่กับ การคอมโพสิชัน 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 มีคอมมิตเหล่านี้

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

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

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

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

เวอร์ชัน 2.7.6

เวอร์ชัน 2.7.6

13 ธันวาคม 2023

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

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

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

เวอร์ชัน 2.7.5

เวอร์ชัน 2.7.5

1 พฤศจิกายน 2023

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

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

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

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

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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้การนำทางด้วย FRGMENTS จะขึ้นอยู่กับ Fragment 1.6.2 ซึ่งจะแก้ไขปัญหาที่ระบบจะไม่ล้างอินสแตนซ์ ViewModel ของ FRGMENTS ที่ฝังอยู่เมื่อเรียกใช้ 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)
  • แก้ไขปัญหาที่การกดแป้น Back ของระบบทําให้ currentDestination ไม่อัปเดตอย่างถูกต้องเพื่อให้ตรงกับส่วนที่แสดง (Id0d6c, b/289877514)
  • ตอนนี้วงจรชีวิตของ DialogFragment จะเปลี่ยนเป็นสถานะ RESUMED อย่างถูกต้องเมื่อปิดกล่องโต้ตอบด้านบน (I88f0d, b/301811387)

เวอร์ชัน 2.7.3

เวอร์ชัน 2.7.3

20 กันยายน 2023

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

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

  • แก้ไขปัญหาในการนําทางด้วย FRGMENTS ซึ่งทําให้รายการ visibleEntries มีรายการที่ไม่ถูกต้อง (I5caa9, b/288520638)
  • แก้ไขปัญหาที่ทำให้ปลายทางหน้าต่างลอย (เช่น Dialogs, Bottomsheets ฯลฯ) ไม่ได้รับ RESUMED Lifecycle Callback (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 แทนที่จะย้ายไปยัง RESUMED อย่างถูกต้อง (aosp/2629401, b/286371387)
  • Navigation Safe Args จะไม่สร้างอินสแตนซ์ของงานอย่างกระตือรือร้นอีกต่อไปหากไม่ได้ใช้งานจริง (I0e385, b/260322841)

อัปเดตทรัพยากร Dependency

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

เวอร์ชัน 2.7.1

เวอร์ชัน 2.7.1

23 สิงหาคม 2023

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

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

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

เวอร์ชัน 2.7.0

เวอร์ชัน 2.7.0

9 สิงหาคม 2023

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

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

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

ตอนนี้ AnimatedContent ทำงานได้อย่างเสถียรแล้ว เราจึงย้ายโค้ดจากภาพเคลื่อนไหวการนำทางของ Accompanist กลับไปยัง Navigation Compose ได้

ซึ่งหมายความว่า NavHost รองรับการตั้งค่าทรานซิชันที่กำหนดเองทั้งหมดที่มีอยู่ใน AnimatedNavHost

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

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

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

การอัปเดตทรัพยากร Dependency

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

เวอร์ชัน 2.7.0-rc01

26 กรกฎาคม 2023

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

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

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

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

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

เวอร์ชัน 2.7.0-beta02

28 มิถุนายน 2023

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

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

  • ตอนนี้การคอมไพล์การนำทางมีลําดับ 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 Compose ได้

ซึ่งหมายความว่า NavHost รองรับการตั้งค่าทรานซิชันที่กำหนดเองทั้งหมดที่มีใน AnimatedNavHost

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

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

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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้การไปยังส่วนต่างๆ จะขึ้นอยู่กับการเขียน 1.5.0-beta01

เวอร์ชัน 2.6.0

เวอร์ชัน 2.6.0

7 มิถุนายน 2023

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

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

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

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

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

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

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

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

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

เวอร์ชัน 2.6.0-rc01

10 พฤษภาคม 2023

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

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

  • แก้ไขปัญหาในการนําทางด้วยแฟรกเมนต์ที่การนําแฟรกเมนต์ออกผ่านการนําทางด้วย popUpTo ใน onResume() lifecycle callback จะทําให้เกิด IllegalStateException (I21884, b/279644470)

เวอร์ชัน 2.6.0-beta01

19 เมษายน 2023

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

ฟีเจอร์ใหม่

  • ขณะนี้ NavBackStackEntry มีการใช้งาน toString ที่กําหนดเอง (Iff00b)

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

  • เมื่อใช้การนําทางด้วย Fragments การพยายามทำ FragmentTransaction ด้วยตนเองซึ่งเพิ่ม Fragment ลงในกองซ้อนที่ย้อนกลับของ FragmentManager จะทำให้เกิด IllegalArgumentException คุณควรเพิ่มข้อมูลโค้ดผ่าน 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 ที่ไม่อนุญาตให้เป็นค่า Null เส้นทางของปลายทางนี้ต้องมีตัวยึดตําแหน่งสำหรับ args ที่มีชื่อเหมือนกับ NavArgument ที่ไม่อนุญาตให้เป็นค่า Null (Ic62bf, b/274697949)
  • ตอนนี้การนำทางด้วย Deep Link ตาม Action/MimeType จะดำเนินการไม่สำเร็จหากการดำเนินการนำทางไม่มี NavArgument ที่ไม่ใช่ค่า Null ซึ่ง 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 เมื่อแสดงกราฟที่ซ้อนกันซึ่งมีอาร์กิวเมนต์ที่ไม่ใช่ Null (6b3581, b/249988437)
  • เมื่อใช้แป้นย้อนกลับของระบบหลังจากไปยังส่วนต่างๆ ด้วย popUpTo สถานะของ NavController จะปรากฏขึ้นที่รายการที่ถูกต้อง (I3a8ec, b/270447657)
  • ตอนนี้ FragmentNavigator จะแสดงรายการอย่างถูกต้องเมื่อระบบแสดงรายการสแต็กย้อนกลับผ่านปุ่มย้อนกลับของระบบหรือ popBackStack() และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับข้อมูลโค้ดโค้ดหรือไม่ (I81bdf)
  • การเพิ่มข้อมูลโค้ดไปยัง FragmentNavigator's FragmentManager โดยไม่ใช้การนําทางจะไม่ทําให้เกิดความขัดข้องอีกต่อไป (b17204, b/274167493)

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 2.6.0-alpha07

8 มีนาคม 2023

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

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

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

เวอร์ชัน 2.6.0-alpha06

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

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

  • เมื่อใช้การนําทางด้วย Fregment วงจรชีวิตของ NavBackStackEntry ไม่สามารถเข้าถึง RESUMED ได้เมื่อใช้ Animation API (b/269646882)
  • เมื่อใช้การนําทางด้วย Fragments และไปยังส่วนต่างๆ ด้วย BottomNavigation หากคุณพยายามกู้คืนกองซ้อนที่ย้อนกลับซึ่งมีหลายรายการ BottomMenuItem จะอัปเดตอย่างไม่ถูกต้อง (b/270447657)
  • เมื่อใช้การนําทางด้วย Fragments หลังจากกู้คืนสถานะแล้ว 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 จะรอให้เอฟเฟกต์พิเศษของการเข้าและออกของเศษเสร็จสมบูรณ์ก่อนย้าย 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 ของ launchSingleTop นั้นๆ ไว้ที่ด้านบนของกองซ้อนที่ซ้อนกัน (Id4bea, b/253256629)
  • ตอนนี้การนำทางจะแทนที่อินสแตนซ์ DialogFragment อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันโดยตั้งค่า Flag launchSingleTop เป็น "จริง" (I45b5a, b/149572817)
  • SafeArgs ของการนำทางจะไม่ทำให้เกิดข้อผิดพลาดในการคอมไพล์อีกต่อไปเมื่อใช้อาร์กิวเมนต์ที่มีความยาว 19 อักขระพอดี (Id60bc, b/257110095)

เวอร์ชัน 2.6.0-alpha04

9 พฤศจิกายน 2022

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

ฟีเจอร์ใหม่

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

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

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

อัปเดตทรัพยากร Dependency

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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้การนําทางจะขึ้นอยู่กับเศษ 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 ขึ้นอยู่กับเวอร์ชันของส่วนย่อย 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, action และ/หรือ mimetype จึงจะใช้งานได้ (I08d2f, b/154038883)

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

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

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

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

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

  • จากการนําทาง 2.5.2: ตอนนี้การนําทางแบบไดนามิกจะพยายามติดตั้งปลายทางของกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางเหล่านั้น (Ia2c16, b/240292838)
  • จากการนําทาง 2.5.2: ตอนนี้การนําทางจะแทนที่อินสแตนซ์ของ FRG อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันและตั้งค่า Flag 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)
  • ตอนนี้การนำทางจะแทนที่อินสแตนซ์ของ Fregment อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันและตั้งค่า Flag launchSingleTop เป็น "จริง" (I5a2f1, b/237374580)
  • แก้ไข IllegalStateException ที่เกิดจากการไปยังกราฟที่ฝังซ้อนกัน 2 ชั้นซึ่งแชร์รายการหลักกับปลายทางเริ่มต้นใหม่ที่ปรากฏขึ้น (I9f7cb, b/243778589)

อัปเดตทรัพยากร Dependency

เวอร์ชัน 2.5.1

27 กรกฎาคม 2022

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

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

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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้ไลบรารีการนําทางจะขึ้นอยู่กับ Lifecycle 2.5.1 (Ib4451)
  • ตอนนี้ไลบรารีการนำทางจะขึ้นอยู่กับกิจกรรม 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 แบบไม่มีสถานะผ่าน CreationExtras ของ Lifecycle 2.5.0 แล้ว

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

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

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

เวอร์ชัน 2.5.0-rc01

11 พฤษภาคม 2022

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 2.5.0-beta01

20 เมษายน 2022

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

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

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

การอัปเดตทรัพยากร Dependency

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

เวอร์ชัน 2.5.0-alpha04

6 เมษายน 2022

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

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

  • visibleEntries ไม่ได้อยู่ในช่วงทดลองแล้ว (I4829f, b/225394514)

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

  • ตอนนี้ NavHost ขึ้นอยู่กับ visibleEntries จาก NavController เพื่อกำหนดรายการที่จะคอมไพล์ ซึ่งหมายความว่าเมื่อใช้ NavHost ที่ฝังอยู่ NavHost ภายในควรแสดงภาพเคลื่อนไหวออกอย่างถูกต้อง (I4ba2b, b/225394514)
  • ตอนนี้ visibleEntries StateFlow ที่ NavController ระบุจะอิงตามสถานะวงจรของลูกค้าสูงสุดของรายการแทนสถานะวงจรของลูกค้าปัจจุบัน ซึ่งหมายความว่าแม้ว่าวงจรของโฮสต์ navController จะต่ำกว่า "เริ่มต้น" รายการที่มองเห็นได้จะยังคงเหมือนเดิม (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)
  • ตอนนี้ Args ที่ปลอดภัยสําหรับการนําทางรองรับการใช้เนมสเปซที่กําหนดใน build.gradle แทนแพ็กเกจใน AndroidManifest แล้ว (I659ef, b/217414933)

เวอร์ชัน 2.5.0-alpha02

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

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

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

  • จากการนําทาง 2.4.1: ตอนนี้ NavHostFragment จะตั้งค่า OnBackPressedDispatcher อย่างถูกต้องเมื่อใช้การเชื่อมโยงข้อมูลกับกราฟที่ฝังอยู่ (Ifbb51, b/214577959)
  • จากการนําทาง 2.4.1: เมื่อทํา Deep Link ผ่าน NavGraph ที่ฝังไว้หลายรายการ ตอนนี้กองซ้อนที่ย้อนกลับจะรวมปลายทางเริ่มต้นระดับกลางอย่างเหมาะสมแล้ว (I504c0, b/214383060)

เวอร์ชัน 2.5.0-alpha01

26 มกราคม 2022

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

ฟีเจอร์ใหม่

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

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

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

Safe Args

  • ตอนนี้ 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.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)
  • ย้ายจาก Navigation 2.5.0-alpha04: Navigation Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อใช้เนมสเปซและไม่มี AndroidManifest.xml (I17ccf, b/227229815)
  • พอร์ตจาก Navigation 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 อย่างถูกต้องเมื่อใช้การเชื่อมโยงข้อมูลกับกราฟที่ฝังอยู่ (Ifbb51, b/214577959)
  • เมื่อทํา Deep Link ผ่าน NavGraph ที่ซ้อนกันหลายรายการ ตอนนี้กองซ้อนที่ซ้อนกันจะรวมปลายทางเริ่มต้นระดับกลางอย่างเหมาะสม (I504c0, b/214383060)
  • ย้ายข้อมูลมาจาก Navigation 2.5.0-alpha01: แก้ไขปัญหาการเข้าถึง ViewModel ที่สร้างขึ้นผ่าน by navGraphViewModels() จาก onCreate() ของ Fragment จะดำเนินการไม่สำเร็จด้วย IllegalStateException (I8a14d)
  • ย้ายข้อมูลมาจากการนำทาง 2.5.0-alpha01: NavDeepLink จะไม่ถอดรหัสอาร์กิวเมนต์ซ้ำอีกต่อไป ซึ่งหมายความว่าระบบจะส่งอาร์กิวเมนต์ที่ถอดรหัสอย่างถูกต้องไปยังปลายทางสุดท้าย (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 ของคลาสที่ใช้ทั่วไป (เช่น NavType คลาสย่อย) ฟังก์ชันส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์ -ktx ได้ย้ายไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว ระบบจะเผยแพร่อาร์ติแฟกต์ -ktx ต่อไป แต่อาร์ติแฟกต์จะว่างเปล่า
  • ตอนนี้อาร์ติแฟกต์ navigation-fragment มีการใช้งาน เลย์เอาต์แบบ 2 แผงที่สร้างไว้ล่วงหน้าผ่าน AbstractListDetailFragment ใหม่ ข้อมูลโค้ดนี้ใช้ SlidingPaneLayout เพื่อจัดการแผงรายการ (ซึ่งคลาสย่อยของคุณให้ไว้) และแผงรายละเอียด ซึ่งใช้ NavHostFragment ในการนำไปใช้งาน ดังที่เห็นในตัวอย่างการใช้งาน
  • เมธอด currentBackStackEntryAsFlow() ใน NavController ให้ Flow ที่แสดงทุกครั้งที่ NavBackStackEntry ในปัจจุบันมีการเปลี่ยนแปลง ขั้นตอนนี้สามารถใช้แทนการจัดการ OnDestinationChangedListener ด้วยตนเอง
  • ตอนนี้ NavController ดึงข้อมูลรายการอินสแตนซ์ NavBackStackEntry ที่มองเห็นได้ทั้งหมดเป็น StateFlow ผ่านพร็อพเพอร์ตี้ visibleEntries เวอร์ชันทดลองได้แล้ว
  • ตอนนี้คุณขยายคลาส NavType เพื่อสร้าง NavTypes ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเฉพาะเมื่อคุณสร้างกราฟการนำทางแบบเป็นโปรแกรมเท่านั้น เช่น ผ่าน Navigation Graph Kotlin DSL
  • ตอนนี้ Navigation มีfindStartDestination() และ getHierarchy() API ที่สามารถใช้เพื่อช่วยในการติดตั้งใช้งาน NavigationUI ที่กําหนดเอง findStartDestination() เป็นฟังก์ชันส่วนขยายใน NavGraph ที่จะค้นหาปลายทางเริ่มต้นจริงที่จะแสดงเมื่อคุณไปยังกราฟ แม้ว่า startDestination จะเป็น NavGraph ที่ฝังอยู่ก็ตาม getHierarchy() คือฟังก์ชันใน NavDestination ที่ใช้เพื่อยืนยันว่าปลายทางหนึ่งๆ อยู่ภายในลําดับชั้นของอีกปลายทางหนึ่งหรือไม่

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

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

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

เส้นทางการนําทางและ DSL ของ Kotlin

การนำทางเวอร์ชันเก่าๆ อาศัยที่ปลายทางแต่ละแห่งมีรหัสจำนวนเต็มแบบคงที่ซึ่งจะระบุปลายทางนั้นๆ โดยไม่ซ้ำกับปลายทางอื่นๆ และช่วยให้คุณ 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 ให้การผสานรวมระหว่างคอมโพเนนต์การนำทางกับ Jetpack Compose ซึ่งจะใช้ฟังก์ชัน @Composable เป็นปลายทางในแอปพลิเคชัน

ฟีเจอร์ของรุ่นนี้ ได้แก่

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

  • เขียนตัวช่วยที่เฉพาะเจาะจงใน rememberNavController() และ currentBackStackEntryAsState() เพื่ออนุญาตให้ยกสถานะและเชื่อมต่อ NavController กับคอมโพสิเบิลนอก NavHost (เช่น แถบนําทางด้านล่าง)

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

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

กองซ้อนที่ย้อนกลับหลายกอง

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

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

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

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

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

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

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

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

ในทุกกรณี NavController จะบันทึกและกู้คืนสถานะของ NavBackStackEntry แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel ที่อยู่ในขอบเขตปลายทางการนำทาง เราได้อัปเดต Navigator API เพื่อให้ 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 ที่มีกราฟการนำทางที่ฝังอยู่หลายรายการไม่สร้างกองซ้อนย้อนกลับอย่างถูกต้อง (b/214383060)

เวอร์ชัน 2.4.0-rc01

15 ธันวาคม 2021

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

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

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

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

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

การแก้ไขข้อบกพร่องของ 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 ไม่ขัดข้องอีกต่อไปเมื่อพยายามกู้คืนอาร์เรย์ที่แยกออกเป็นส่วนๆ ที่กำหนดเองหลังจากกระบวนการสิ้นสุด (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 แบบชัดเจนและแบบไม่ชัดเจนจะเพิ่ม Flag saveState โดยอัตโนมัติเมื่อไปยังกราฟอื่น เพื่อให้มั่นใจว่าโค้ด เช่น NavigationUI.setupWithNavController และโค้ดที่ใช้กองซ้อน Back หลายรายการจะทํางานตามที่คาดไว้ (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 กับ Fregment ได้ดียิ่งขึ้น (I901e3, b/201446416)

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

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

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

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

เวอร์ชัน 2.4.0-alpha10

29 กันยายน 2021

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 2.4.0-alpha09

15 กันยายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 2.4.0-alpha08

1 กันยายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

เวอร์ชัน 2.4.0-alpha07

18 สิงหาคม 2021

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

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

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

เวอร์ชัน 2.4.0-alpha06

4 สิงหาคม 2021

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

การเปลี่ยนแปลง 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 ขัดขวางปุ่มย้อนกลับแม้ว่าจะไม่มีกองซ้อนย้อนกลับที่จะแสดง (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 (I0b8db, b/175392262)

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

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

เวอร์ชัน 2.4.0-alpha04

1 กรกฎาคม 2021

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

ฟีเจอร์ใหม่

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

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

  • เปลี่ยนชื่อฟังก์ชัน add ใน NavigatorState เป็น push แล้ว การเรียกใช้ add() ทั้งหมดในปัจจุบันจะต้องเปลี่ยนเป็น push() (Ie89fc, b/172112072)
  • ตอนนี้อินสแตนซ์ Navigator ที่กําหนดเองสามารถใช้ pushWithTransaction และ popWithTransition API ใน 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() เป็นครั้งแรกเมื่อได้รับคอลแบ็ก ตอนนี้จะได้รับคอลแบ็กครั้งที่ 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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

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

  • ตอนนี้เรากำกับเนื้อหาให้กับเมธอด setId ใน NavDestination อย่างถูกต้องแล้วด้วย @IdRes เพื่อให้ยอมรับเฉพาะรหัสทรัพยากรเท่านั้น (I69b80)

  • ตอนนี้พารามิเตอร์ int ของ findNode เป็น resId แทน resid (I7711d)

อัปเดตทรัพยากร Dependency

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

เวอร์ชัน 2.4.0-alpha01

18 พฤษภาคม 2021

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

ฟีเจอร์ใหม่

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

กองซ้อนที่ย้อนกลับหลายกอง

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

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

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

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

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

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

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

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

เราได้อัปเดต ComposeNavigator สำหรับปลายทาง composable ใน Navigation Compose และ FragmentNavigator และ DynamicFragmentNavigator สำหรับปลายทาง <fragment> ใน Navigation ด้วย Fregment เพื่อใช้ 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 ของคลาสที่ใช้ทั่วไป (เช่น NavType คลาสย่อย) ฟังก์ชันส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์ -ktx ได้ย้ายไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว ระบบจะเผยแพร่อาร์ติแฟกต์ -ktx ต่อไป แต่อาร์ติแฟกต์จะว่างเปล่า (b/184292145)
  • NavDeepLinkBuilder รองรับการเพิ่มปลายทางที่แตกต่างกันหลายรายการลงในกองซ้อนย้อนกลับที่สร้างขึ้นแล้ว (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 รองรับ Navigator ที่กําหนดเองซึ่งใช้ @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)
  • ตอนนี้การเขียนการนําทางจะขึ้นอยู่กับการนําทาง 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 มีการคอมมิตเหล่านี้

การอัปเดตทรัพยากร Dependency

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

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

เวอร์ชัน 2.3.5

เวอร์ชัน 2.3.5

7 เมษายน 2021

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

ฟีเจอร์ใหม่

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

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

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

การอัปเดตทรัพยากร Dependency

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

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

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

เวอร์ชัน 2.3.4

เวอร์ชัน 2.3.4

10 มีนาคม 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 2.3.3

เวอร์ชัน 2.3.3

27 มกราคม 2021

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

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

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

เวอร์ชัน 2.3.2

เวอร์ชัน 2.3.2

2 ธันวาคม 2020

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

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

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

เวอร์ชัน 2.3.1

เวอร์ชัน 2.3.1

14 ตุลาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

การเปลี่ยนแปลงทรัพยากร Dependency

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

เวอร์ชัน 2.3.0

เวอร์ชัน 2.3.0

24 มิถุนายน 2020

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

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

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

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

  • เครื่องมือผสานไฟล์ Manifest ยังไม่รองรับการดำเนินการ 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)

การอัปเดตทรัพยากร Dependency

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

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

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

การอัปเดตทรัพยากร Dependencies

เวอร์ชัน 2.3.0-alpha04

18 มีนาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้อาร์ติแฟกต์ของฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับ 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 เฉพาะเจาะจง ซึ่งช่วยให้คุณใช้การใช้งาน Openable ที่กําหนดเองกับ NavigationUI ได้ (b/129030452)

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

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

การเปลี่ยนแปลงทรัพยากร Dependency

  • การนำทางได้เปลี่ยนกลับไปใช้ 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 ซึ่งเหมาะสำหรับจัดเก็บสถานะที่บันทึกไว้เพียงเล็กน้อยซึ่งควรเชื่อมโยงกับรายการสแต็กที่ซ้อนกันโดยเฉพาะ ดูตัวอย่าง Use Case ได้ที่การแสดงผลลัพธ์ (b/79672220)

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

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

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

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

การเปลี่ยนแปลงทรัพยากร Dependency

  • ตอนนี้การนําทางจะขึ้นอยู่กับ 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: กฎ ProGuard ของ navigation-ui สําหรับ DrawerArrowDrawable ได้รับการอัปเดตแล้วเพื่อให้แน่ใจว่าไม่จําเป็นต้องใช้ android.enableJetifier=true (b/147610424)
  • จากการนำทาง 2.2.1: ตอนนี้โมดูล navigation-common-ktx มีชื่อแพ็กเกจไฟล์ Manifest ที่ไม่ซ้ำกันแทนที่จะใช้ชื่อแพ็กเกจไฟล์ Manifest เดียวกับ navigation-runtime-ktx (aosp/1141947)

การอัปเดตทรัพยากร Dependencies

เวอร์ชัน 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

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 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)

การอัปเดตทรัพยากร Dependencies

เวอร์ชัน 2.2.0

เวอร์ชัน 2.2.0

22 มกราคม 2020

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

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

  • NavBackStackEntry: ตอนนี้คุณเรียก NavController.getBackStackEntry() ได้แล้ว โดยส่งรหัสของปลายทางหรือกราฟการนําทางในกองซ้อนด้านหลัง NavBackStackEntry ที่แสดงผลจะระบุ LifecycleOwner, ViewModelStoreOwner (เหมือนกับที่แสดงผลโดย NavController.getViewModelStoreOwner()) และ SavedStateRegistryOwner ที่ขับเคลื่อนโดยการนำทาง นอกเหนือจากการให้อาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น
  • การผสานรวม SavedState ของ Lifecycle ViewModel: ตอนนี้ SavedStateViewModelFactory เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้ by navGraphViewModels() หรือตัวสร้าง ViewModelProvider ที่มี ViewModelStoreOwner ที่ NavController.getBackStackEntry() หรือ NavController.getViewModelStoreOwner() แสดงผล
  • การรองรับพารามิเตอร์การค้นหาสําหรับ 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)

การเปลี่ยนแปลงทรัพยากร Dependency

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

เวอร์ชัน 2.2.0-rc02

7 พฤศจิกายน 2019

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

การเปลี่ยนแปลงทรัพยากร Dependency

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

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

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

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

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

เวอร์ชัน 2.2.0-alpha03

18 กันยายน 2019

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

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

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

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

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

เวอร์ชัน 2.2.0-alpha02

5 กันยายน 2019

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 2.2.0-alpha01

7 สิงหาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

5 กันยายน 2019

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

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

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

เวอร์ชัน 2.1.0-rc01

7 สิงหาคม 2019

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

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

  • เราได้นํา 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)
  • เมธอด setHostOnBackPressedDispatcherOwner() ของ NavController ถูกแทนที่ด้วยเมธอด setOnBackPressedDispatcher() ของ NavHostController และตอนนี้คุณต้องเรียกใช้ setLifecycleOwner() ก่อนเรียกใช้เมธอดดังกล่าว (aosp/965409)
  • ตอนนี้ NavHostController มีเมธอด enableOnBackPressed(boolean) ที่แทนที่คลาส NavHostOnBackPressedManager ที่ setHostOnBackPressedDispatcherOwner() แสดงผลก่อนหน้านี้ (aosp/966091)

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

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

เวอร์ชัน 2.1.0-alpha04

16 พฤษภาคม 2019

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

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

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

เวอร์ชัน 2.1.0-alpha03

7 พฤษภาคม 2019

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

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

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

  • ตอนนี้ระบบส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์ OnDestinationChangedListener อย่างถูกต้องแล้ว b/130630686
  • ตอนนี้ NavHostFragment จะขัดจังหวะเหตุการณ์ Back ของระบบโดยใช้ 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() property delegate สําหรับผู้ใช้ Kotlin หรือโดยใช้ getViewModelStore() API ที่เพิ่มลงใน 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

การเปลี่ยนแปลงทรัพยากร Dependency

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

เวอร์ชัน 2.0.0

เวอร์ชัน 2.0.0

14 มีนาคม 2019

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

เวอร์ชัน 2.0.0-rc02

6 มีนาคม 2019

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

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

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

ไลบรารีที่ใช้ก่อน AndroidX

สำหรับเวอร์ชันก่อน AndroidX ของ Navigation ให้ใส่ 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 ให้เพิ่มเส้นทางต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

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

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0

14 มีนาคม 2019

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

เวอร์ชัน 1.0.0-rc02

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

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

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

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

เวอร์ชัน 1.0.0-rc01

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

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

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

  • แก้ไขปัญหาเมื่อใช้ Frgament และ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 API และนับจากนี้ไป 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 เท่านั้นโดยเฉพาะ โดยใช้อาร์กิวเมนต์เริ่มต้นและคลาสแบบคงที่แทนรูปแบบตัวสร้างที่ยังคงใช้งานได้ผ่านปลั๊กอิน androidx.navigation.safeargs เวอร์ชันเก่า b/110263087

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

  • ตอนนี้ Deep Link ที่ตรงกันจะเอนเอียงไปทาง 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
  • คลาส Directions ที่ Safe Args สร้างขึ้นจะไม่มีตัวสร้างแบบสาธารณะอีกต่อไป คุณควรโต้ตอบกับเมธอดแบบคงที่ที่สร้างขึ้นเท่านั้น b/123031660
  • ชั้นเรียน NavDirections ที่ Safe Args สร้างขึ้นจะไม่มีตัวสร้างแบบสาธารณะอีกต่อไป ควรจะสร้างขึ้นผ่านเมธอดแบบคงที่ในชั้นเรียน Directions ที่สร้างขึ้นเท่านั้น b/122963206
  • ตอนนี้ Bundle ที่แสดงผลจาก getArguments() ของ NavDirections มีสถานะเป็น @NonNull ไม่ใช่ @Nullable b/123243957

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

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

เวอร์ชัน 1.0.0-alpha09

18 ธันวาคม 2018

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

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

ฟีเจอร์ใหม่

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

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

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

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

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

Safe Args

  • Safe Args รองรับออบเจ็กต์ Serializable รวมถึงค่า 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 มีการพึ่งพาที่แก้ไขแล้วสำหรับปลั๊กอิน Android Gradle 3.2.1 b/113167627
  • ตอนนี้คุณสร้างเส้นทางสำหรับคลาสภายในได้แล้ว b/117407555
  • แก้ปัญหาเกี่ยวกับการสร้างเส้นทางไปยังกราฟ <include> b/116542123

เวอร์ชัน 1.0.0-alpha06

20 กันยายน 2018

ฟีเจอร์ใหม่

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

  • การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ตอนนี้เมธอด navigate() ของ Navigator จะรับพารามิเตอร์ 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() ของคลาส Args ที่สร้างขึ้น b/111450897
  • แก้ไขการสร้างที่ไม่สําเร็จใน Safe Args b/109409713
  • แก้ไขการเปลี่ยนจากตัวระบุทรัพยากรเป็นชื่อ Java b/111602491
  • แก้ไขข้อความแสดงข้อผิดพลาดเกี่ยวกับ Nullability ในปลั๊กอิน Safe Args
  • เพิ่มคำอธิบายประกอบเกี่ยวกับความสามารถในการเป็น Null ที่ขาดหายไป

เวอร์ชัน 1.0.0-alpha04

19 กรกฎาคม 2018

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

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

  • NavHostFragment จะตั้งค่า 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 ไปยังปลายทางของข้อมูลโค้ด b/111515685

เวอร์ชัน 1.0.0-alpha03

12 กรกฎาคม 2018

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

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

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

Safe Args

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

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

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

เวอร์ชัน 1.0.0-alpha02

7 มิถุนายน 2018

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

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

  • ตอนนี้การนําทางจะถอดรหัสอาร์กิวเมนต์ที่แยกวิเคราะห์จาก URL ของ Deep Link b/79982454

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

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

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

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

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

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

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

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

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

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

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

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

เวอร์ชัน 1.0.0-alpha01

8 พฤษภาคม 2018

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