ส่วนย่อย

แบ่งแอปออกเป็นหลายหน้าจออิสระที่โฮสต์ภายในกิจกรรม
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
23 กันยายน 2026 1.9.1 - - -

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

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

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

ดึงดูด

dependencies {
    def fragment_version = "1.9.1"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Compose
    implementation "androidx.fragment:fragment-compose:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version"
    androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.9.1"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Compose
    implementation("androidx.fragment:fragment-compose:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

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

ความคิดเห็น

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

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

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Issue Tracker

เวอร์ชัน 1.9

เวอร์ชัน 1.9.1

23 กันยายน 2026

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

เวอร์ชัน 1.9.0

12 สิงหาคม 2026

androidx.fragment:fragment-*:1.9.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.9.0 มีการเปลี่ยนแปลงเหล่านี้

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

  • ตอนนี้ Fragment ใช้อินเทอร์เฟซ ContextAware และใช้เพื่อเรียกใช้โค้ดได้เมื่อแนบ Fragment
  • ตอนนี้ AndroidFragment ที่ประกอบได้ยอมรับพารามิเตอร์ maxLifecycle ซึ่งช่วยให้คุณจำกัดสถานะวงจรของ Fragment ที่ฝังได้
  • ตอนนี้ไลบรารี Fragment รองรับการติดตามของระบบสำหรับเหตุการณ์ในวงจรผ่าน Jetpack Tracing แล้ว

เวอร์ชัน 1.9.0-rc01

29 กรกฎาคม 2026

androidx.fragment:fragment-*:1.9.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.9.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

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

  • เมื่อใช้ FragmentScenario.launchInContainer ตอนนี้ Fragment ภายใต้การทดสอบจะอยู่ภายใน FragmentContainerView (Ia6273, b/531550353)

เวอร์ชัน 1.9.0-alpha02

1 กรกฎาคม 2026

androidx.fragment:fragment-*:1.9.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.9.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้

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

  • เพิ่มพารามิเตอร์ maxLifecycle ลงใน AndroidFragment composable ซึ่งจะช่วยให้คุณจำกัดสถานะวงจรของ ที่ฝังไว้Fragmentได้ ทำให้ควบคุมลักษณะการทำงานของได้ดียิ่งขึ้นในการ ตั้งค่า UI ที่ซับซ้อน เช่น เพจเจอร์หรือแท็บ (Ie99b5, b/526109804)
  • ตอนนี้ไลบรารี Fragment รองรับ System Tracing ของระบบสำหรับเหตุการณ์ในวงจรผ่าน Jetpack Tracing แล้ว (Ibc63b, b/112161409)

เวอร์ชัน 1.9.0-alpha01

17 มิถุนายน 2026

androidx.fragment:fragment-*:1.9.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.9.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

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

  • ตอนนี้ Fragment จะใช้อินเทอร์เฟซ ContextAware และใช้เพื่อเรียกใช้โค้ดเมื่อแนบ Fragment ได้แล้ว (I38019, b/477255355)

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

  • แก้ไขข้อขัดข้องใน Fragment ซึ่งเกิดขึ้นเมื่อมีการส่งกิจกรรมไปยังเบื้องหลังระหว่างท่าทางสัมผัสสำหรับการย้อนกลับที่คาดการณ์ได้ (I55734, b/389589678)
  • UnsafeFragmentLifecycleObserverDetector จะไม่ทำงานภายใน การคอมโพสอีกต่อไป (Ic4176, b/501504696)
  • [จาก Fragment 1.8.9] แก้ไขปัญหาที่การยกเลิกท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ซึ่ง จะแสดงการดำเนินการซ่อนจะทำให้ท่าทางสัมผัสถัดไปไม่เคลื่อนไหว อย่างถูกต้องเมื่อใช้ Animator (I0a400, b/384765586)
  • [จาก Fragment 1.8.9] แก้ไขข้อผิดพลาดที่การรวมกันของ setMaxLifecycle และ popBackStack อาจทำให้ย้าย Fragment ด้านบนไปยังสถานะ RESUMED ไม่สำเร็จ (I3448b, b/406127576)
  • [จาก Fragment 1.8.8] แก้ไขปัญหาที่ FragmentManager จะ ขัดข้องขณะพยายามบันทึกสถานะของ Fragment ที่ เพิ่มด้วย setMaxLifecycle(Lifecycle.State.INITIALIZED) เนื่องจาก ฟร็อกเมนต์เหล่านี้ไม่เคยผ่าน onCreate() จึงไม่มีการบันทึกสถานะหรือเรียก onSaveInstanceState() อีกต่อไป (I6e37a, b/408163315)
  • [จาก Fragment 1.8.7] แก้ไขปัญหาเกี่ยวกับ FragmentManager ที่ไม่อยู่ในสถานะที่เหมาะสม หลังจากดำเนินการป๊อปและแทนที่ในเฟรมเดียวกัน ซึ่งอาจ ทำให้เกิดข้อขัดข้องเมื่อใช้ร่วมกับการย้อนกลับแบบคาดการณ์ (I50ad1, b/380288461)
  • [จาก Fragment 1.8.6] ตอนนี้ setOnApplyWindowInsetsListener override ของ FragmentContainerView ใช้ตัวฟังที่กำหนดค่าเป็น Null ได้แล้ว (I575f0, b/282790626)
  • [จาก Fragment 1.8.5] แก้ไขปัญหา IllegalStateException ที่ทริกเกอร์ โดย saveBackStack หลังจากยกเลิกหรือขัดจังหวะท่าทางสัมผัสสำหรับการย้อนกลับที่คาดการณ์ได้เท่านั้น (I3387d, b/342419080)
  • [จาก Fragment 1.8.4] แก้ไขUninitializedPropertyAccessException ใน AndroidFragment เมื่อสลับ คลาสที่อินสแตนซ์ AndroidFragment ของคุณใช้แบบไดนามิก (I12dea, b/365578408)
  • [จาก Fragment 1.8.4] แก้ไขปัญหาที่การกดปุ่มย้อนกลับของระบบอย่างรวดเร็วหรือการใช้ท่าทางสัมผัสย้อนกลับอย่างรวดเร็วจะทำให้ Fragment ขัดข้อง (Ibc038, b/364804225, b/364914301)
  • [จาก Fragment 1.8.4] แก้ไขปัญหาใน Fragment ที่การขัดจังหวะท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะส่ง FragmentManager ไปยังสถานะที่ไม่ได้กำหนด และอาจแสดง Fragment ที่ไม่ถูกต้อง (If82e2, b/338624457)
  • [จาก Fragment 1.8.3] AndroidFragment จะไม่ขัดข้องอีกต่อไปหากมีการเพิ่มลงในการจัดองค์ประกอบขณะที่ระบบได้บันทึกสถานะของกิจกรรม/Fragment ที่มีอยู่แล้ว (I985e9, b/356643968)
  • [จาก Fragment 1.8.2] การเรียกใช้การย้อนกลับของระบบขณะที่ FragmentManager มีการดำเนินการที่รอดำเนินการจะไม่ทำให้เกิดข้อยกเว้นที่อยู่นอกขอบเขตอีกต่อไป (I9ba32, b/342316801)
  • [จาก Fragment 1.8.2] AndroidFragment จัดการกรณีที่ วาง Fragment หลักไว้ใน Fragment Back Stack ได้อย่างถูกต้อง เพื่อหลีกเลี่ยงปัญหา "ไม่พบ View สำหรับรหัส" เมื่อย้อนกลับ ไปยัง Fragment นั้น (I94608, b/347706985)
  • [จาก Fragment 1.8.2] Fragment ที่เพิ่มผ่านเมธอด FragmentTransaction.add ซึ่งใช้ ViewGroup จะรอ onContainerAvailable ก่อนที่จะไปยัง onStart() ซึ่งจะส่งผลต่อผู้ใช้ API ดังกล่าว เช่น AndroidFragment ซึ่งตอนนี้จะรอให้ AndroidFragment กลับมา เขียนก่อนที่จะย้ายผ่าน onStart() (I94608, b/347706985)
  • [จาก Fragment 1.8.1] แก้ไขปัญหาที่ Fragment ที่ไม่มีคอนเทนเนอร์จะถูกทำลายทันทีเมื่อเริ่มท่าทางสัมผัสย้อนกลับแบบคาดการณ์ (If6b83, b/345244539)

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

  • ผสานรวม fragment-ktx เข้ากับไลบรารี Fragment ตอนนี้ส่วนขยาย Kotlin ทั้งหมดเป็นส่วนหนึ่งของอาร์ติแฟกต์ Fragment หลักแล้ว ตอนนี้ fragment-ktx เป็นอาร์ติแฟกต์ว่างเพื่อความเข้ากันได้ ขอขอบคุณ Jake Wharton (Idabaa)

เวอร์ชัน 1.8

เวอร์ชัน 1.8.9

13 สิงหาคม 2025

androidx.fragment:fragment-*:1.8.9 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.9 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่การยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ซึ่งจะแสดงการดำเนินการซ่อนจะทำให้ท่าทางสัมผัสถัดไปเคลื่อนไหวไม่ถูกต้องเมื่อใช้ Animator (I0a400, b/384765586)
  • แก้ไขข้อผิดพลาดที่การรวมกันของ setMaxLifecycle และ popBackStack อาจทำให้ย้ายส่วนบนสุดไปยัง RESUMED ไม่สำเร็จ (I3448b, b/406127576)

เวอร์ชัน 1.8.8

4 มิถุนายน 2025

androidx.fragment:fragment-*:1.8.8 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.8 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่ FragmentManager จะขัดข้องขณะพยายามบันทึกสถานะของ Fragment ที่เพิ่มด้วย setMaxLifecycle(Lifecycle.State.INITIALIZED) เนื่องจากไม่ได้ผ่าน onCreate() มาก่อน จึงไม่มีการบันทึกสถานะหรือเรียกใช้ onSaveInstanceState() อีกต่อไป (I6e37a)

เวอร์ชัน 1.8.7

20 พฤษภาคม 2025

androidx.fragment:fragment-*:1.8.7 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.7 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่ FragmentManager ไม่อยู่ในสถานะที่เหมาะสมหลังจากดำเนินการป๊อปและแทนที่ในเฟรมเดียวกัน ซึ่งอาจทำให้เกิดข้อขัดข้องเมื่อใช้ร่วมกับการป๊อป Backstack ผ่าน popBackStack หรือท่าทางสัมผัสย้อนกลับแบบคาดการณ์ (I50ad1)
  • แก้ไขข้อขัดข้องที่เกิดจากการใช้ AndroidX Transitions และเข้าสู่กรณีที่ธุรกรรมของ Fragment ที่ต่อเนื่องอย่างรวดเร็วพยายามยกเลิกการเปลี่ยนฉากที่ยังไม่เริ่ม และไลบรารี AndroidX Transition ไม่ได้ล้างสถานะการเปลี่ยนฉากอย่างถูกต้อง (ดู b/414612221) (Ib5235)

เวอร์ชัน 1.8.6

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

androidx.fragment:fragment-*:1.8.6 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.6 มีการเปลี่ยนแปลงเหล่านี้

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

  • การลบล้าง setOnApplyWindowInsetsListener ของ FragmentContainerView จะใช้ Listener ที่เป็น Null ซึ่งตรงกับที่เฟรมเวิร์กอนุญาต (I575f0, b/282790626)

เวอร์ชัน 1.8.5

30 ตุลาคม 2024

androidx.fragment:fragment-*:1.8.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.5 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหา IllegalStateException ที่saveBackStack จะทริกเกอร์หลังจากยกเลิกหรือขัดจังหวะท่าทางสัมผัสสำหรับการย้อนกลับที่คาดการณ์ได้แล้วเท่านั้น (I3387d, b/342419080)

เวอร์ชัน 1.8.4

2 ตุลาคม 2024

androidx.fragment:fragment-*:1.8.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.4 มีการเปลี่ยนแปลงเหล่านี้

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

  • แก้ไขปัญหาที่การกดปุ่มย้อนกลับของระบบอย่างรวดเร็วหรือการใช้ท่าทางสัมผัสย้อนกลับอย่างรวดเร็วจะทำให้ Fragment ขัดข้องเมื่อใช้ Androidx Transitions (Ibc038, b/364804225)
  • แก้ไขปัญหาใน Fragment ที่การขัดจังหวะท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะส่ง FragmentManager ไปยังสถานะที่ไม่ได้กำหนด และอาจแสดง Fragment ที่ไม่ถูกต้อง (If82e2, b/338624457)
  • แก้ไขUninitializedPropertyAccessExceptionใน AndroidFragment เมื่อสลับคลาสที่อินสแตนซ์ AndroidFragment ของคุณใช้อย่างไดนามิก (I12dea)

เวอร์ชัน 1.8.3

4 กันยายน 2024

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

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

  • FragmentManager ตอนนี้จะพิจารณาการดำเนินการที่รอดำเนินการอย่างถูกต้องเมื่อจัดการท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ ซึ่งจะช่วยให้การย้อนกลับระบบไม่ทำให้เกิด IndexOutOfBoundsException อีกต่อไป (I9ba32, b/342316801)
  • AndroidFragment จะไม่ขัดข้องอีกต่อไปหากมีการเพิ่มลงในการจัดองค์ประกอบในขณะที่ระบบได้บันทึกสถานะของกิจกรรม/Fragment ที่มีอยู่แล้ว (I985e9, b/356643968)

เวอร์ชัน 1.8.2

24 กรกฎาคม 2024

androidx.fragment:fragment-*:1.8.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.2 มีการเปลี่ยนแปลงเหล่านี้

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

  • AndroidFragment ตอนนี้จัดการกรณีที่วาง Fragment หลักไว้ใน Fragment Back Stack ได้อย่างถูกต้องแล้ว ซึ่งจะช่วยหลีกเลี่ยงปัญหา "ไม่พบ View สำหรับรหัส" เมื่อย้อนกลับไปที่ Fragment นั้น (I94608)
  • ตอนนี้ Fragment ที่เพิ่มผ่านเมธอด FragmentTransaction.add ซึ่งใช้ ViewGroup จะรอ onContainerAvailable ก่อนที่จะไปยัง onStart() การเปลี่ยนแปลงนี้จะส่งผลต่อผู้ใช้ API ดังกล่าว เช่น AndroidFragment ซึ่งตอนนี้จะรอให้ AndroidFragment กลับมาเขียนอีกครั้งก่อนที่จะย้ายผ่าน onStart() (I94608)

เวอร์ชัน 1.8.1

26 มิถุนายน 2024

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

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

  • แก้ไขปัญหาที่ Fragment ที่ไม่มีคอนเทนเนอร์จะDESTROYEDทันทีเมื่อเริ่มท่าทางสัมผัสย้อนกลับแบบคาดการณ์ ตอนนี้ระบบจะถือว่าอยู่ในสถานะ CREATED จนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ (If6b83, b/345244539)

เวอร์ชัน 1.8.0

12 มิถุนายน 2024

androidx.fragment:fragment-*:1.8.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0 มีการเปลี่ยนแปลงเหล่านี้

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

  • ตอนนี้อาร์ติแฟกต์ fragment-compose มี AndroidFragment Composable ที่อนุญาตให้เพิ่ม Fragment ลงในลำดับชั้นของ Compose ผ่านชื่อคลาส Fragment ซึ่งจะจัดการการบันทึกและการกู้คืนสถานะของ Fragment โดยอัตโนมัติ ควรใช้เป็นวิธีแทนที่โดยตรงสำหรับแนวทางที่แนะนำก่อนหน้านี้ในการใช้ AndroidViewBinding เพื่อขยาย Fragment
  • ตอนนี้ onBackStackChangeCancelled การเรียกกลับในอินเทอร์เฟซของ FragmentManager OnBackStackChangedListener จะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการใน FragmentManager ซึ่งทำให้สอดคล้องกับเวลาของการเรียกกลับของ onBackStackChangeCommitted มากขึ้น

เวอร์ชัน 1.8.0-rc01

29 พฤษภาคม 2024

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

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

  • onBackStackChangeCancelledการเรียกกลับในอินเทอร์เฟซ FragmentManagers OnBackStackChangedListener จะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการใน FragmentManager ซึ่งทำให้สอดคล้องกับเวลาของการเรียกกลับ onBackStackChangeCommitted มากขึ้น (I5ebfb, b/332916112)

เวอร์ชัน 1.8.0-beta01

14 พฤษภาคม 2024

androidx.fragment:fragment-*:1.8.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

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

  • จาก Fragment 1.7.1: ตอนนี้การย้อนกลับที่คาดการณ์ได้จะทำงานเฉพาะกับธุรกรรมที่ Fragment ทั้งหมดมี Animator หรือ Androidx Transition ที่ค้นหาได้ การแก้ไขนี้จะช่วยแก้ปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนจะทำให้เกิดหน้าจอสีดำ (I43037, b/339169168)

เวอร์ชัน 1.8.0-alpha02

17 เมษายน 2024

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

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

  • จาก Fragment 1.7.0-rc02: เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า sharedElement โดยไม่มีการเปลี่ยนฉากอื่นๆ จะไม่ทำงาน (Iec48e)
  • จาก Fragment 1.7.0-rc02: แก้ไขข้อบกพร่องที่ทำให้เกิดข้อขัดข้องในกรณีที่เพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถค้นหาได้ลงในธุรกรรมที่การเปลี่ยนฉากอื่นๆ ทั้งหมดสามารถค้นหาได้ ตอนนี้ระบบจะพิจารณาธุรกรรมดังกล่าวเป็นธุรกรรมที่ค้นหาไม่ได้อย่างถูกต้อง (I18ccd)

เวอร์ชัน 1.8.0-alpha01

3 เมษายน 2024

androidx.fragment:fragment-*:1.8.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • AndroidFragment Composable ใหม่ช่วยให้เพิ่ม Fragment ลงในลำดับชั้น Compose ผ่านชื่อคลาส Fragment ได้ ซึ่งจะจัดการการบันทึกและการกู้คืนสถานะของ Fragment โดยอัตโนมัติ ซึ่งสามารถใช้แทน AndroidViewBinding ได้โดยตรง Composable.(b/312895363, Icf841)

การเปลี่ยนแปลงเอกสารประกอบ

  • อัปเดตเอกสารประกอบสำหรับ OnBackStackChangedListener API เพื่อระบุเวลาที่เรียกใช้และวิธีใช้ (I0bfd9)

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

เวอร์ชัน 1.7

เวอร์ชัน 1.7.1

14 พฤษภาคม 2024

androidx.fragment:fragment-*:1.7.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.1 มีการเปลี่ยนแปลงเหล่านี้

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

  • ตอนนี้การย้อนกลับที่คาดการณ์ได้จะทํางานเฉพาะสําหรับธุรกรรมที่ Fragment ทั้งหมดมี Animator หรือ Androidx Transition ที่ค้นหาได้ การดำเนินการนี้จะแก้ไขปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนจะทำให้หน้าจอว่างเปล่า (I43037, b/339169168)

เวอร์ชัน 1.7.0

1 พฤษภาคม 2024

androidx.fragment:fragment-*:1.7.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0 มีการเปลี่ยนแปลงเหล่านี้

การรองรับท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้

  • ตอนนี้ Fragment รองรับการย้อนกลับในแอปแบบคาดการณ์เมื่อใช้ Animator หรือเมื่อใช้ AndroidX Transition 1.5.0 ซึ่งจะช่วยให้ผู้ใช้ใช้ท่าทางสัมผัสย้อนกลับเพื่อดู Fragment ก่อนหน้าได้โดยการค้นหา Animator/Transition ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านการทำท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบการเปลี่ยนผ่าน ทรัพยากร XML รองรับการย้อนกลับที่คาดการณ์ได้
Animation R.anim ไม่
Animator R.animator ใช่
เฟรมเวิร์ก Transition R.transition ไม่
AndroidX Transition ที่มี Transition 1.4.1 หรือต่ำกว่า R.transition ไม่
AndroidX Transition ที่มี Transition 1.5.0 R.transition ใช่

หากพบปัญหาเกี่ยวกับการรองรับการย้อนกลับที่คาดการณ์ได้ใน Fragment หลังจากเลือกใช้ท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้แล้ว โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมโปรเจ็กต์ตัวอย่างที่จำลองปัญหาของคุณ คุณปิดใช้การย้อนกลับที่คาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false) ในonCreate()ของกิจกรรม

FragmentManager.OnBackStackChangedListener() ตอนนี้มี onBackStackChangeProgressed() และ onBackStackChangeCancelled() สำหรับรับเหตุการณ์ความคืบหน้าของการย้อนกลับที่คาดการณ์ได้และเหตุการณ์ที่ยกเลิกตามลำดับ

Fragment Compose Artifact

เราได้สร้างอาร์ติแฟกต์ fragment-compose ใหม่ที่มุ่งเน้นการรองรับแอปที่อยู่ระหว่างการเปลี่ยนจากสถาปัตยกรรมที่อิงตาม Fragment ไปเป็นสถาปัตยกรรมที่อิงตาม Compose อย่างเต็มรูปแบบ

ฟีเจอร์แรกที่พร้อมใช้งานในอาร์ติแฟกต์ใหม่นี้คือcontentเมธอดส่วนขยายใน Fragment ซึ่งพยายามทำให้การใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการง่ายขึ้นด้วยการสร้าง ComposeView ให้คุณและตั้งค่า ViewCompositionStrategy ที่ถูกต้อง

  class ExampleFragment : Fragment() {

      override fun onCreateView(
          inflater: LayoutInflater,
          container: ViewGroup?,
          savedInstanceState: Bundle?
      ) = content {
          // Write your @Composable content here
          val viewModel: ExampleViewModel = viewModel()

          // or extract it into a separate, testable method
          ExampleComposable(viewModel)
      }
  }

เวอร์ชัน 1.7.0-rc02

17 เมษายน 2024

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

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

  • เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า sharedElement โดยไม่มีการเปลี่ยนฉากอื่นๆ จะเรียกใช้ไม่ได้ (Iec48e)
  • แก้ไขข้อบกพร่องที่การเพิ่มองค์ประกอบที่แชร์ที่ค้นหาไม่ได้ลงในธุรกรรมซึ่งมีการเปลี่ยนฉากอื่นๆ ทั้งหมดที่ค้นหาได้จะทำให้เกิดข้อขัดข้อง ตอนนี้ระบบจะพิจารณาธุรกรรมดังกล่าวอย่างถูกต้องว่าเป็นการทำธุรกรรมที่ค้นหาไม่ได้ (I18ccd)

เวอร์ชัน 1.7.0-rc01

3 เมษายน 2024

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

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

เวอร์ชัน 1.7.0-beta01

20 มีนาคม 2024

androidx.fragment:fragment-*:1.7.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

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

  • ตอนนี้ FragmentHostCallback เขียนด้วย Kotlin เพื่อให้ความสามารถในการเว้นว่างของประเภททั่วไปของโฮสต์ตรงกับความสามารถในการเว้นว่างของประเภทการแสดงผลของ onGetHost() (I40af5)

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

  • แก้ไขปัญหาที่เมื่อใช้ท่าทางสัมผัสย้อนกลับแบบคาดการณ์ใน Fragment ที่ไม่ได้อยู่ในคอนเทนเนอร์ Fragment นั้นจะไม่ถูกทำลาย ตอนนี้ระบบจะย้าย Fragment ไปยังสถานะสุดท้ายทันที (Ida0d9)
  • แก้ไขปัญหาใน Fragment ที่การขัดจังหวะการเปลี่ยนฉากขาเข้าด้วยท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะทำลายมุมมองที่เข้า และทำให้หน้าจอว่างเปล่า (Id3f22, b/319531491)

เวอร์ชัน 1.7.0-alpha10

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

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

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

  • แก้ไขปัญหาที่ทราบในการเปิดตัว Fragment ก่อนหน้านี้ซึ่งการใช้การรองรับการย้อนกลับแบบคาดการณ์ของ Fragment สำหรับ Animator หรือ AndroidX Transition จะทำให้ Fragment แสดง NullPointerException จาก handleOnBackProgressed หากไม่เคยเพิ่ม FragmentManager.OnBackStackChangedListener ผ่าน addOnBackStackChangedListener (I7c835)

เวอร์ชัน 1.7.0-alpha09

24 มกราคม 2024

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

Fragment Compose Artifact

เราได้สร้างอาร์ติแฟกต์ fragment-compose ใหม่ที่มุ่งเน้นการรองรับแอปที่อยู่ระหว่างการเปลี่ยนจากสถาปัตยกรรมที่อิงตาม Fragment ไปเป็นสถาปัตยกรรมที่อิงตาม Compose อย่างเต็มรูปแบบ

ฟีเจอร์แรกที่พร้อมใช้งานในอาร์ติแฟกต์ใหม่นี้คือcontentเมธอดส่วนขยายใน Fragment ซึ่งพยายามทำให้การใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการง่ายขึ้นด้วยการสร้าง ComposeView ให้คุณและตั้งค่า ViewCompositionStrategy ที่ถูกต้อง (561cb7, b/258046948)

class ExampleFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = content {
        // Write your @Composable content here
        val viewModel: ExampleViewModel = viewModel()

        // or extract it into a separate, testable method
        ExampleComposable(viewModel)
    }
}

ฟีเจอร์ใหม่

  • FragmentManager.OnBackStackChangedListener() ตอนนี้มี onBackStackChangeProgressed() และ onBackStackChangeCancelled() สำหรับรับความคืบหน้าของการย้อนกลับที่คาดการณ์ได้และเหตุการณ์ที่ยกเลิกตามลำดับ (214b87)

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

  • เมื่อใช้การรองรับการย้อนกลับแบบคาดการณ์ของ Fragment สำหรับ Animator หรือ AndroidX Transition, Fragment จะส่ง NullPointerException จาก handleOnBackProgressed หากไม่เคยเพิ่ม FragmentManager.OnBackStackChangedListener ผ่าน addOnBackStackChangedListener การเพิ่ม Listener ด้วยตนเองจะช่วยหลีกเลี่ยงข้อขัดข้องได้ การแก้ไขปัญหานี้จะพร้อมใช้งานในรุ่นถัดไปของ Fragment

เวอร์ชัน 1.7.0-alpha08

10 มกราคม 2024

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

ล้างข้อมูล

  • นำวิธีแก้ปัญหาชั่วคราวสำหรับไลบรารีการเปลี่ยนฉากที่ได้รับการแก้ไขแล้วใน Transition 1.5.0-alpha06 ออก (I04356)

เวอร์ชัน 1.7.0-alpha07

29 พฤศจิกายน 2023

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

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

  • แก้ไข NullPointerException ที่เกิดจากการตั้งค่าภาพเคลื่อนไหวขององค์ประกอบที่แชร์และตั้งค่า enter/exitTransition ไม่สำเร็จ (I8472b)
  • จาก Fragment 1.6.2: เมื่อมีการขยาย FragmentContainerView Fragment สถานะของ Fragment เช่น FragmentManager, Host และรหัส จะเข้าถึงได้ในโค้ดเรียกกลับ onInflate (I1e44c, b/307427423)
  • จาก Fragment 1.6.2: เมื่อใช้ clearBackStack เพื่อนำชุด Fragment ออก ระบบจะล้าง ViewModel ของ Fragment ที่ซ้อนกันเมื่อล้าง ViewModels ของ Fragment หลัก (I6d83c, b/296173018)

เวอร์ชัน 1.7.0-alpha06

4 ตุลาคม 2023

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

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

  • เราได้อัปเดต Fragment ให้ขึ้นอยู่กับ animateToStart API ใหม่ที่เพิ่มเข้ามาใน Transition 1.5.0-alpha04

เวอร์ชัน 1.7.0-alpha05

20 กันยายน 2023

androidx.fragment:fragment-*:1.7.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment รองรับการย้อนกลับที่คาดการณ์ได้เมื่อใช้ Androidx Transitions ซึ่งช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อไปยัง Fragment ก่อนหน้าด้วยการเปลี่ยน Androidx ที่กำหนดเองได้ก่อนที่จะตัดสินใจว่าจะยืนยันหรือยกเลิกธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์ คุณต้องใช้รุ่นการเปลี่ยนผ่าน1.5.0-alpha03เพื่อเปิดใช้ฟีเจอร์นี้ (Ib49b4, b/285175724)

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

  • ขณะนี้มีปัญหาที่หลังจากยกเลิกท่าทางสัมผัสย้อนกลับพร้อมการเปลี่ยนผ่าน 1 ครั้งแล้ว ครั้งถัดไปที่คุณเริ่มท่าทางสัมผัสย้อนกลับ ระบบจะไม่สามารถเรียกใช้การเปลี่ยนผ่านได้ ทำให้เกิดหน้าจอว่าง ปัญหานี้อาจเกิดจากปัญหาในไลบรารีการเปลี่ยนฉาก (b/300157785) หากพบปัญหานี้ โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมโปรเจ็กต์ตัวอย่างที่สร้างปัญหาซ้ำ คุณปิดใช้การย้อนกลับที่คาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false) ในonCreate()ของกิจกรรม

เวอร์ชัน 1.7.0-alpha04

6 กันยายน 2023

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

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

  • แก้ไขปัญหาเมื่อยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ที่ทำให้ Fragment เปลี่ยนไปอยู่ในสถานะ Lifecycle ที่ถูกต้องไม่สำเร็จ (I7cffe, b/297379023)
  • แก้ไขการถดถอยที่อนุญาตให้ภาพเคลื่อนไหวทำงานร่วมกับการเปลี่ยนฉาก (I59f36)
  • แก้ไขปัญหาเมื่อใช้การคาดการณ์การย้อนกลับกับ Fragment ซึ่งการพยายามย้อนกลับ 2 ครั้งติดต่อกันอย่างรวดเร็วใน Fragment ที่ 2 จากท้ายสุดใน Back Stack จะทำให้เกิดข้อขัดข้อง (Ifa1a4)

เวอร์ชัน 1.7.0-alpha03

23 สิงหาคม 2023

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

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

  • แก้ไขปัญหาเกี่ยวกับ Fragment เมื่อใช้การย้อนกลับที่คาดการณ์ได้ ซึ่งทำให้ระบบข้าม Fragment แรกใน Back Stack ของ Fragment Manager และทำให้ Activity เสร็จสิ้นเมื่อใช้การย้อนกลับของระบบผ่านการไปยังส่วนต่างๆ แบบ 3 ปุ่มหรือท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ (I0664b, b/295231788)

เวอร์ชัน 1.7.0-alpha02

9 สิงหาคม 2023

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

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

  • เมื่อใช้ Fragment กับท่าทางสัมผัสย้อนกลับแบบคาดการณ์จาก API 34 หากคุณใช้ระบบการเปลี่ยนฉากที่ไม่รองรับการค้นหา (Animations, Transitions) หรือไม่มีการเปลี่ยนฉากเลย ตอนนี้ Fragment จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการย้อนกลับ (I8100c)

เวอร์ชัน 1.7.0-alpha01

7 มิถุนายน 2023

androidx.fragment:fragment-*:1.7.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชันนี้พัฒนาในสาขาภายใน

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment รองรับการย้อนกลับในแอปที่คาดการณ์ได้เมื่อใช้ Animator ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัสสำหรับการย้อนกลับเพื่อดู Fragment ก่อนหน้าด้วย Animator ที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก นอกจากนี้ คุณยังปิดใช้ลักษณะการทำงานใหม่นี้ได้โดยใช้enablePredictiveBack()เวอร์ชันทดลองและส่งfalse

เวอร์ชัน 1.6

เวอร์ชัน 1.6.2

1 พฤศจิกายน 2023

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

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

  • เมื่อขยาย Fragment ของ FragmentContainerView ตอนนี้คุณจะเข้าถึงสถานะของ Fragment เช่น FragmentManager, Host และรหัสได้ในโค้ดเรียกกลับ onInflate (I1e44c, b/307427423)
  • เมื่อใช้ clearBackStack เพื่อนำชุด Fragment ออก ระบบจะล้าง ViewModel ของ Fragment ที่ซ้อนกันเมื่อล้าง ViewModels ของ Fragment หลัก (I6d83c, b/296173018)

เวอร์ชัน 1.6.1

26 กรกฎาคม 2023

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

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

  • แก้ไขปัญหาที่สถานะที่บันทึกไว้ซึ่งจัดเก็บเมื่อหยุดกิจกรรมแต่ไม่ได้ทำลายจะได้รับการแคชอย่างไม่ถูกต้องแม้หลังจากย้ายอินสแตนซ์ Fragment กลับไปที่สถานะ RESUMED แล้วก็ตาม ซึ่งจะทําให้มีการนําสถานะที่แคชไว้กลับมาใช้ซ้ำหากอินสแตนซ์ของ Fragment นั้นอยู่ใน Back Stack เมื่อใช้ API ของ Back Stack หลายรายการเพื่อบันทึกและกู้คืน Fragment นั้น (I71288, b/246289075)

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

  • ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.7.2 แล้ว ซึ่งจะแก้ปัญหาที่ผู้ใช้ Kotlin ไม่สามารถขยาย ComponentDialog ได้หากไม่มีการอ้างอิงที่ชัดเจนใน Activity (b/287509323)

เวอร์ชัน 1.6.0

7 มิถุนายน 2023

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

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

  • สถานะที่บันทึกไว้ของ Fragment ได้รับการแยกออกเป็นสถานะไลบรารีส่วนตัว (คลาส Parcelable ที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ใน Bundle เสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ
  • FragmentManager.OnBackStackChangedListener อินเทอร์เฟซได้รับการขยายด้วยการเรียกกลับเพิ่มเติม 2 รายการของ onBackStackChangeStarted และ onBackStackChangeCommitted ซึ่งจะเรียกใช้กับแต่ละ Fragment ก่อนที่จะเพิ่ม/นำออกจาก Fragment Back Stack และหลังจากที่คอมมิตธุรกรรมตามลำดับ
  • FragmentStrictMode เพิ่ม WrongNestedHierarchyViolation ใหม่ที่ตรวจหาเมื่อมีการฝัง Fragment ของบุตรหลานไว้ในลำดับชั้นการแสดงผลของผู้ปกครอง แต่ไม่ได้เพิ่มลงใน childFragmentManager ของผู้ปกครอง
  • ตอนนี้เราได้ใส่คำอธิบายประกอบที่เหมาะสมให้กับ API Fragment และ FragmentManager ที่รับ Intent หรือ IntentSender ด้วย @NonNull เพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้ขัดข้องทันทีเสมอ
  • DialogFragment ตอนนี้ให้สิทธิ์เข้าถึง ComponentDialog พื้นฐานผ่าน requireComponentDialog() API แล้ว
  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.6.1 แล้ว
  • ตอนนี้ Fragment ขึ้นอยู่กับ SavedState 1.2.1 แล้ว
  • ตอนนี้ Fragment ขึ้นอยู่กับ ProfileInstaller 1.3.0 แล้ว
  • fragment-testing-manifest อาร์ติแฟกต์จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์อื่นๆ ของการทดสอบ Fragment ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง fragment-testing กับ androidx.test

เวอร์ชัน 1.6.0-rc01

10 พฤษภาคม 2023

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

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

  • แก้ไขปัญหาที่ทำให้ระบบส่ง ActivityResult พร้อมรหัสคำขอที่ไม่ถูกต้องเมื่อมีการส่งคำขอ startActivityForResult หลายรายการติดต่อกัน (If0b9d, b/249519359)
  • แก้ไขปัญหาที่onBackStackChangeListenerการเรียกกลับถูกส่งสำหรับธุรกรรมที่ไม่ได้เปลี่ยนสแต็กย้อนกลับจริงๆ หากมีการผสมกับธุรกรรมที่เปลี่ยน (I0eb5c, b/279306628)

เวอร์ชัน 1.6.0-beta01

19 เมษายน 2023

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

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

  • การใช้ postponeEnterTransition ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปรั่วไหลอีกต่อไป (I2ec7d, b/276375110)
  • ตอนนี้ Callback ใหม่ onBackStackChangeStarted และ onBackStackChangeCommitted จะส่งต่อ Fragment เพียงครั้งเดียวเท่านั้น แม้ว่าธุรกรรมหลายรายการจะมี Fragment เดียวกันก็ตาม (Ic6b69)

เวอร์ชัน 1.6.0-alpha09

5 เมษายน 2023

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

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

  • DialogFragment ตอนนี้ให้สิทธิ์เข้าถึง ComponentDialog พื้นฐานผ่าน requireComponentDialog() API แล้ว (I022e3, b/234274777)
  • เราได้ใส่คำอธิบายประกอบ @MainThread ให้กับ API ของ Fragment commitNow(), executePendingTransactions() และ popBackStackImmediate() ซึ่งหมายความว่าตอนนี้ API ทั้งหมดจะส่งข้อผิดพลาดในการบิลด์เมื่อไม่ได้เรียกจากเทรดหลัก แทนที่จะรอให้เกิดข้อผิดพลาดในรันไทม์ (Ic9665, b/236538905)

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

  • แก้ไขข้อบกพร่องใน FragmentManager ที่การบันทึกและกู้คืนในเฟรมเดียวกันอาจทำให้เกิดข้อขัดข้อง (Ib36af, b/246519668)
  • ตอนนี้ OnBackStackChangedListener onBackStackChangeStarted และ onBackStackChangeCommitted จะเรียกใช้เมื่อมีการเปลี่ยนแปลง Back Stack ของ FragmentManager เท่านั้น (I66055, b/274788957)

เวอร์ชัน 1.6.0-alpha08

22 มีนาคม 2023

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

การเปลี่ยนแปลงพฤติกรรม

  • เราได้ปรับเวลาOnBackStackChangedListener.onBackStackChangeCommitedการเรียกกลับให้ดำเนินการก่อนการดำเนินการกับ Fragment ซึ่งจะช่วยให้มั่นใจได้ว่าจะไม่มีการส่ง Fragment ที่ไม่ได้เชื่อมต่อให้กับ Callback (I66a76, b/273568280)

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

  • จาก Fragment 1.5.6: แก้ไขปัญหาที่การเรียก clearFragmentResultListener ภายใน setFragmentResultListener จะไม่ทำงานหาก Lifecycle เป็น STARTED อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)

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

เวอร์ชัน 1.6.0-alpha07

8 มีนาคม 2023

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

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

  • จาก Fragment 1.5.6: แก้ไขปัญหาที่การนำ Fragment ออกไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทำให้เมนูของกิจกรรมใช้ไม่ได้ (50f098, b/244336571)

เวอร์ชัน 1.6.0-alpha06

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

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

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้ระบบจะเรียกใช้onBackStackChangedStartedการเรียกกลับในFragmentManageronBackStackChangedListener ใหม่ก่อนที่ Fragment จะเริ่มย้ายไปยังสถานะเป้าหมาย (I34726)

เวอร์ชัน 1.6.0-alpha05

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

androidx.fragment:fragment-*:1.6.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha05 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • ตอนนี้อินเทอร์เฟซ FragmentManager.OnBackStackChagnedListener มีการเรียกกลับเพิ่มเติม 2 รายการ ได้แก่ onBackStackChangeStarted และ onBackStackChangeCommitted ซึ่งช่วยให้มีข้อมูลและการควบคุมเพิ่มเติมเมื่อมีการเปลี่ยนแปลง Back Stack ใน FragmentManager (Ib7ce5, b/238686802)

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

  • ตอนนี้เราได้ใส่คำอธิบายประกอบที่เหมาะสมด้วย @NonNull ให้กับ API Fragment และ FragmentManager ที่ใช้ Intent หรือ IntentSender เพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้ขัดข้องทันทีเสมอ (I06fd4)

เวอร์ชัน 1.6.0-alpha04

7 ธันวาคม 2022

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

ฟีเจอร์ใหม่

  • FragmentStrictMode เพิ่ม WrongNestedHierarchyViolation ใหม่ที่ตรวจหาเมื่อมีการฝัง Fragment ของบุตรหลานไว้ในลำดับชั้นการแสดงผลของผู้ปกครอง แต่ไม่ได้เพิ่มลงใน childFragmentManager ของผู้ปกครอง (I72521, b/249299268)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้ Fragment จะกู้คืนสถานะ SavedStateRegistry ก่อน onAttach() เพื่อให้มั่นใจว่าสถานะจะพร้อมใช้งานจากวิธีการวงจรทั้งหมดที่สูงขึ้น (I1e2b1)

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

  • อาร์ติแฟกต์ fragment-testing-manifest จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

วิธีนี้จะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง fragment-testing กับ androidx.test(I8e534, b/128612536)

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

  • จาก Fragment 1.5.5: Fragment จะไม่บันทึกสถานะ ViewModel เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอย่างไม่ถูกต้องอีกต่อไป (I10d2b, b/253546214)

เวอร์ชัน 1.6.0-alpha03

5 ตุลาคม 2022

androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03 และ androidx.fragment:fragment-testing:1.6.0-alpha03 จะเปิดตัว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตต่อไปนี้

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

  • ตอนนี้คลาสที่ขยาย DialogFragment จะต้องเรียกใช้ super ในการลบล้าง onDismiss() (I14798, b/238928865)

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

  • แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซการเรียกกลับของผู้ให้บริการรายใหม่ (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) เพื่อให้มั่นใจว่า Fragment จะได้รับการเรียกกลับที่เหมาะสมเสมอ (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)

เวอร์ชัน 1.6.0-alpha02

24 สิงหาคม 2022

androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02 และ androidx.fragment:fragment-testing:1.6.0-alpha02 จะเปิดตัว เวอร์ชัน 1.6.0-alpha02 มีคอมมิตเหล่านี้

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

  • จาก Fragment 1.5.2: แก้ไขปัญหาที่การดำเนินการธุรกรรม popBackStack() และ replace() พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้ Animation/Animator ที่ไม่ถูกต้อง (Ib1c07, b/214835303)

เวอร์ชัน 1.6.0-alpha01

27 กรกฎาคม 2022

androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01 และ androidx.fragment:fragment-testing:1.6.0-alpha01 จะเปิดตัว เวอร์ชัน 1.6.0-alpha01 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลงพฤติกรรม

  • สถานะที่บันทึกไว้ของ Fragment ได้รับการแยกออกเป็นสถานะไลบรารีส่วนตัว (คลาส Parcelable ที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ใน Bundle เสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ (b/207158202)

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

  • จาก Fragment 1.5.1: แก้ไขการถดถอยใน DialogFragmentCallbacksDetector ซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)

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

รุ่น 1.5

เวอร์ชัน 1.5.7

19 เมษายน 2023

androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7 และ androidx.fragment:fragment-testing:1.5.7 จะเปิดตัว เวอร์ชัน 1.5.7 มีคอมมิตเหล่านี้

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

  • การใช้ postponeEnterTransition ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปรั่วไหลอีกต่อไป (I2ec7d, b/276375110)

เวอร์ชัน 1.5.6

22 มีนาคม 2023

androidx.fragment:fragment:1.5.6, androidx.fragment:fragment-ktx:1.5.6 และ androidx.fragment:fragment-testing:1.5.6 จะเปิดตัว เวอร์ชัน 1.5.6 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่การนำ Fragment ออกไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทำให้เมนูของกิจกรรมไม่ถูกต้อง (50f098, b/244336571)
  • แก้ไขปัญหาที่การเรียก clearFragmentResultListener ภายใน setFragmentResultListener จะไม่ทำงานหาก Lifecycle เป็น STARTED อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)

เวอร์ชัน 1.5.5

7 ธันวาคม 2022

androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5 และ androidx.fragment:fragment-testing:1.5.5 จะเปิดตัว เวอร์ชัน 1.5.5 มีคอมมิตเหล่านี้

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

  • Fragment จะไม่บันทึกสถานะ ViewModel อย่างไม่ถูกต้องเป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอีกต่อไป (I10d2b, b/253546214)

เวอร์ชัน 1.5.4

24 ตุลาคม 2022

androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4 และ androidx.fragment:fragment-testing:1.5.4 จะเปิดตัว เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อผิดพลาดที่การใช้ FragmentController ที่กำหนดเองกับโฮสต์ที่ไม่ได้ใช้ส่วนติดต่อการเรียกกลับของผู้ให้บริการ (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) และการเรียกใช้ฟังก์ชันการส่งที่เลิกใช้งานแล้วจะส่งไปยัง Fragment ลูกไม่สำเร็จ (I9b380)

เวอร์ชัน 1.5.3

21 กันยายน 2022

androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3 และ androidx.fragment:fragment-testing:1.5.3 จะเปิดตัว เวอร์ชัน 1.5.3 มีคอมมิตต่อไปนี้

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

  • แก้ไขข้อผิดพลาดที่ทำให้ Fragment ใน Back Stack ได้รับการเรียกกลับ onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() และ onConfigurationChanged() (I34581, I8dfe6, b/242570955)
  • Fragment ลูกที่ซ้อนกันจะไม่ได้รับการเรียกกลับ onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() หรือ onConfigurationChanged() หลายรายการอีกต่อไป (I690b3, Id0096, If9d6b, I2cba2)

รุ่น 1.5.2

10 สิงหาคม 2022

androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2 และ androidx.fragment:fragment-testing:1.5.2 จะเปิดตัว เวอร์ชัน 1.5.2 มีคอมมิตต่อไปนี้

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

  • แก้ไขปัญหาที่การดำเนินการธุรกรรม popBackStack() และ replace() พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้ Animation/Animator ที่ไม่ถูกต้อง (Ib1c07, b/214835303)

รุ่น 1.5.1

27 กรกฎาคม 2022

androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1 และ androidx.fragment:fragment-testing:1.5.1 จะเปิดตัว เวอร์ชัน 1.5.1 มีคอมมิตต่อไปนี้

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

  • แก้ไขการเกิดปัญหาซ้ำใน DialogFragmentCallbacksDetector ซึ่งการใช้เวอร์ชันเครื่องมือวิเคราะห์ซอร์สโค้ดที่มาพร้อมกับ AGP 7.4 จะทำให้เครื่องมือวิเคราะห์ซอร์สโค้ดขัดข้อง (b/237567009)

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

  • ตอนนี้ไลบรารี Fragment ขึ้นต่อกันกับ Lifecycle 2.5.1 แล้ว (Id204c)
  • ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity 1.5.1 แล้ว (I10f07)

เวอร์ชัน 1.5.0

29 มิถุนายน 2022

androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0 และ androidx.fragment:fragment-testing:1.5.0 จะเปิดตัว เวอร์ชัน 1.5.0 มีคอมมิตต่อไปนี้

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

  • การผสานรวม CreationExtras - Fragment ตอนนี้สามารถระบุ ViewModelProvider.Factory แบบไม่เก็บสถานะผ่าน วงจร 2.5.0 ของ CreationExtras ได้แล้ว
  • การผสานรวมกล่องโต้ตอบคอมโพเนนต์ - DialogFragment ตอนนี้ใช้ ComponentDialog ผ่าน Activity 1.5.0 เป็นกล่องโต้ตอบเริ่มต้นที่ onCreateDialog() แสดงผล
  • การปรับโครงสร้างโค้ดสถานะอินสแตนซ์ที่บันทึกไว้ - Fragment เริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์ ซึ่งเป็นความพยายามที่จะช่วยระบุอย่างชัดเจนว่ามีการบันทึกสถานะใดไว้ใน Fragment และแหล่งที่มาของสถานะ การเปลี่ยนแปลงในปัจจุบันมีดังนี้
    • FragmentManager จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงใน Bundle แทนที่จะบันทึกลงใน Parcelable ที่กำหนดเองโดยตรง
    • ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าผ่าน Fragment Result APIs ซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของ FragmentManager
    • ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ FragmentManager ซึ่งจะช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในบันทึกการแก้ไขข้อบกพร่องของ Fragment ได้

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

  • FragmentStrictMode มีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้ allowViolation() กับชื่อคลาส
  • เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน ActionBar ของกิจกรรมแล้ว API MenuHost และ MenuProvider ที่เพิ่มเข้ามาใน Activity 1.4.0 มีพื้นผิว API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของกิจกรรม ซึ่ง Fragment ควรใช้

เวอร์ชัน 1.5.0-rc01

11 พฤษภาคม 2022

androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01 และ androidx.fragment:fragment-testing:1.5.0-rc01 จะเปิดตัว เวอร์ชัน 1.5.0-rc01 มีคอมมิตเหล่านี้

การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้

  • ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ FragmentManager ซึ่งช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในการบันทึกการแก้ไขข้อบกพร่องของ Fragment ได้ (a153e0, b/207158202)

เวอร์ชัน 1.5.0-beta01

20 เมษายน 2022

androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01 และ androidx.fragment:fragment-testing:1.5.0-beta01 จะเปิดตัว เวอร์ชัน 1.5.0-beta01 มีคอมมิตต่อไปนี้

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

  • DialogFragment ได้เพิ่มเมธอด dismissNow ใหม่ที่ใช้ commitNow เพื่อให้เทียบเท่ากับฟังก์ชัน showNow โปรดทราบว่าการดำเนินการนี้จะไม่ทำให้Dialogถูกปิดในทันที แต่จะอัปเดตสถานะของFragmentManagerแบบพร้อมกันเท่านั้น (I15c36, b/72644830)

การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้

  • FragmentManager จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงใน Bundle แทนที่จะบันทึกลงใน Parcelable ที่กำหนดเองโดยตรง นี่เป็นขั้นตอนแรกในการเพิ่มความโปร่งใสเกี่ยวกับสิ่งที่ Fragments บันทึกไว้จริงๆ (I93807, b/207158202)
  • ตอนนี้ระบบจะบันทึกชุดผลลัพธ์ที่ตั้งค่าผ่าน Fragment Result APIs ซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของ FragmentManager ซึ่งจะช่วยให้มีความโปร่งใสเพิ่มเติมเกี่ยวกับผลลัพธ์ที่บันทึกไว้เป็นส่วนหนึ่งของสถานะอินสแตนซ์ที่บันทึกไว้ (I6ea12, b/207158202)

เวอร์ชัน 1.5.0-alpha05

6 เมษายน 2022

androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05 และ androidx.fragment:fragment-testing:1.5.0-alpha05 จะเปิดตัว เวอร์ชัน 1.5.0-alpha05 มีคอมมิตต่อไปนี้

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

เวอร์ชัน 1.5.0-alpha04

23 มีนาคม 2022

androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04 และ androidx.fragment:fragment-testing:1.5.0-alpha04 จะเปิดตัว เวอร์ชัน 1.5.0-alpha04 มีคอมมิตเหล่านี้

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

  • เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูในActionBarของกิจกรรมแล้ว เนื่องจาก API ดังกล่าวเชื่อมโยง Fragment กับกิจกรรมอย่างใกล้ชิดและไม่สามารถทดสอบแยกกันได้ API MenuHost และ MenuProvider ที่เพิ่มเข้ามาใน Activity 1.4.0-alpha01 มีพื้นผิว API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของกิจกรรม ซึ่ง Fragment ควรใช้ (I50a59, I20758)

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

  • ตอนนี้ SavedStateViewFactory รองรับการใช้ CreationExtras แม้ว่าจะเริ่มต้นด้วย SavedStateRegistryOwner ก็ตาม หากมีการระบุอาร์กิวเมนต์เพิ่มเติม ระบบจะไม่สนใจอาร์กิวเมนต์ที่เริ่มต้น (I6c43b, b/224844583)

เวอร์ชัน 1.5.0-alpha03

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

androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03 และ androidx.fragment:fragment-testing:1.5.0-alpha03 จะเปิดตัว เวอร์ชัน 1.5.0-alpha03 มีคอมมิตต่อไปนี้

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

  • ตอนนี้คุณส่ง CreationExtras ไปยังฟังก์ชัน by viewModels() และ by activityViewModels() ได้แล้ว (Ibefe7, b/217601110)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้ DialogFragment ใช้ ComponentDialog เป็นค่าเริ่มต้น กล่องโต้ตอบที่ onCreateDialog() แสดงผล (If3784, b/217618170)

เวอร์ชัน 1.5.0-alpha02

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

androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02 และ androidx.fragment:fragment-testing:1.5.0-alpha02 จะเปิดตัว เวอร์ชัน 1.5.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentStrictMode มีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้ allowViolation() กับชื่อคลาส (I8f678)

เวอร์ชัน 1.5.0-alpha01

26 มกราคม 2022

androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01 และ androidx.fragment:fragment-testing:1.5.0-alpha01 จะเปิดตัว เวอร์ชัน 1.5.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

  • จาก Fragment 1.4.1: FragmentContainerView จะไม่ทําให้เกิดข้อยกเว้นสถานะที่ไม่ถูกต้อง อีกต่อไปเมื่อรหัสมุมมองที่สร้างจาก XML มีค่าเป็นลบ (Ic185b, b/213086140)
  • จาก Fragment 1.4.1: เมื่อใช้ ownerProducer แลมบ์ดาที่กำหนดเองกับฟังก์ชัน by viewModels() lazy ระบบจะใช้ defaultViewModelProviderFactory จากเจ้าของนั้นหากไม่ได้ระบุ ViewModelProvider.Factory ที่กำหนดเอง แทนที่จะใช้ Factory ของ Fragment เสมอ (I56170, b/214106513)
  • แก้ไขข้อขัดข้องเมื่อเข้าถึง ViewModel เป็นครั้งแรกจากregisterForActivityResult() Callback ของ Fragment (Iea2b3)

เวอร์ชัน 1.4

เวอร์ชัน 1.4.1

26 มกราคม 2022

androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1 และ androidx.fragment:fragment-testing:1.4.1 จะเปิดตัว เวอร์ชัน 1.4.1 มีคอมมิตเหล่านี้

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

  • FragmentContainerView จะไม่ทําให้เกิดข้อยกเว้นสถานะที่ผิดกฎหมาย อีกต่อไปเมื่อรหัสมุมมองที่สร้างจาก XML มีค่าเป็นลบ (Ic185b, b/213086140)
  • เมื่อใช้ ownerProducer Lambda ที่กำหนดเองกับฟังก์ชัน by viewModels() lazy ตอนนี้จะใช้ defaultViewModelProviderFactory จากเจ้าของนั้นหากไม่ได้ระบุ ViewModelProvider.Factory ที่กำหนดเอง แทนที่จะใช้ Factory ของ Fragment เสมอ (I56170, b/214106513)

เวอร์ชัน 1.4.0

17 พฤศจิกายน 2021

androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0 และ androidx.fragment:fragment-testing:1.4.0 จะเปิดตัว เวอร์ชัน 1.4.0 มีคอมมิตต่อไปนี้

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

  • FragmentStrictMode API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะส่งข้อความในบันทึกเข้าจอ เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่า FragmentStrictMode.Policy ที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่เรียกใช้ได้ใน FragmentManager ผ่านเมธอด setStrictModePolicy() ใหม่ นโยบายดังกล่าวมีผลกับ FragmentManager นั้นและมีผลต่อเนื่องไปยัง FragmentManager ย่อยใดๆ ที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดูโหมดเข้มงวดสำหรับ Fragment
  • FragmentContainerView มีเมธอด getFragment() ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับ findFragmentById() โดยมีรหัสของ FragmentContainerView แต่จะอนุญาตให้เชื่อมโยงการเรียกได้

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • ตอนนี้ FragmentScenario ได้ติดตั้งใช้งาน Closeable แล้ว ซึ่งช่วยให้คุณใช้ กับเมธอด use ของ Kotlin หรือ try-with-resources ได้

  • เพิ่ม FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยนภาพ Fragment หรือไม่

  • เราได้นำ API เวอร์ชันทดลองของ FragmentManager.enableNewStateManager(boolean) ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน

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

FragmentManager จะดูแล Back Stack ที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณป๊อปธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม

การเปิดตัวนี้จะขยายกลไกเหล่านี้โดยการจัดหา FragmentManager API ใหม่ 3 รายการ ได้แก่ saveBackStack(String name), restoreBackStack(String name) และ clearBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุกๆ Fragment ที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมในภายหลังได้ ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพด้วยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้

saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้

  • saveBackStack() มีความครอบคลุมเสมอ
  • popBackStack() จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่ saveBackStack() จะไม่ทําอะไรหากคุณไม่ได้ทําธุรกรรม Fragment ก่อนหน้านี้โดยใช้ addToBackStack() ที่มีชื่อที่แน่นอนและไม่ใช่ค่าว่าง
  • ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียกใช้ onSaveInstanceState() ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ ViewModel ที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และ จะไม่เรียกใช้ onCleared() ในอินสแตนซ์เหล่านั้น)

ธุรกรรมแบบแยกส่วนที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้

  • ธุรกรรมของแต่ละ Fragment ต้องใช้ setReorderingAllowed(true) เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้
  • ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าจะมีอะไรเปลี่ยนแปลงใน Back Stack ในช่วงเวลาดังกล่าวก็ตาม
  • ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า FragmentManager จะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว

เช่นเดียวกับ saveBackStack(), restoreBackStack() และ clearBackStack() ซึ่งจะกู้คืนหรือล้าง Back Stack ที่บันทึกไว้ก่อนหน้าตามลำดับ ทั้ง 2 อย่างนี้จะไม่ทำอะไรเลยหากคุณไม่ได้เรียก saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้

ดูข้อมูลเพิ่มเติมได้ที่สแต็กย้อนกลับหลายรายการ: เจาะลึก

เวอร์ชัน 1.4.0-rc01

3 พฤศจิกายน 2021

androidx.fragment:fragment:1.4.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก Fragment 1.4.0-beta01 เวอร์ชัน 1.4.0-rc01 มีคอมมิตเหล่านี้

เวอร์ชัน 1.4.0-beta01

27 ตุลาคม 2021

androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 และ androidx.fragment:fragment-testing:1.4.0-beta01 จะเปิดตัว เวอร์ชัน 1.4.0-beta01 มีคอมมิตเหล่านี้

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

  • ตอนนี้ Fragment หลักจะส่ง onHiddenChanged() ลงไป ทั้งลำดับชั้นก่อนที่จะเรียกใช้การเรียกกลับของตัวเอง (Iedc20, b/77504618)
  • ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อเปลี่ยนจาก Fragment ที่มีแป้นพิมพ์เปิดอยู่ไปยัง Fragment ที่มี RecyclerView (I8b842, b/196852211)
  • DialogFragment ตอนนี้ใช้ setReorderingAllowed(true) สำหรับธุรกรรมทั้งหมด ที่สร้างขึ้นเมื่อคุณเรียกใช้ show(), showNow() หรือ dismiss() (Ie2c14)
  • เราได้ย่อคำเตือน Lint ที่ยาวมากของ DetachAndAttachFragmentInSameFragmentTransaction เป็น DetachAndAttachSameFragment แล้ว (e9eca3)

เวอร์ชัน 1.4.0-alpha10

29 กันยายน 2021

androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 และ androidx.fragment:fragment-testing:1.4.0-alpha10 จะเปิดตัว เวอร์ชัน 1.4.0-alpha10 มีคอมมิตเหล่านี้

เครื่องมือวิเคราะห์ซอร์สโค้ด

  • เพิ่มDetachAndAttachFragmentInSameFragmentTransactionคำเตือน Lint สำหรับการตรวจหาการเรียกทั้ง detach() และ attach() ใน Fragment เดียวกันใน FragmentTransaction เดียวกัน เนื่องจากเมื่อดำเนินการในธุรกรรมเดียวกัน การดำเนินการเสริมเหล่านี้จะยกเลิกซึ่งกันและกัน จึงต้องแยกออกเป็นธุรกรรมที่แยกกันเพื่อดำเนินการจริง (aosp/1832956, b/200867930)
  • เพิ่มข้อผิดพลาดของ FragmentAddMenuProvider Lint สำหรับการแก้ไขการใช้งานวงจรของ Fragment เป็นวงจรของมุมมอง Fragment เมื่อใช้ addMenuProvider API ของ MenuHost (aosp/1830457, b/200326272)

การอัปเดตเอกสารประกอบ

  • ข้อความการเลิกใช้งานสำหรับ API ที่ตอนนี้Activity Result API จัดการอยู่ ซึ่งได้แก่ startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions และ onRequestPermissionsResult ได้รับการขยายรายละเอียดเพิ่มเติมแล้ว (cce80f)
  • ข้อความการเลิกใช้งานสำหรับ onActivityCreated() ทั้ง Fragment และ DialogFragment ได้รับการขยายรายละเอียดเพิ่มเติมทั้งหมดแล้ว (224db4)

เวอร์ชัน 1.4.0-alpha09

15 กันยายน 2021

androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09 และ androidx.fragment:fragment-testing:1.4.0-alpha09 จะเปิดตัว เวอร์ชัน 1.4.0-alpha09 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

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

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

  • เราได้เขียนFragmentContainerViewคลาสใหม่ใน Kotlin เพื่อให้มั่นใจว่าฟังก์ชัน getFragment จะพิจารณา ค่า Null อย่างถูกต้อง (If694a, b/189629145)
  • ตอนนี้ FragmentStrictMode เขียนด้วย Kotlin แล้ว (I11767, b/199183506)

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

  • แก้ไขปัญหาที่สถานะของ Fragment ซึ่งเพิ่มด้วย setReorderingAllowed(true) แล้ว นำออกทันทีก่อนที่จะดำเนินการธุรกรรมที่รอดำเนินการ จะไม่ได้รับการล้างข้อมูลอย่างถูกต้อง (I8ccb8)

เวอร์ชัน 1.4.0-alpha08

1 กันยายน 2021

androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08 และ androidx.fragment:fragment-testing:1.4.0-alpha08 จะเปิดตัว เวอร์ชัน 1.4.0-alpha08 มีคอมมิตต่อไปนี้

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

  • ปรับปรุงUseRequireInsteadOfGetการตรวจสอบ Lint เพื่อจัดการวงเล็บซ้ำได้ดียิ่งขึ้น (I2d865)
  • ปรับปรุงUseGetLayoutInflaterการตรวจสอบ Lint เพื่อจัดการกรณีขอบเพิ่มเติม (Ie5423)

เวอร์ชัน 1.4.0-alpha07

18 สิงหาคม 2021

androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 และ androidx.fragment:fragment-testing:1.4.0-alpha07 เปิดตัวโดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 1.4.0-alpha07 มีคอมมิตต่อไปนี้

เวอร์ชัน 1.4.0-alpha06

4 สิงหาคม 2021

androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06 และ androidx.fragment:fragment-testing:1.4.0-alpha06 จะเปิดตัว เวอร์ชัน 1.4.0-alpha06 มีคอมมิตต่อไปนี้

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

  • แก้ไขปัญหาเกี่ยวกับ Back Stack หลายรายการเมื่อสลับระหว่าง Back Stack อย่างรวดเร็ว ซึ่งจะปรากฏเป็น IllegalStateException ขณะคืนค่า FragmentTransaction หรือเป็น สำเนาที่ 2 ของ Fragment ที่ปรากฏ (I9039f)
  • แก้ไขปัญหาที่ FragmentManager จะเก็บสำเนาของสถานะที่บันทึกไว้ก่อนหน้านี้ ผ่าน saveBackStack() แม้หลังจากที่กู้คืนสถานะนั้นแล้ว ก็ตาม (Ied212)
  • dismissAllowingStateLoss() เมธอด ของ DialogFragment จะไม่ขัดข้องอีกต่อไปเมื่อคุณเรียกใช้ หลังจากบันทึกสถานะเมื่อเพิ่ม DialogFragment ผ่าน show(FragmentTransaction, String) เมธอดโดยเฉพาะ (I84422)

เวอร์ชัน 1.4.0-alpha05

21 กรกฎาคม 2021

androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05 และ androidx.fragment:fragment-testing:1.4.0-alpha05 จะเปิดตัว เวอร์ชัน 1.4.0-alpha05 มีคอมมิตเหล่านี้

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

  • จาก Fragment 1.3.6: ตอนนี้ระบบจะตั้งค่ามุมมองของ Fragment เป็น GONE อย่างถูกต้องเมื่อใช้ hide() เมื่อมุมมองรูทมีการตั้งค่า transitionGroup=”true” (aosp/1766655, b/193603427)
  • จาก Fragment 1.3.6: ตอนนี้ FragmentActivity จะปลดล็อกสถานะที่บันทึกไว้เสมอ เป็นการดำเนินการแรกในวงจร การเรียกกลับของวงจรที่แทนที่ (I6db7a)

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

เวอร์ชัน 1.4.0-alpha04

30 มิถุนายน 2021

androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04 และ androidx.fragment:fragment-testing:1.4.0-alpha04 จะเปิดตัว เวอร์ชัน 1.4.0-alpha04 มีคอมมิตต่อไปนี้

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

  • ตอนนี้ FragmentManager ใช้ SavedStateRegistry เบื้องหลังเพื่อบันทึกสถานะ นอกจากนี้ เรายังเลิกใช้เมธอด saveAllState() และ restoreSavedState() ใน FragmentController ด้วย หากใช้ FragmentController เพื่อโฮสต์ Fragment นอก FragmentActivity คุณควรให้ FragmentHostCallbacks ใช้ SavedStateRegistryOwner (Iba68e, b/188734238)

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

  • แก้ไขปัญหาที่การเรียกใช้ saveBackStack() ซึ่งเป็นส่วนหนึ่งของการรองรับหลายแบ็ก สแต็กจะล้มเหลวเมื่อดำเนินการพร้อมกับ การเรียกใช้ FragmentTransaction ที่ใช้ replace() (I73137)
  • แก้ไขNullPointerExceptionที่ จะเกิดขึ้นหลังจากกู้คืนสแต็กย้อนกลับที่บันทึกไว้ ด้วยตนเองซึ่งมีธุรกรรมหลายรายการ เมื่อใช้ restoreBackStack() API สำหรับ การรองรับสแต็กย้อนกลับหลายรายการ นอกจากนี้ ยังแก้ไขปัญหาที่ระบบไม่ได้ตรวจสอบ setReorderingAllowed(true) สำหรับธุรกรรมทั้งหมดด้วย (I8c593)
  • แก้ไขปัญหาที่ FragmentManager จะ กู้คืนสถานะที่บันทึกไว้ก่อนหน้านี้ของ Fragment อย่างไม่ถูกต้องต่อไปแม้หลังจากนำ Fragment เหล่านั้นออกจาก FragmentManager แล้วก็ตาม ซึ่งทำให้สถานะที่บันทึกไว้ เพิ่มขึ้นเรื่อยๆ เมื่อเวลาผ่านไป (I1fb8e)

เวอร์ชัน 1.4.0-alpha03

16 มิถุนายน 2021

androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 และ androidx.fragment:fragment-testing:1.4.0-alpha03 จะเปิดตัว เวอร์ชัน 1.4.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เราได้อัปเดตคลาส Fragment StrictMode Violation ทั้งหมดด้วยข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งอธิบายรายละเอียดของการละเมิด (b/187871638)
    • FragmentTagUsageViolation ตอนนี้มีข้อความแสดงข้อผิดพลาดที่ละเอียดขึ้น ซึ่งมีคอนเทนเนอร์ระดับบนสุด ที่ควรเพิ่ม Fragment (Ic33a7)
    • WrongFragmentContainerViolation ตอนนี้มีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้น ซึ่งรวมถึงคอนเทนเนอร์ที่ มีการเพิ่ม Fragment (Ib55f8)
    • ตอนนี้คลาสกรณีการใช้งานสำหรับ TargetFragmentUsageViolation มีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้น ซึ่งรวมถึงส่วนที่ทำให้เกิดการละเมิดและข้อมูลอื่นๆ ที่มีอยู่ (Icc6ac)
    • คลาสที่ขยาย RetainInstanceUsageViolation จะมีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งรวมถึง Fragment ที่ทำให้เกิดการละเมิด (I6bd55)
    • FragmentReuseViolation ตอนนี้มีข้อความแสดงข้อผิดพลาดที่ ละเอียดยิ่งขึ้นซึ่งรวมถึงรหัสก่อนหน้า ของส่วน (I28ce2)
    • SetUserVisibleHintViolation มีข้อความแสดงข้อผิดพลาดที่ ละเอียดยิ่งขึ้นซึ่งรวมถึงคำแนะนำที่ผู้ใช้ มองเห็นที่กำลังตั้งค่า (Ib2d5f)

การเปลี่ยนแปลงพฤติกรรม

  • ยกเลิกการจำกัดการเรียกใช้ fitsSystemWindows ใน FragmentContainerView แล้ว ซึ่งจะไม่ทำให้แอปขัดข้องอีกต่อไป (6b8ddd, b/190622202)

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

  • จาก Fragment 1.3.5: แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบแบบใช้ร่วมกันที่เปิดตัวใน Fragment 1.3.4 โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนฉากได้อย่างถูกต้อง (ทั้งที่ตั้งค่าโดยตรงผ่าน transitionGroup="true" หรือโดยอ้อมผ่าน transitionName หรือ background) และ องค์ประกอบที่ใช้ร่วมกันจะไม่ทำให้เกิด IndexOutOfBoundsException อีกต่อไป (I16484, b/188679569, b/188969304)
  • FragmentManager จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนการนำ Fragment ออก (I573dd, b/183634730)
  • OnCreateDialogIncorrectCallbackการตรวจสอบ Lint จะไม่ ขัดข้องอีกต่อไปเมื่อประเมินตัวแปรระดับบนสุด (0a9efa, b/189967522)

เวอร์ชัน 1.4.0-alpha02

2 มิถุนายน 2021

androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02 และ androidx.fragment:fragment-testing:1.4.0-alpha02 จะเปิดตัว เวอร์ชัน 1.4.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentStrictMode จะบันทึกการละเมิดเสมอเมื่อเปิดใช้การบันทึกผ่าน FragmentManager ไม่ว่านโยบายโหมดเข้มงวดที่ใช้อยู่ในปัจจุบันจะเป็นอย่างไร (I02df6, b/187872638)
  • FragmentStrictMode ตอนนี้รองรับการยกเว้นFragmentบางชั้นเรียนจากViolationโหมดเข้มงวดแล้ว ซึ่งจะช่วยให้ชั้นเรียนนั้นหลีกเลี่ยงค่าปรับได้ (Ib4e5d, b/184786736)

  • เราได้ขยายคลาส FragmentStrictMode Violation เพื่อเพิ่มข้อมูลโครงสร้างตามการละเมิดแต่ละครั้ง ซึ่งจะช่วยให้คุณตรวจสอบได้อย่างชัดเจนว่าอะไรเป็นสาเหตุของการละเมิด รวมถึงตรวจสอบ Fragment ที่ละเมิด (If5118, b/187871150) โดยแต่ละ Violation จะมีข้อมูลต่อไปนี้

    • WrongFragmentContainerViolation ตอนนี้มี ViewGroup ที่ Fragment พยายามเพิ่ม (I83c75, b/187871150)
    • TargetFragmentUsageViolation ได้ขยายไปยัง SetTargetFragmentUsageViolation GetTargetFragmentUsageViolation และ GetTargetFragmentRequestCodeUsageViolation โดย SetTargetFragmentUsageViolation มีทั้งโค้ดคำขอและโค้ดส่วนเป้าหมาย (I741b4, b/187871150)
    • SetUserVisibleHintViolation ตอนนี้มีค่าบูลีนที่ส่งไปยัง setUserVisibleHint() แล้ว (I00585, b/187871150)
    • FragmentTagUsageViolation มี ViewGroup ที่แท็ก <fragment> พยายามขยาย Fragment เข้าไป(I5dbbc, b/187871150)
    • FragmentReuseViolation ตอนนี้มี รหัสที่ไม่ซ้ำกันของอินสแตนซ์ก่อนหน้าของ Fragment ที่ทำให้เกิดการละเมิด (I0544d, b/187871150)
    • RetainInstanceUsageViolation ตอนนี้เป็น นามธรรมและมี 2 คลาสย่อย ได้แก่ SetRetainInstanceUsageViolation และ GetRetainInstanceUsageViolation ซึ่งแสดงถึง 2 กรณี สำหรับประเภทการละเมิด (Ic81e5, b/187871150)

การเปลี่ยนแปลงพฤติกรรม

  • FragmentContainerView จะส่งข้อยกเว้นเมื่อพยายามเปลี่ยนแอตทริบิวต์ fitsSystemWindow โดยใช้โปรแกรมหรือผ่าน XML โดยแต่ละมุมมองของ Fragment จะจัดการ Inset (Ie6651, b/187304502)

เวอร์ชัน 1.4.0-alpha01

18 พฤษภาคม 2021

androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01 และ androidx.fragment:fragment-testing:1.4.0-alpha01 จะเปิดตัว เวอร์ชัน 1.4.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentContainerView มีเมธอด getFragment() ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับ findFragmentById() โดยมีรหัสของ FragmentContainerView แต่จะอนุญาตให้เชื่อมโยงการโทร (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • เพิ่ม FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยนภาพ Fragment หรือไม่ (I46652)

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

FragmentManager จะดูแล Back Stack ที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณป๊อปธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม

การเปิดตัวนี้จะขยายกลไกเหล่านี้ด้วยการจัดหา FragmentManager API ใหม่ 2 รายการ ได้แก่ saveBackStack(String name) และ restoreBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุก Fragment ที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมเหล่านั้นและ Fragment ของธุรกรรมพร้อมสถานะของธุรกรรมในภายหลังได้ ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพด้วยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้

saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้

  • saveBackStack() มีความครอบคลุมเสมอ
  • popBackStack() จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่ saveBackStack() จะไม่ทําอะไรหากคุณไม่ได้ทําธุรกรรม Fragment ก่อนหน้านี้โดยใช้ addToBackStack() ที่มีชื่อที่แน่นอนและไม่ใช่ค่าว่าง
  • ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียกใช้ onSaveInstanceState() ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ ViewModel ที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และ จะไม่เรียกใช้ onCleared() ในอินสแตนซ์เหล่านั้น)

ธุรกรรมแบบแยกส่วนที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้

  • ธุรกรรมของแต่ละ Fragment ต้องใช้ setReorderingAllowed(true) เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้
  • ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วนในตัวเอง (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าจะมีอะไรเปลี่ยนแปลงใน Back Stack ในช่วงเวลาดังกล่าวก็ตาม
  • ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า FragmentManager จะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว

เช่นเดียวกับ saveBackStack() restoreBackStack() จะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้ (b/80029773)

StrictMode ของ Fragment

FragmentStrictMode API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะส่งข้อความในบันทึกเข้าจอ เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่า FragmentStrictMode.Policy ที่ควบคุมการตรวจสอบที่เปิดใช้และ "บทลงโทษ" ที่เรียกใช้ได้ใน FragmentManager ผ่านเมธอด setStrictModePolicy() ใหม่ นโยบายดังกล่าวมีผลกับ FragmentManager นั้นและมีผลต่อเนื่องไปยัง FragmentManager ย่อยใดๆ ที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง (#123, #131, #150, b/143774122)

  • detectFragmentReuse() จะตรวจหาว่ามีการเพิ่มอินสแตนซ์ Fragment ที่นำออกไปก่อนหน้านี้กลับเข้าไปใน FragmentManager หรือไม่ คุณไม่ควรโต้ตอบหรือเก็บข้อมูลอ้างอิงถึงอินสแตนซ์ Fragment หลังจากที่ระบบทำลายและนำออกจาก FragmentManager แล้ว (#142, b/153738653)
  • detectFragmentTagUsage() จะตรวจจับเมื่อคุณใช้แท็ก <fragment> ใน XML ของเลย์เอาต์ คุณควรใช้ FragmentContainerView เสมอเมื่อขยาย Fragment เป็นส่วนหนึ่งของเลย์เอาต์ (#141, b/153738235)
  • detectWrongFragmentContainer() จะตรวจจับเมื่อคุณเพิ่ม Fragment ลงใน Container ที่ไม่ใช่ FragmentContainerView คุณควรใช้ FragmentContainerView เป็นคอนเทนเนอร์สำหรับ Fragment ในเลย์เอาต์เสมอ (#146, b/181137036)
  • detectRetainInstanceUsage() จะตรวจหาเมื่อคุณใช้ API setRetainInstance() หรือ getRetainInstance() ที่เลิกใช้งานแล้ว (#140, b/153737954)
  • detectSetUserVisibleHint() จะตรวจหาเมื่อคุณใช้ setUserVisibleHint() API ที่เลิกใช้งานแล้ว (#136, b/153738974)
  • detectTargetFragmentUsage() จะตรวจหาเมื่อคุณใช้ API setTargetFragment(), getTargetFragment() หรือ getTargetRequestCode() ที่เลิกใช้งานแล้ว (#139, b/153737745)

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

การตรวจสอบ Lint ใหม่

  • UseGetLayoutInflaterการตรวจสอบ Lint จะแสดงคำเตือนเมื่อใช้ LayoutInflater.from(Context) ภายใน DialogFragment คุณควรใช้วิธี getLayoutInflater() ของ DialogFragment เสมอเพื่อให้ได้ LayoutInflater ที่เหมาะสม (#156, b/170781346)
  • DialogFragmentCallbacksDetectorการตรวจสอบ Lint จะแสดงคำเตือนเมื่อเรียกใช้ setOnCancelListener หรือ setOnDismissListener ในเมธอด onCreateDialog() ของ DialogFragment ซึ่งผู้ฟังเหล่านี้เป็นของ DialogFragment เอง และคุณควรลบล้าง onCancel() และ onDismiss() เพื่อรับการเรียกกลับเหล่านี้ (#171, b/181780047, b/187524311)

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

  • จาก Fragment 1.3.4: แก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.3.3 เมื่อใช้ ViewTreeViewModelStoreOwner.get() API กับ ViewModelProvider หรือเมธอด Jetpack Compose ของ viewModel() ภายใน Fragment ตอนนี้ Use Case เหล่านี้ใช้ ViewModelProvider.Factory ที่ Fragment ระบุอย่างถูกต้อง หากมีการลบล้าง getDefaultViewModelProviderFactory() (เช่นเดียวกับที่ Fragment ที่มีคำอธิบายประกอบ @AndroidEntryPoint ทำเมื่อใช้ Hilt) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้าง SavedStateViewModelFactory ที่บันทึกและกู้คืนสถานะพร้อมกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368)
  • จาก Fragment 1.3.4: เมื่อใช้ FragmentContainerView ใน API 29 ระบบจะไม่ส่ง Inset อย่างไม่มีกำหนดอีกต่อไป ซึ่งจะช่วยแก้ไขปัญหาเกี่ยวกับอินสแตนซ์ BottomNavigationBar และ FloatingActionButton (I1bb78, b/186012452)
  • จาก Fragment 1.3.4: ตอนนี้คุณสามารถดึงข้อมูล Parcelable จากผลลัพธ์ของ Fragment Bundle ได้หลังจากกระบวนการสิ้นสุดลง (I65932, b/187443158)
  • จาก Fragment 1.3.4: เมื่อทำการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันใน ViewGroup หาก ViewGroup มี transitionGroup ตั้งค่าเป็น false ตอนนี้จะเปลี่ยนอย่างถูกต้องแล้ว (I99675)

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

เวอร์ชัน 1.3

เวอร์ชัน 1.3.6

21 กรกฎาคม 2021

androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6 และ androidx.fragment:fragment-testing:1.3.6 จะเปิดตัว เวอร์ชัน 1.3.6 มีคอมมิตเหล่านี้

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

  • จาก Fragment 1.4.0-alpha03: FragmentManager จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายามซ่อน Fragment ที่นำออก (I573dd, b/183634730)
  • ตอนนี้ระบบจะตั้งค่ามุมมองของ Fragment เป็น GONE อย่างถูกต้องเมื่อใช้ hide() เมื่อมุมมองรูทมีการตั้งค่า transitionGroup=”true” (aosp/1766655, b/193603427)
  • ตอนนี้ FragmentActivity จะปลดล็อกสถานะที่บันทึกไว้เสมอ เป็นการดำเนินการแรกในวงจร การเรียกกลับของวงจรที่แทนที่ (I6db7a)

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

เวอร์ชัน 1.3.5

16 มิถุนายน 2021

androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5 และ androidx.fragment:fragment-testing:1.3.5 จะเปิดตัว เวอร์ชัน 1.3.5 มีคอมมิตเหล่านี้

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

  • แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันซึ่งเปิดตัวใน Fragment 1.3.4 โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนฉากได้อย่างถูกต้อง (ทั้งที่ตั้งค่าโดยตรงผ่าน transitionGroup="true" หรือโดยอ้อมผ่าน transitionName หรือ background) และ องค์ประกอบที่ใช้ร่วมกันจะไม่แสดง IndexOutOfBoundsException อีกต่อไป (I16484, b/188679569, b/188969304)

เวอร์ชัน 1.3.4

18 พฤษภาคม 2021

androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4 และ androidx.fragment:fragment-testing:1.3.4 จะเปิดตัว เวอร์ชัน 1.3.4 มีคอมมิตเหล่านี้

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

  • แก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.3.3 เมื่อใช้ ViewTreeViewModelStoreOwner.get() API กับ ViewModelProvider หรือเมธอด Jetpack Compose ของ viewModel() ภายใน Fragment เมื่อใช้ Hilt ตอนนี้ Use Case เหล่านี้ใช้ ViewModelProvider.Factory ที่ Fragment ระบุอย่างถูกต้อง หากมีการลบล้าง getDefaultViewModelProviderFactory() (เช่นเดียวกับที่ Fragment ที่มีคำอธิบายประกอบ @AndroidEntryPoint ทำ) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้าง SavedStateViewModelFactory ที่บันทึกและกู้คืนสถานะพร้อมกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368)
  • เมื่อใช้ FragmentContainerView ใน API 29 การแทรกจะไม่ ส่งต่อไปเรื่อยๆ อีกต่อไป ซึ่งจะแก้ไขปัญหาเกี่ยวกับอินสแตนซ์ BottomNavigationBar และ FloatingActionButton (I1bb78, b/186012452)
  • ตอนนี้คุณสามารถดึงข้อมูล Parcelable จากผลลัพธ์ของ Fragment bundle ได้หลังจากกระบวนการสิ้นสุดลง (I65932, b/187443158)
  • เมื่อทำการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันใน ViewGroup หากตั้งค่า transitionGroup เป็น false ตอนนี้จะเปลี่ยนอย่างถูกต้องแล้ว (I99675)

เวอร์ชัน 1.3.3

21 เมษายน 2021

androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3 และ androidx.fragment:fragment-testing:1.3.3 จะเปิดตัว เวอร์ชัน 1.3.3 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • ตอนนี้การใช้ SavedStateViewModelFactory จะใช้งานได้ เมื่อใช้กับ SavedStateRegistryOwner ที่ได้จากการ ใช้ ViewTreeSavedStateRegistryOwner.get() กับ มุมมองของ Fragment (I21acf, b/181577191)

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

  • แก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.3.2 ซึ่งจะทำให้ภาพเคลื่อนไหว popEnter ไม่ทำงานเมื่อแสดง FragmentTransaction ที่มีการดำเนินการ setPrimaryNavFragment เช่น การดำเนินการที่ใช้โดย NavHostFragment (I38c87, b/183877426)
  • FragmentContainerView ตอนนี้จะช่วยให้มั่นใจได้ว่า Fragment ทุกรายการจะได้รับชุดใหม่ของ WindowInsets ซึ่งช่วยให้แต่ละ Fragment ใช้ระยะขอบด้านในได้อย่างอิสระ (I63f68, b/172153900)
  • DialogFragment ตอนนี้จัดการกรณีที่เพิ่ม Fragment ของบุตรหลานลงในคอนเทนเนอร์ที่มีรหัสเดียวกับคอนเทนเนอร์ในคลาส Dialog ที่กำหนดเองได้อย่างถูกต้องแล้ว ซึ่งจะช่วยแก้ไขปัญหาลำดับชั้นการแสดงผลเมื่อนำรหัสที่ใช้ภายในโดยกล่องโต้ตอบ เช่น BottomSheetDialog กลับมาใช้ใหม่ (Ie6279, b/180021387)
  • FragmentManager.dump() จะเยื้องส่วนแรกในรายการส่วนที่ใช้งานอยู่ได้อย่างถูกต้องแล้ว (If5c33, b/183705451)

การแก้ไขข้อบกพร่องของ State Manager ใหม่

  • ตอนนี้ตัวจัดการสถานะ Fragment ใหม่จะจัดการการเปลี่ยน ฉากขาออกด้วยการดำเนินการซ่อนได้อย่างถูกต้องแล้ว (I9e4de, b/184830265)

เวอร์ชัน 1.3.2

24 มีนาคม 2021

androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2 และ androidx.fragment:fragment-testing:1.3.2 จะเปิดตัว เวอร์ชัน 1.3.2 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • เมื่อเรียกใช้ทั้งการดำเนินการ popBackStack() และ commit() พร้อมกัน การดำเนินการสุดท้ายจะกำหนดทิศทางสำหรับการเคลื่อนไหวทั้งหมด แทนที่จะเป็นการเรียกใช้ภาพเคลื่อนไหวป๊อปอัปบางรายการและภาพเคลื่อนไหวเข้าบางรายการ (I7072e, b/181142246)
  • การดูภายในลำดับชั้นขององค์ประกอบที่ใช้ร่วมกันจะไม่ล้างชื่อการเปลี่ยนภาพอีกต่อไป เมื่อทำการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกัน (I4d4a6, b/179934757)

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

  • ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.2.2 แล้ว ซึ่งแก้ไขปัญหาเกี่ยวกับการตรวจสอบ Lint ของ InvalidFragmentVersionForActivityResult Activity เมื่อใช้ Fragment 1.3.1 ขึ้นไป
  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.3.1 แล้ว

เวอร์ชัน 1.3.1

10 มีนาคม 2021

androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1 และ androidx.fragment:fragment-testing:1.3.1 จะเปิดตัว เวอร์ชัน 1.3.1 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้กล่องโต้ตอบภายใน DialogFragment สามารถเข้าถึง ViewTree owners ผ่าน DecorView เพื่อให้มั่นใจว่าสามารถใช้ DialogFragment กับ ComposeView ได้ (Ib9290, b/180691023)

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

  • ตอนนี้ระบบจะแสดง Fragment ที่ขยายเป็นกิจกรรม RESUMED ที่มีอยู่แล้วโดยใช้ FragmentContainerView อย่างถูกต้องหลังจากการเปลี่ยนแปลงการกำหนดค่า (Ie14c8, b/180538371)
  • ไม่มี } ที่ส่วนท้ายของ Fragment toString() อีกต่อไป (I54705, b/177761088)
  • ตอนนี้เมธอดที่ลบล้างใน FragmentActivity จะรับช่วง เอกสารประกอบ Java ของเมธอดพื้นฐานอย่างถูกต้อง (I736ce, b/139548782)
  • เอกสารสำหรับ setFragmentResult และ setFragmentResultListener ได้อัปเดตเอกสารพารามิเตอร์เพื่อแสดงให้เห็นว่าระบบไม่รับ ค่า Null อีกต่อไป (I990ba, b/178348386)

การแก้ไขข้อบกพร่องของ State Manager ใหม่

  • แก้ไขการรั่วไหลของหน่วยความจำใน Fragment ที่เกิดจาก mFocusedView (Ib4e9e, b/179925887)
  • ตอนนี้ Fragment จะเรียกใช้ onCreateOptionsMenu อย่างถูกต้องเมื่อใช้ ธุรกรรมการแสดง/ซ่อน (I8bce8, b/180255554)
  • ตอนนี้ Fragment ย่อยที่มีการเปลี่ยนฉากซึ่งเริ่มก่อนที่ Fragment จะได้รับการจัดวางจะไปถึง RESUMED อย่างถูกต้อง (Ic11e6, b/180825150)
  • ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก <fragment> จะไปที่ RESUMED (I452ac, (I9fa49) เสมอ

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

เวอร์ชัน 1.3.0

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

androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0 และ androidx.fragment:fragment-testing:1.3.0 จะเปิดตัว เวอร์ชัน 1.3.0 มีคอมมิตต่อไปนี้

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

  • State Manager ใหม่: การเขียนใหม่ครั้งใหญ่ภายในของ FragmentManager ได้แก้ไขปัญหามากมายเกี่ยวกับการเรียกใช้เหตุการณ์วงจรการใช้งาน ภาพเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการกับ Fragment ที่เลื่อนออกไป
  • การผสานรวม Activity Result API: เพิ่มการรองรับ API ActivityResultRegistry ที่เปิดตัวใน Activity 1.2.0 เพื่อจัดการ startActivityForResult()+onActivityResult() รวมถึงโฟลว์ requestPermissions()+onRequestPermissionsResult() โดยไม่ต้องแทนที่เมธอดใน Fragment นอกเหนือจากการให้ Hook สำหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว

    • การเปิดตัวนี้แก้ไขปัญหาหลายอย่างเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ Activity Result API ใช้งานไม่ได้ใน FragmentActivity เวอร์ชันก่อนหน้า คุณต้องอัปเกรดเป็น Fragment 1.3.0 เพื่อใช้ Activity Result API ใน FragmentActivity หรือ AppCompatActivity
  • Fragment Result API: เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน FragmentManager ซึ่งใช้ได้กับส่วนลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ในการนำทาง และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะ STARTED เป็นอย่างน้อย เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้วเพื่อรองรับ API ใหม่เหล่านี้ ดูรับผลลัพธ์โดยใช้ Fragment Result API

  • FragmentOnAttachListener: เลิกใช้งาน Callback onAttachFragment() ใน FragmentActivity และ Fragment แล้ว เราได้เพิ่ม FragmentOnAttachListener ใหม่เพื่อเป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์ onAttachFragment() ให้กับ Listener ที่แยกต่างหากและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ลงใน FragmentManager อื่นๆ นอกเหนือจาก FragmentManager ขององค์ประกอบย่อยโดยตรง

  • FragmentScenarioการปรับปรุง: คลาส FragmentScenario จากอาร์ติแฟกต์ fragment-testing ได้รับการเขียนใหม่ใน Kotlin และได้รับการปรับปรุงหลายอย่าง ดังนี้

    • FragmentScenario ใช้ setMaxLifecycle() เพื่อใช้ moveToState() ซึ่งช่วยให้มั่นใจได้ว่าลักษณะการทำงานจะสอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐาน
    • FragmentScenario ตอนนี้รองรับการตั้งค่า Lifecycle.State เริ่มต้นเพื่อรองรับการยืนยันสถานะของ Fragment ก่อนที่จะย้ายไปยัง Lifecycle.State แต่ละรายการเป็นครั้งแรก
    • ตอนนี้มีทางเลือกอื่นแทน FragmentScenario API ของ onFragment ในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ Kotlin withFragment ซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง จะส่งข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุอีกครั้ง
  • ViewTree รองรับ: Fragment รองรับ API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View) และ ViewTreeSavedStateRegistryOwner ที่เพิ่มเข้ามาใน Lifecycle 2.3.0 และ SavedState 1.1.0 แล้ว ซึ่งจะแสดงผล Fragment เป็น ViewModelStoreOwner รวมถึง SavedStateRegistryOwner และ LifecycleOwner ที่เชื่อมโยงกับ view Lifecycle ของ Fragment เมื่อใช้ View ภายใน Fragment

  • TRANSIT_การเปลี่ยนแปลงภาพเคลื่อนไหว: ตอนนี้เอฟเฟกต์เริ่มต้นของชิ้นส่วน TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE จะใช้ Animator แทน Animation ตอนนี้แหล่งข้อมูลที่ใช้สร้างภาพเคลื่อนไหวเหล่านี้เป็นแบบส่วนตัวแล้ว

  • การเลิกใช้งาน setRetainInstance(): เลิกใช้งานเมธอด setRetainInstance() ใน Fragment แล้ว การเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่คงอยู่และแยกสถานะเฉพาะที่ต้องการคงไว้ได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหล ในขณะที่ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและการทำลายสถานะที่คงอยู่เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของ ViewModel และการเรียกกลับ onCleared() ที่ได้รับ)

  • การเลิกใช้งานอะแดปเตอร์ ViewPager 1: เมื่อเปิดตัว ViewPager2 1.0.0 เราได้เลิกใช้งานคลาส FragmentPagerAdapter และ FragmentStatePagerAdapter สำหรับการโต้ตอบกับ ViewPager แล้ว ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2

เวอร์ชัน 1.3.0-rc02

27 มกราคม 2021

androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02 และ androidx.fragment:fragment-testing:1.3.0-rc02 จะเปิดตัว เวอร์ชัน 1.3.0-rc02 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่หลักDialogFragmentจะปรากฏเหนือย่อยDialogFragmentหลังจากเปลี่ยนการกำหนดค่า ตอนนี้ส่วนย่อยของกล่องโต้ตอบย่อยจะปรากฏเหนือส่วนย่อยของกล่องโต้ตอบหลักเสมอ (I30806, b/177439520)
  • แก้ไขปัญหาที่การดำเนินการ hide ด้วย Animation จะทำให้ส่วนที่ซ่อนกะพริบเมื่อสิ้นสุดภาพเคลื่อนไหว (I57e22, b/175417675)
  • ตอนนี้ Fragment ที่มีการเปลี่ยนฉากซึ่งเพิ่มก่อนที่จะแนบลำดับชั้นการแสดงผลจะเข้าถึง RESUMED ได้อย่างถูกต้อง (I1fc1d, b/177154873)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • ตอนนี้มุมมองของ Fragment Lifecycle จัดการกรณีที่มุมมองของ Fragment ถูกทำลายก่อนที่ Lifecycle จะไปถึง CREATED ได้อย่างถูกต้องแล้ว ซึ่งจะหลีกเลี่ยงข้อยกเว้นที่ระบุว่า "ไม่มีเหตุการณ์จาก INITIALIZED" (eda2bd, b/176138645)
  • ตอนนี้ Fragment ที่ใช้ Animator จะปรากฏตามลำดับที่ถูกต้องเมื่อใช้ FragmentContainerView (Id9aa3, b/176089197)

เวอร์ชัน 1.3.0-rc01

16 ธันวาคม 2020

androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01 และ androidx.fragment:fragment-testing:1.3.0-rc01 จะเปิดตัว เวอร์ชัน 1.3.0-rc01 มีคอมมิตต่อไปนี้

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

  • onPrepareOptionsMenu() จะใช้ตรรกะเดียวกันกับ onCreateOptionsMenu() และจะไม่เรียกใช้เมื่อ Fragment หลักเรียกใช้ setMenuVisibility(false) อีกต่อไป (Id7de8, b/173203654)

การแก้ไขข้อบกพร่องของ State Manager ใหม่

  • แก้ไขการรั่วไหลและอาร์ติแฟกต์ภาพเมื่อเพิ่ม Fragment ที่มี Animation ลงใน FragmentContainerView แล้วขัดจังหวะการเพิ่มนั้นด้วยการดำเนินการป๊อป (I952d8)
  • แก้ไขปัญหาที่มุมมองของ Fragment จะยังคงอยู่ในลำดับชั้นของมุมมองหากมีการแทนที่ในระหว่างเมธอด onCreate() หรือ onViewCreated() (I8a7d5)
  • ตอนนี้ระบบจะคืนค่าโฟกัสไปยังมุมมองรากของ Fragment อย่างถูกต้องเมื่อมีการกลับมาทำงานอีกครั้ง (Ifc84b)
  • การรวมการดำเนินการป๊อปและการแทนที่ในธุรกรรม ของ Fragment เดียวกันจะแสดงภาพเคลื่อนไหวที่เหมาะสม (Ifd4e4, b/170328691)

เวอร์ชัน 1.3.0-beta02

2 ธันวาคม 2020

androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 และ androidx.fragment:fragment-testing:1.3.0-beta02 จะเปิดตัว เวอร์ชัน 1.3.0-beta02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentScenario ได้รับการแปลงเป็น Kotlin อย่างสมบูรณ์แล้วในขณะที่ยังคงความเข้ากันได้ของแหล่งที่มาและไบนารีผ่านการใช้อินเทอร์เฟซฟังก์ชันของ Kotlin 1.4 สำหรับ FragmentAction (I19d31)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้คุณสามารถใช้ FragmentContainerView ที่ไม่ได้ขยาย Fragment โดยใช้แอตทริบิวต์ class หรือ android:name นอก FragmentActivity ได้แล้ว (Id4397, b/172266337)
  • ตอนนี้การพยายามตั้งค่าวงจรสูงสุดของ Fragment เป็น DESTROYED จะทำให้เกิด IllegalArgumentException (Ie7651, b/170765622)
  • ตอนนี้การเริ่มต้น FragmentScenario ที่มีสถานะ DESTROYED จะทำให้เกิด IllegalArgumentException (I73590, b/170765622)

การแก้ไขข้อบกพร่องของ State Manager ใหม่

  • แก้ไขปัญหาที่มุมมองจะไม่ถึงสถานะสุดท้ายหากคุณขัดจังหวะการเปลี่ยนฉากของ Fragment ที่ใช้ Animator หรือตัวเลือกใดตัวเลือกหนึ่งของ TRANSIT_FRAGMENT_ (I92426, b/169874632)
  • แก้ไขปัญหาที่ทำให้ไม่สามารถทำลาย Fragment ที่มี Animation ออกอย่างถูกต้อง (I83d65)
  • ตอนนี้การออกจาก Fragment ที่มีการกลับเอฟเฟกต์จะ ยกเลิกและรีสตาร์ทอย่างถูกต้องด้วยเอฟเฟกต์การเข้าที่เหมาะสม (I62226, b/167092035)
  • แก้ไขปัญหาที่การออก Animator จาก hide() ไม่ทำงาน (Id7ffe)
  • ตอนนี้ระบบจะแสดง Fragment อย่างถูกต้องเมื่อเลื่อนออกไปแล้วเริ่มทันที (Ie713b, b/170022857)
  • Fragment ที่นำมุมมองที่โฟกัสออกระหว่างภาพเคลื่อนไหวจะไม่พยายามกู้คืนโฟกัสในมุมมองที่แยกออกมาเมื่อถึง RESUMED (I38c65, b/172925703)

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

  • FragmentFactory จะแคชคลาส Fragment แยกกันสำหรับอินสแตนซ์ ClassLoader ที่แตกต่างกัน ขอขอบคุณ Simon Schiller (#87, b/113886460)

เวอร์ชัน 1.3.0-beta01

1 ตุลาคม 2020

androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 และ androidx.fragment:fragment-testing:1.3.0-beta01 จะเปิดตัว เวอร์ชัน 1.3.0-beta01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ setMaxLifecycle() รองรับการตั้งค่าสถานะ Lifecycle เป็น INITIALIZING ตราบใดที่ไม่ได้ย้ายชิ้นส่วนไปยัง CREATED (b/159662173)

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

การเปลี่ยนแปลงพฤติกรรม

  • ไฟล์ทรัพยากรของ Fragment ได้รับการตั้งค่าเป็นส่วนตัวอย่างถูกต้องแล้ว (aosp/1425237)

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

  • ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก <fragment> จะรอจนกว่าจะมีการเพิ่มมุมมองลงในคอนเทนเนอร์อย่างถูกต้อง ก่อนที่จะเปลี่ยนเป็นสถานะ STARTED (I02f4c)
  • ตอนนี้ Fragment ที่มองเห็นได้และsetMaxLifecycle()ไปที่ CREATED จะแสดงเอฟเฟกต์การออกอย่างถูกต้องแล้ว (b/165822335)
  • การนำ Fragment ที่แยกออกมาซึ่งไม่ได้เพิ่มลงใน Back Stack ออกจะไม่ทำให้เกิดหน่วยความจำรั่วไหลอีกต่อไป ขอขอบคุณ Nicklas Ansman Giertz (b/166489383)
  • ตอนนี้ Fragment ที่ใช้งานอยู่จะมี FragmentManager ที่ไม่ใช่ Null เสมอ และ Fragment ที่มี FragmentManager ที่ไม่ใช่ Null จะถือว่าใช้งานอยู่เสมอ (aosp/1422346)
  • ตอนนี้เอฟเฟกต์เริ่มต้นของฟรากเมนต์ TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE จะใช้ Animator แทน Animation (b/166155034)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • ตอนนี้ Fragment จะคืนค่าสถานะโฟกัสของมุมมองอย่างถูกต้องจาก ก่อนที่จะเริ่มภาพเคลื่อนไหว (Icc256)
  • ตอนนี้ Fragment ที่มีการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันเท่านั้นจะ ทําเอฟเฟกต์พิเศษให้เสร็จสมบูรณ์อย่างถูกต้อง ซึ่งหมายความว่า Fragment จะย้ายไปยัง สถานะสุดท้ายจริงๆ (Iaebc7, b/166658128)
  • ตอนนี้ระบบจะนำมุมมอง Fragment ออกจากคอนเทนเนอร์ ก่อนที่จะทำลายเสมอ (Id5876)
  • ตอนนี้ตัวจัดการสถานะใหม่จะนำมุมมอง Fragment ที่ออกไปออกอย่างสม่ำเสมอก่อนที่จะเพิ่มมุมมอง Fragment ที่เข้ามา (I41a6e)
  • ตอนนี้เครื่องมือจัดการสถานะใหม่จะพิจารณาการเปลี่ยนแปลงที่ชัดเจนในระดับการเข้าถึงของมุมมอง Fragment ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของ Fragment ที่เข้าเป็น INVISIBLE ก่อนที่ภาพเคลื่อนไหวจะเริ่ม มุมมองนั้นจะยังคงมองไม่เห็น (b/164481490)
  • ตอนนี้ Fragment จะให้ความสำคัญกับ Animators มากกว่า Animations ซึ่งหมายความว่า Fragment ที่มีทั้ง 2 อย่างจะเรียกใช้เฉพาะ Animator และไม่สนใจ Animation (b/167579557)
  • เครื่องมือจัดการสถานะใหม่จะไม่ทําให้ Fragment กะพริบเมื่อใช้ภาพเคลื่อนไหวตอนเข้าอีกต่อไป (b/163084315)

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

เมื่อใช้เครื่องมือจัดการสถานะใหม่ หากคุณกด "กลับ" ขณะที่กำลังเข้าสู่เอฟเฟกต์พิเศษแทนที่จะกลับไปยัง Fragment ก่อนหน้า ระบบจะไม่เพิ่ม Fragment เก่าอีกเลย ซึ่งจะส่งผลให้หน้าจอว่างเปล่า (b/167259187, b/167092035, b/168442830)

เวอร์ชัน 1.3.0-alpha08

19 สิงหาคม 2020

androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08 และ androidx.fragment:fragment-testing:1.3.0-alpha08 จะเปิดตัว เวอร์ชัน 1.3.0-alpha08 มีคอมมิตเหล่านี้

State Manager ใหม่

การเผยแพร่นี้รวมถึงการปรับโครงสร้างการจัดการสถานะภายในของ FragmentManager ซึ่งส่งผลต่อการเรียกใช้เมธอดวงจร การเคลื่อนไหวและทรานซิชัน รวมถึงวิธีจัดการธุรกรรมที่เลื่อนออกไป ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่บล็อกโพสต์ Fragments: Rebuilding the Internals (b/139536619, b/147749580)

  • API experimental ใน FragmentManager.enableNewStateManager(boolean) สามารถใช้เพื่อควบคุมว่า FragmentManager จะใช้เครื่องมือจัดการสถานะใหม่หรือไม่ (I7b6ee)

ปัญหาต่อไปนี้จะได้รับการแก้ไขเมื่อใช้เครื่องมือจัดการสถานะใหม่เท่านั้น

  • ตอนนี้ระบบจะหยุด Fragment ก่อนหน้าของreplaceการดำเนินการอย่างถูกต้องก่อนที่จะเริ่ม Fragment ใหม่ (b/161654580)
  • ตอนนี้ Fragment จะป้องกันไม่ให้แอนิเมชันหลายรายการทำงานพร้อมกันใน Fragment เดียวกัน เพื่อหลีกเลี่ยงกรณีที่ Animation จะลบล้างเอฟเฟกต์ Transition ทั้งหมด หรือกรณีที่ Animator และ Transition ใน Fragment เดียวจะทำงานพร้อมกัน (b/149569323)
  • ตอนนี้ระบบจะเรียกใช้ enterTransition และ exitTranstion ของชิ้นส่วนทั้งหมดที่เข้าและออก แทนที่จะเรียกใช้เฉพาะชิ้นส่วนสุดท้ายที่เข้าและชิ้นส่วนแรกที่ออก (b/149344150)
  • ตอนนี้ชิ้นส่วนที่เลื่อนออกไปจะไม่ติดอยู่ที่สถานะ CREATED อีกต่อไป แต่จะย้ายไปที่ STARTED พร้อมกับชิ้นส่วนอื่นๆ แทน (b/129035555)
  • แก้ไขปัญหาที่ FragmentManager จะดำเนินการแบบไม่เรียงตามลำดับเมื่อรวมธุรกรรมที่เลื่อนการเรียงลำดับใหม่กับธุรกรรมที่ไม่ได้เรียงลำดับใหม่ (b/147297731)
  • การป๊อปหลายๆ Fragment พร้อมกันจะไม่ทำให้ Fragment ระดับกลางปรากฏชั่วคราวเมื่อเลื่อน Fragment อีกต่อไป (b/37140383)
  • FragmentManager จะแสดงผลข้อมูลที่ถูกต้องเมื่อเรียกใช้ findFragmentById() หรือ findFragmentByTag() จากภายใน Callback onAttachFragment() (b/153082833)
  • Fragment จะไม่เรียกใช้ onCreateView() ใน Fragment ที่กำลังถูกทำลายอีกต่อไปเมื่อมีการเลื่อนการแทนที่ Fragment (b/143915710)
  • ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อพยายามรวมอินสแตนซ์ของเฟรมเวิร์ก Transition และ AndroidX Transition จะกล่าวถึง Fragment ที่มีการเปลี่ยนที่ไม่ถูกต้อง (b/155574969)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้คุณสามารถเรียกใช้ launch() ใน ActivityResultLauncher ในเมธอดวงจร onCreate() ของ Fragment ได้แล้ว (b/161464278)
  • ตอนนี้การเรียกใช้ registerForActivityResult() หลังจาก onCreate() จะทำให้เกิดข้อยกเว้นที่ระบุว่าไม่อนุญาตให้ดำเนินการนี้ แทนที่จะไม่แสดงผลลัพธ์อย่างเงียบๆ หลังจากเปลี่ยนการกำหนดค่า (b/162255449)
  • FragmentActivity ตอนนี้ใช้ OnContextAvailableListener API ที่เปิดตัวใน Activity 1.2.0-alpha08 เพื่อกู้คืนสถานะของ FragmentManager โดย Listener ที่เพิ่มลงในคลาสย่อยของ FragmentActivity จะทํางานหลังจาก Listener นี้ (I513da)

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

  • ตอนนี้ระบบจะพิจารณา ActivityOptions ที่ส่งผ่านเมื่อใช้ startIntentSenderForResult() แล้ว (b/162247961)

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

  • เมื่อใช้เครื่องมือจัดการสถานะใหม่ การตั้งค่าระดับการมองเห็นของมุมมองรากของ Fragment โดยตรงหลังจาก onViewCreated() และก่อน onResume() จะทําให้ FragmentManager ซึ่งควบคุมระดับการมองเห็นของมุมมองรากเขียนทับระดับการมองเห็นที่คุณตั้งค่าไว้ วิธีแก้ปัญหาชั่วคราวคือคุณควรใช้การดำเนินการ hide() และ show() เสมอเพื่อเปลี่ยนระดับการเข้าถึงของ Fragment (b/164481490)

เวอร์ชัน 1.3.0-alpha07

22 กรกฎาคม 2020

androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07 และ androidx.fragment:fragment-testing:1.3.0-alpha07 จะเปิดตัว เวอร์ชัน 1.3.0-alpha07 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentScenario ตอนนี้รองรับการตั้งค่าเริ่มต้น สถานะวงจรของ CREATED, STARTED หรือ RESUMED แทนที่จะย้าย Fragment ไปยังสถานะ RESUMED เสมอ (b/159662750)
  • เพิ่มทางเลือกแทน FragmentScenario API ของ onFragment ในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ Kotlin withFragment ซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันนี้จะส่งข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุอีกครั้ง (b/158697631)

การเปลี่ยนแปลงพฤติกรรม

  • FragmentScenario ใช้ setMaxLifecycle() เพื่อติดตั้งใช้งาน moveToState() แล้วในตอนนี้ ซึ่งจะช่วยให้มั่นใจได้ว่าลักษณะการทำงานจะสอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐาน (b/156527405)
  • ตอนนี้ SavedStateRegistryOwner ที่ส่งคืนโดย ViewTreeSavedStateRegistryOwner จะเชื่อมโยงกับวงจรของมุมมอง Fragment วิธีนี้ช่วยให้มั่นใจได้ว่าระบบจะบันทึกและกู้คืนสถานะของ Fragment พร้อมกับมุมมองของ Fragment (b/158503763)

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

  • ตอนนี้ Fragment จะรอให้มุมมองของ Fragment แนบก่อนเรียกใช้ ViewCompat.requestApplyInsets() เพื่อหลีกเลี่ยงกรณีที่คำขอส่วนที่เว้นไว้ถูกทิ้ง (b/158095749)
  • การเรียก clearFragmentResultListener จะล้างข้อมูลของ LifecycleObserver อย่างถูกต้องแล้ว (b/159274993)

เวอร์ชัน 1.3.0-alpha06

10 มิถุนายน 2020

androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06 และ androidx.fragment:fragment-testing:1.3.0-alpha06 จะเปิดตัว เวอร์ชัน 1.3.0-alpha06 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เราเลิกใช้งาน Callback onAttachFragment() ใน FragmentActivity และ Fragment แล้ว มีการเพิ่ม FragmentOnAttachListener ใหม่เพื่อ เป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์ ของ onAttachFragment() ให้กับ Listener ที่แยกกันและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ลงใน FragmentManager อื่นๆ นอกเหนือจาก FragmentManager โดยตรงของ Fragment (I06d3d)

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

  • ตอนนี้ Fragment หลักจะมีการคืนค่าสถานะมุมมองก่อน Fragment ย่อย ซึ่งจะแก้ไขปัญหาการจัดลำดับภาพหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อ DialogFragment จะแสดง DialogFragment อื่นเป็น Fragment ย่อย (b/157195715)
  • แก้ไขปัญหาที่UseRequireInsteadOfGetการตรวจสอบ Lint ไม่จัดการการใช้งานโอเปอเรเตอร์ ?. และ !! ที่เชื่อมโยงกันอย่างถูกต้อง (b/157677616)

เวอร์ชัน 1.3.0-alpha05

20 พฤษภาคม 2020

androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05 และ androidx.fragment:fragment-testing:1.3.0-alpha05 จะเปิดตัว เวอร์ชัน 1.3.0-alpha05 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

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

  • ตอนนี้ API setFragmentResult() และ setFragmentResultListener() จะใช้ Bundle และ FragmentResultListener ที่ไม่ใช่ค่าว่างตามลำดับ หากต้องการล้างผลลัพธ์หรือ Listener ที่ตั้งค่าไว้ก่อนหน้านี้อย่างชัดแจ้ง ให้ใช้วิธีการใหม่ clearFragmentResult() และ clearFragmentResultListener() (b/155416778)
  • ตอนนี้เราได้ทำเครื่องหมายส่วนขยาย setFragmentResultListener() Kotlin ที่ใช้ Lambda เป็น inline แล้ว (b/155323404)

การเปลี่ยนแปลงพฤติกรรม

  • startActivityForResult(), startIntentSenderForResult() และ requestPermissions ที่เลิกใช้งานไปก่อนหน้านี้ใน Fragment ตอนนี้ใช้ ActivityResultRegistry ภายในแล้ว จึงไม่มีข้อจำกัดในการใช้เฉพาะบิตล่าง (ต่ำกว่า 0xFFFF) สำหรับรหัสคำขอเมื่อใช้ API เหล่านั้น (b/155518741)

การอัปเดตเอกสารประกอบ

  • ขยายเอกสารประกอบเกี่ยวกับตัวสร้าง Fragment(@LayoutRes int) และ DialogFragment(@LayoutRes int) เพื่อชี้แจงว่าควรเรียกใช้จากตัวสร้างที่ไม่มีอาร์กิวเมนต์ของคลาสย่อยเมื่อใช้ FragmentFactory เริ่มต้น (b/153042497)

เวอร์ชัน 1.3.0-alpha04

29 เมษายน 2020

androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04 และ androidx.fragment:fragment-testing:1.3.0-alpha04 จะเปิดตัว เวอร์ชัน 1.3.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน FragmentManager ซึ่งใช้ได้กับส่วนลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ในการนำทาง และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะ STARTED เป็นอย่างน้อย (b/149787344)

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

  • เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้ว หากต้องการส่งข้อมูลระหว่าง Fragment คุณควรใช้ Fragment Result API ใหม่แทน (b/149787344)
  • ระบบได้เลิกใช้งาน API startActivityForResult()/onActivityResult() และ requestPermissions()/onRequestPermissionsResult() ใน Fragment แล้ว โปรดใช้ Activity Result APIs (aosp/1290887)
  • การเปลี่ยนแปลงที่ทำให้เกิดข้อผิดพลาดจากกิจกรรม 1.2.0-alpha04: เราได้เปลี่ยนชื่อเมธอด prepareCall() เป็น registerForActivityResult() แล้ว (aosp/1278717)

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

  • ตอนนี้ระบบจะหยุด getViewLifecycleOwner() ของ Fragment ก่อนที่จะเรียกใช้ onSaveInstanceState() ซึ่งเป็นการจำลองลักษณะการทำงานของวงจรของ Fragment (b/154645875)
  • ตอนนี้การเรียก setMenuVisibility(false) ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุไว้อย่างถูกต้องแล้ว (b/153593580)
  • แก้ไขillegalStateExceptionเมื่อเพิ่ม Fragment ลงในลำดับชั้นมุมมองของ DialogFragment ด้วย FragmentContainerView (b/154366601)
  • getDefaultViewModelProviderFactory() ใน Fragment จะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์ Fragment นอกกิจกรรม (b/153762914)

เวอร์ชัน 1.3.0-alpha03

1 เมษายน 2020

androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 และ androidx.fragment:fragment-testing:1.3.0-alpha03 จะเปิดตัว เวอร์ชัน 1.3.0-alpha03 มีคอมมิตเหล่านี้

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

  • ตอนนี้prepareCallในFragmentเป็นfinalแล้ว (b/152439361)

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

  • แก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.3.0-alpha02 เมื่อใช้ BottomSheetDialogFragment (b/151652127, aosp/1263328, aosp/1265163)
  • แก้ไขข้อขัดข้องเมื่อใช้ prepareCall จาก Fragment หลังจากการเปลี่ยนแปลงการกำหนดค่า (b/152137004)
  • แก้ไขปัญหาที่ระบบไม่สนใจองค์ประกอบที่แชร์และการเปลี่ยนฉากทางออกเมื่อใช้ setTargetFragment() (b/152023196)
  • จาก Fragment 1.2.4: อัปเดตกฎ ProGuard ของ Fragment เพื่ออนุญาตการปกปิดโค้ดของ Fragment ที่เก็บไว้ (b/151605338)
  • จาก Fragment 1.2.4: ปิดใช้FragmentLiveDataObserve Lint rule ในคลาส DialogFragment เนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ ทำให้ใช้ this หรือ viewLifecycleOwner ได้อย่างปลอดภัยเมื่อเรียกใช้ observe (b/151765086)

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

  • Fragment ขึ้นอยู่กับ Activity 1.2.0-alpha03 ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result API ที่เปิดตัวใน Activity 1.2.0-alpha02

เวอร์ชัน 1.3.0-alpha02

18 มีนาคม 2020

androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02 และ androidx.fragment:fragment-testing:1.3.0-alpha02 จะเปิดตัว เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ ActivityResultRegistry API ที่เปิดตัวใน Activity 1.2.0-alpha02 เพื่อจัดการ startActivityForResult()+onActivityResult() รวมถึงโฟลว์ requestPermissions()+onRequestPermissionsResult() โดยไม่ต้องแทนที่เมธอดใน Fragment นอกเหนือจากการให้ Hook สำหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว (b/125158199)

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

  • DialogFragment มีเครื่องมือสร้างที่ใช้ @LayoutRes ซึ่งระบุเลย์เอาต์ที่ onCreateView() ควรขยายตามค่าเริ่มต้น (b/150327080)
  • ตอนนี้เลิกใช้เมธอด onActivityCreated() แล้ว โค้ดที่แตะมุมมองของ Fragment ควรทำใน onViewCreated() (ซึ่งเรียกใช้ก่อน onActivityCreated() ทันที) และโค้ดการเริ่มต้นอื่นๆ ควรอยู่ใน onCreate() หากต้องการรับการเรียกกลับเมื่อonCreate()ของกิจกรรมเสร็จสมบูรณ์โดยเฉพาะ คุณควรลงทะเบียน LifeCycleObserver ใน Lifecycle ของกิจกรรมใน onAttach() และนำออกเมื่อได้รับการเรียกกลับ onCreate() (b/144309266)

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

  • จาก Fragment 1.2.3: แก้ไขข้อบกพร่องใน DialogFragment ที่ทำให้เกิด StackOverflowError เมื่อเรียกใช้ getLayoutInflater() จากภายใน onCreateDialog() (b/117894767, aosp/1258664)
  • จาก Fragment 1.2.3: ลดขอบเขตของกฎ ProGuard ที่รวมไว้ของ Fragment เพื่อให้มั่นใจว่าระบบจะนำคลาส Fragment ที่ไม่ได้ใช้ออกได้ (b/149665169)
  • จาก Fragment 1.2.3: แก้ไขผลบวกที่ผิดพลาดในการตรวจสอบ UseRequireInsteadOfGet Lint เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163)
  • จาก Fragment 1.2.3: FragmentContainerView จะไม่ส่ง UnsupportedOperationException อีกต่อไปเมื่อใช้เครื่องมือสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์ (b/149707833)

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

  • BottomSheetDialogFragment ไม่สามารถวางตำแหน่งกล่องโต้ตอบบนหน้าจอได้อย่างถูกต้องอีกต่อไป (b/151652127)

เวอร์ชัน 1.3.0-alpha01

4 มีนาคม 2020

androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01 และ androidx.fragment:fragment-testing:1.3.0-alpha01 จะเปิดตัว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ ViewTreeLifecycleOwner.get(View) API ที่เพิ่มใน Lifecycle 2.3.0-alpha01 เพื่อให้ส่งคืน viewLifecycleOwner ของ Fragment เป็น LifecycleOwner สำหรับ View ใดก็ตามที่ onCreateView() ส่งคืน (aosp/1182955)

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

  • เลิกใช้เมธอด setRetainInstance() ใน Fragment แล้ว การเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่คงอยู่และแยกสถานะเฉพาะที่ต้องการคงไว้ได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหลในขณะที่ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและการทำลายสถานะที่คงอยู่เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของ ViewModel และการเรียกกลับ onCleared() ที่ได้รับ) (b/143911815)
  • เมื่อเปิดตัว ViewPager2 1.0.0 คลาส FragmentPagerAdapter และ FragmentStatePagerAdapter สำหรับการโต้ตอบกับ ViewPager จึงถูกเลิกใช้งาน ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2 (b/145132715)

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

  • ตอนนี้กฎ ProGuard ของ Fragment จะเก็บเฉพาะตัวสร้างเริ่มต้นของคลาส Fragment ที่ใช้เท่านั้น ไม่ใช่สำหรับอินสแตนซ์ Fragment ทั้งหมด ซึ่งแก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.2.1 (b/149665169
  • require___() กฎ Lint ที่เพิ่มใน Fragment 1.2.2 จะไม่แสดงผลลบลวงสำหรับตัวแปรภายในที่มีชื่อเดียวกับชื่อพร็อพเพอร์ตี้ Kotlin ที่ซ่อนอยู่ (เช่น view) (b/149891163)
  • FragmentContainerView จะไม่แสดง UnsupportedOperationException อีกต่อไปเมื่อใช้ตัวอย่างเลย์เอาต์ใน Android Studio (b/149707833)
  • แก้ไขปัญหาที่ระบบจะไม่สร้างชิ้นส่วนที่เก็บไว้ซึ่งเพิ่มหลังจากบันทึกสถานะอย่างต่อเนื่อง แล้วทำลายหลังจากเปลี่ยนการกำหนดค่าแต่ละครั้ง (b/145832397)

เวอร์ชัน 1.2.5

เวอร์ชัน 1.2.5

10 มิถุนายน 2020

androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5 และ androidx.fragment:fragment-testing:1.2.5 จะเปิดตัว เวอร์ชัน 1.2.5 มีคอมมิตเหล่านี้

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

  • ตอนนี้ระบบจะหยุด getViewLifecycleOwner() ของ Fragment ก่อนที่จะเรียกใช้ onSaveInstanceState() ซึ่งเป็นการจำลองลักษณะการทำงานของวงจรของ Fragment ฟีเจอร์นี้เปิดตัวใน Fragment 1.3.0-alpha04 ไปก่อนหน้านี้แล้ว (b/154645875)
  • ตอนนี้การเรียก setMenuVisibility(false) ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุไว้อย่างถูกต้องแล้ว ฟีเจอร์นี้เปิดตัวใน Fragment 1.3.0-alpha04 ไปก่อนหน้านี้แล้ว (b/153593580)

เวอร์ชัน 1.2.4

เวอร์ชัน 1.2.4

1 เมษายน 2020

androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4 และ androidx.fragment:fragment-testing:1.2.4 จะเปิดตัว เวอร์ชัน 1.2.4 มีคอมมิตเหล่านี้

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

  • อัปเดตกฎ ProGuard ของ Fragment เพื่ออนุญาตการปกปิดโค้ดของ Fragment ที่เก็บไว้ (b/151605338)
  • ปิดใช้FragmentLiveDataObserveกฎ Lint ในคลาส DialogFragment เนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ จึงทำให้ใช้ this หรือ viewLifecycleOwner ได้อย่างปลอดภัยเมื่อเรียกใช้ observe (b/151765086)

เวอร์ชัน 1.2.3

เวอร์ชัน 1.2.3

18 มีนาคม 2020

androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3 และ androidx.fragment:fragment-testing:1.2.3 จะเปิดตัว เวอร์ชัน 1.2.3 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อบกพร่องใน DialogFragment ที่ทำให้เกิด StackOverflowError เมื่อโทรหา getLayoutInflater() จากภายใน onCreateDialog() (b/117894767, aosp/1258665)
  • ลดขอบเขตของกฎ ProGuard ที่รวมไว้ของ Fragment เพื่อให้มั่นใจว่าระบบจะลบคลาส Fragment ที่ไม่ได้ใช้ออกได้ (b/149665169)
  • แก้ไขผลการตรวจหาที่ผิดพลาดในUseRequireInsteadOfGetการตรวจสอบ Lint เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163)
  • FragmentContainerView จะไม่แสดง UnsupportedOperationException สำหรับการใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์อีกต่อไป (b/149707833)

เวอร์ชัน 1.2.2

เวอร์ชัน 1.2.2

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

androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 และ androidx.fragment:fragment-testing:1.2.2 จะเปิดตัว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้

การตรวจสอบ Lint ใหม่

  • เครื่องมือวิเคราะห์ซอร์สโค้ดแนะนำให้ใช้ viewLifecycleOwner เป็น LifecycleOwner ในการเรียกใช้ OnBackPressedDispatcher ใน onCreateView(), onViewCreated() และ onActivityCreated() (b/142117657)
  • เพิ่มการตรวจสอบ Lint ใหม่ที่ยืนยันว่าคุณใช้ debugImplementation ที่ถูกต้องเมื่อใช้ชิ้นงาน fragment-testing (b/141500106)
  • ตอนนี้ Fragment จะแนะนำให้ใช้เมธอด require___() ที่เชื่อมโยงเพื่อรับข้อความแสดงข้อผิดพลาดที่อธิบายได้ดีกว่าแทน checkNotNull(get___()), requireNonNull(get___()) หรือ get___()!! สำหรับ Fragment API ทั้งหมดที่มีทั้ง get และ require ที่เทียบเท่า (aosp/1202883)

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

  • แก้ไขไฟล์ ProGuard ของ Fragment เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
  • ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนําให้ใช้ viewLifecycleOwner เมื่อใช้ observe เพื่อจัดการเวอร์ชันเมธอดส่วนขยาย livedata-ktx ของ observe ด้วย (b/148996309)
  • แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint หลายรายการ (aosp/1157012)

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

  • ขอขอบคุณ Zac Sweers ที่มีส่วนร่วมในการตรวจสอบ Lint ของ require___() ในนามของ Slack (aosp/1202883)

เวอร์ชัน 1.2.1

เวอร์ชัน 1.2.1

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

androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 และ androidx.fragment:fragment-testing:1.2.1 จะเปิดตัว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้

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

  • ตอนนี้ ProGuard จะเก็บตัวสร้างเริ่มต้นของ Fragment ที่เพิ่มผ่านเมธอด add และ replace ซึ่งใช้อินสแตนซ์ Class (หรือเวอร์ชัน Kotlin ที่ได้รับการปรับให้เป็นประเภทเฉพาะ) ไว้ (b/148181315)
  • FragmentStatePagerAdapter และ FragmentPagerAdapter จะไม่ดักจับข้อยกเว้นที่ FragmentManager สร้างขึ้นเมื่อเรียกใช้ finishUpdate() อีกต่อไป (aosp/1208711)
  • แก้ไขปัญหาที่ FragmentManager.findFragment() ไม่ทํางานกับส่วนที่เพิ่มผ่านแท็ก <fragment> (b/147784323)
  • ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก <fragment> จะได้รับการเรียกไปยัง onInflate() ก่อน onCreate() เสมอเมื่ออยู่ในเลย์เอาต์ (aosp/1215856)
  • การเรียกใช้ toString() ในอินสแตนซ์ FragmentManager จะไม่ทำให้เกิด NullPointerException อีกต่อไปเมื่อ Activity ถูกทำลายไปแล้ว (b/148189412)

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

เวอร์ชัน 1.2.0

เวอร์ชัน 1.2.0

22 มกราคม 2020

androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0 และ androidx.fragment:fragment-testing:1.2.0 จะเปิดตัว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้

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

  • FragmentContainerView: FragmentContainerView เป็นคอนเทนเนอร์ที่แนะนำเป็นอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก ซึ่งจะแทนที่การใช้ FrameLayout หรือเลย์เอาต์อื่นๆ นอกจากนี้ยังรองรับ class, android:name และ android:tag ที่ไม่บังคับเหมือนกับแท็ก <fragment> แต่ใช้ FragmentTransaction ปกติเพื่อเพิ่มส่วนเริ่มต้นนี้แทนเส้นทางโค้ดที่กำหนดเองซึ่ง <fragment> ใช้
  • onDestroyView() timing: ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวขาออก การเปลี่ยนเฟรมเวิร์กขาออก และการเปลี่ยน AndroidX ขาออก (เมื่อใช้ Transition 1.3.0) เสร็จสมบูรณ์ก่อนเรียกใช้ onDestroyView()
  • อิงตามคลาส add() และ replace(): เพิ่มการโอเวอร์โหลดใหม่ของ add() และ replace() ใน FragmentTransaction ที่ใช้ Class<? extends Fragment> และอาร์กิวเมนต์ Bundle ที่ไม่บังคับ วิธีการเหล่านี้ใช้ FragmentFactory เพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่น fragmentTransaction.replace<YourFragment>(R.id.container)) ลงใน fragment-ktx ด้วย
  • การผสานรวม Lifecycle ViewModel SavedState: ตอนนี้ SavedStateViewModelFactory เป็น Factory เริ่มต้นที่ใช้เมื่อใช้ by viewModels(), by activityViewModels(), เครื่องมือสร้าง ViewModelProvider หรือ ViewModelProviders.of() กับ Fragment
  • การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated()
  • getFragmentManager()การเลิกใช้งาน: เราได้เลิกใช้งานเมธอด getFragmentManager() และ requireFragmentManager() ใน Fragment แล้ว และแทนที่ด้วยเมธอด getParentFragmentManager() เดียว ซึ่งจะแสดงผล FragmentManager ที่ไม่ใช่ Null ที่เพิ่ม Fragment เข้าไป (คุณใช้ isAdded() เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่)
  • FragmentManager.enableDebugLogging() การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดแบบคงที่ FragmentManager.enableDebugLogging แล้ว ตอนนี้ FragmentManager จะใช้ Log.isLoggable() สำหรับแท็ก FragmentManager ซึ่งช่วยให้คุณเปิดใช้การบันทึก DEBUG หรือ VERBOSE ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง

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

  • ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์ class หรือ android:name ใน FragmentContainerView โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎ Keep สำหรับคลาส Fragment แต่ละคลาสด้วยตนเอง (b/142601969)
  • เมื่อเพิ่ม NavHostFragment โดยใช้ class หรือ android:name ใน XML ที่มี FragmentContainerView คุณจะใช้ findNavController() ใน onCreate() ของกิจกรรมไม่ได้ (b/142847973)

เวอร์ชัน 1.2.0-rc05

8 มกราคม 2020

androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05 และ androidx.fragment:fragment-testing:1.2.0-rc05 จะเปิดตัว เวอร์ชัน 1.2.0-rc05 มีคอมมิตเหล่านี้

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

  • แก้ไขการถดถอยใน Fragment 1.2.0-rc04 เมื่อใช้แท็ก <fragment> ซึ่งทำให้มีการเรียก onViewCreated() อย่างไม่ถูกต้องในระหว่างการทำลายกิจกรรม (b/146290333)
  • ตอนนี้ระบบจะล้างส่วนที่เพิ่มด้วยแท็ก <fragment> อย่างถูกต้องแม้ว่าบางครั้งจะอยู่ในเลย์เอาต์เท่านั้น (เช่น อยู่ในเลย์เอาต์แนวนอนเท่านั้น) ด้วยเหตุนี้ ตอนนี้ระบบจึงย้าย Fragment เหล่านี้ไปยัง CREATED อย่างถูกต้องแม้ว่าจะไม่ได้อยู่ในเลย์เอาต์ก็ตาม แทนที่จะสร้างอินสแตนซ์แต่ไม่เคยย้ายผ่านวิธีการวงจรใดๆ (b/145769287)

เวอร์ชัน 1.2.0-rc04

18 ธันวาคม 2019

androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04 และ androidx.fragment:fragment-testing:1.2.0-rc04 จะเปิดตัว เวอร์ชัน 1.2.0-rc04 มีคอมมิตเหล่านี้

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

  • ปรับภาพเคลื่อนไหวสำหรับ TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE เพื่อหลีกเลี่ยงปัญหาด้านภาพ (b/145468417)

เวอร์ชัน 1.2.0-rc03

4 ธันวาคม 2019

androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03 และ androidx.fragment:fragment-testing:1.2.0-rc03 จะเปิดตัว เวอร์ชัน 1.2.0-rc03 มีคอมมิตเหล่านี้

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

  • แก้ไขการเปลี่ยนแปลงลักษณะการทำงานโดยไม่ตั้งใจซึ่ง Fragment ที่ถูกนำออกไปแล้วยังคงแสดงผลโดย findFragmentById() / findFragmentByTag() ขณะที่ภาพเคลื่อนไหว/การเปลี่ยนฉากขาออกทำงาน (b/143982969, aosp/1167585)
  • ตอนนี้ระบบจะหยุด Fragment ของบุตรหลานอย่างถูกต้องก่อน Fragment ของผู้ปกครองเมื่อกิจกรรมที่มี Fragment ดังกล่าวเรียกใช้ onSaveInstanceState() (b/144380645)
  • แก้ไขปัญหาที่ระบบทำเครื่องหมายมุมมองเป็น INVISIBLE อย่างไม่ถูกต้องหลังจากแสดง Fragment ที่ซ่อนอยู่ (b/70793925)
  • ตอนนี้การเปลี่ยนฉากองค์ประกอบที่ใช้ร่วมกันของ Fragment จะจัดการ View ที่หมุน ปรับขนาด ฯลฯ ได้แล้ว (b/142835261)

การอัปเดตเอกสารประกอบ

  • ปรับปรุงเอกสารการเลิกใช้งานเกี่ยวกับ setUserVisibleHint() (b/143897055)
  • ปรับปรุงเอกสารประกอบเกี่ยวกับ setFragmentFactory() และ getFragmentFactory() เพื่อระบุให้ชัดเจนยิ่งขึ้นว่าการตั้งค่า FragmentFactory จะส่งผลต่อ FragmentManager ขององค์ประกอบย่อยด้วย (aosp/1170095)

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

  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 และ Activity 1.1.0-rc03

เวอร์ชัน 1.2.0-rc02

7 พฤศจิกายน 2019

androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02 และ androidx.fragment:fragment-testing:1.2.0-rc02 จะเปิดตัว เวอร์ชัน 1.2.0-rc02 มีคอมมิตเหล่านี้

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

  • เมื่ออยู่ใน Kotlin ตอนนี้ LintFix สำหรับการใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated() (เปิดตัวใน Fragment 1.2.0-rc01) จะใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ Kotlin viewLifecycleOwner แทน getViewLifecycleOwner() (aosp/1143821)

เวอร์ชัน 1.2.0-rc01

23 ตุลาคม 2019

androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01 และ androidx.fragment:fragment-testing:1.2.0-rc01 จะเปิดตัว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentContainerView รองรับแอตทริบิวต์ class นอกเหนือจาก android:name แล้ว ซึ่งเป็นการจำลองฟังก์ชันของแท็ก <fragment> (b/142722242)
  • เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated() (b/137122478)

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

  • ตอนนี้ Callback onDismiss และ onCancel ใน DialogFragment รับประกันว่า DialogInterface ที่ส่งไปยัง Callback เหล่านี้จะไม่ใช่ค่า Null และ getDialog() จะแสดงผลค่าที่ไม่ใช่ Null เมื่อมีการเรียกใช้ (b/141974033)
  • FragmentContainerView จะเพิ่ม Fragment ที่กำหนดโดย class หรือ android:name เป็นส่วนหนึ่งของการขยาย เพื่อให้มั่นใจว่า findFragmentById() และ findFragmentByTag() จะทำงานได้ทันทีหลังจากนั้น (b/142520327)
  • แก้ไข IllegalStateException ใน FragmentContainerView เนื่องจากมีการบันทึกสถานะ (b/142580713)
  • แก้ไข UnsupportedOperationException ใน FragmentContainerView เมื่อมีการปกปิดโค้ดของคลาส FragmentContainerView (b/142657034)

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

  • ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์ class หรือ android:name ใน FragmentContainerView โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎ Keep สำหรับคลาส Fragment แต่ละคลาสด้วยตนเอง เราได้ปิดใช้กฎ Lint ที่แนะนำให้ย้ายไปใช้ FragmentContainerView จนกว่าปัญหานี้จะได้รับการแก้ไขผ่าน aapt2 (b/142601969)

เวอร์ชัน 1.2.0-beta02

11 ตุลาคม 2019

androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02 และ androidx.fragment:fragment-testing:1.2.0-beta02 จะเปิดตัว เวอร์ชัน 1.2.0-beta02 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาที่ onInflate() ของ Fragment ไม่ได้รับแอตทริบิวต์ที่เหมาะสมจาก FragmentContainerView ซึ่งทำให้เกิดกรณีที่ใช้งานไม่ได้ เช่น NavHostFragment (b/142421837)

เวอร์ชัน 1.2.0-beta01

9 ตุลาคม 2019

androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01 และ androidx.fragment:fragment-testing:1.2.0-beta01 จะเปิดตัว เวอร์ชัน 1.2.0-beta01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentContainerView เพิ่มการรองรับการเพิ่ม Fragment เริ่มต้นพร้อมการรองรับเพิ่มเติมสำหรับแอตทริบิวต์ XML android:name และ android:tag ที่ไม่บังคับ <fragment>FragmentContainerView ใช้ FragmentTransaction ปกติเบื้องหลังเพื่อเพิ่ม Fragment เริ่มต้น ซึ่งช่วยให้ดำเนินการ FragmentTransaction เพิ่มเติมใน FragmentContainerView ได้ และเปิดใช้การใช้ View Binding สำหรับเลย์เอาต์ (b/139830628, b/141177981)
  • ตอนนี้ Fragment มีคำเตือน Lint ที่เสนอวิธีแก้ไขอย่างรวดเร็วเพื่อแทนที่ <fragment> ด้วย FragmentContainerView (b/139830056)

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

  • แก้ไขClassCastExceptionเมื่อใช้ androidx.transition (b/140680619)
  • เมื่อใช้ Transition 1.3.0-beta01 ตอนนี้ Fragment จะรอให้ทรานซิชัน androidx.transition เสร็จสิ้น (นอกเหนือจากทรานซิชันและภาพเคลื่อนไหวของเฟรมเวิร์ก ซึ่งได้รับการแก้ไขใน Fragment 1.2.0-alpha03 และ Fragment 1.2.0-alpha02 ตามลำดับ) ก่อนที่จะส่ง onDestroyView() (aosp/1119841)
  • เมื่อใช้ Transition 1.3.0-beta01 ตอนนี้ Fragment จะยกเลิกทรานซิชัน androidx.transition อย่างถูกต้องก่อนที่จะเริ่มทรานซิชัน / ภาพเคลื่อนไหวใหม่ในคอนเทนเนอร์เดียวกัน (aosp/1119841)
  • แก้ไขปัญหาใน API 17 และต่ำกว่าเมื่อใช้androidx.transitionการเปลี่ยนฉากในมุมมองรากของ Fragment เมื่อใช้ FragmentContainerView (b/140361893)
  • ตอนนี้อาร์ติแฟกต์ fragment-testing ขึ้นอยู่กับ AndroidX Test 1.2.0 แล้ว ซึ่งแก้ไขปัญหาความไม่เข้ากันกับ Espresso 3.2.0 เวอร์ชันล่าสุด (b/139100149)
  • นำการใช้งาน Log.w ใน FragmentManager ออกแล้ว (aosp/1126468)

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

  • onInflate() ของ Fragment ไม่ได้รับแอตทริบิวต์ที่เหมาะสมจาก FragmentContainerView ทำให้เกิดกรณีต่างๆ เช่น NavHostFragment (b/142421837)

เวอร์ชัน 1.2.0-alpha04

18 กันยายน 2019

androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04 และ androidx.fragment:fragment-testing:1.2.0-alpha04 จะเปิดตัว เวอร์ชัน 1.2.0-alpha04 มีคอมมิตเหล่านี้

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

  • เมธอด getFragmentManager() และ requireFragmentManager() ใน Fragment ถูกเลิกใช้งานแล้วและแทนที่ด้วยเมธอด getParentFragmentManager() เมธอดเดียว ซึ่งจะแสดงผล FragmentManager ที่ไม่ใช่ค่าว่างซึ่งมีการเพิ่ม Fragment (คุณใช้ isAdded() เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่) (b/140574496)
  • เลิกใช้เมธอด FragmentManager.enableDebugLogging แบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้ Log.isLoggable() สำหรับแท็ก FragmentManager ซึ่งช่วยให้คุณเปิดใช้การบันทึก DEBUG หรือ VERBOSE ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง (aosp/1116591)

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

  • ตอนนี้ระบบจะทำลาย Fragment อย่างถูกต้องในขณะที่ภาพเคลื่อนไหวขาออกใน Fragment อื่นๆ กำลังทำงานอยู่ (b/140574199)
  • แก้ไขปัญหาที่ Fragment จะเรียกใช้ Activity.findViewById() ในกรณีที่ก่อนหน้านี้ไม่ได้เรียกใช้ (aosp/1116431)

เวอร์ชัน 1.2.0-alpha03

5 กันยายน 2019

androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 และ androidx.fragment:fragment-testing:1.2.0-alpha03 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ FragmentContainerView เปลี่ยนชื่อเป็น final แล้ว (b/140133091)

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

  • ตอนนี้ FragmentContainerView จะกลับลำดับการวาดอย่างถูกต้องเมื่อนำ Fragment ออกจาก Back Stack (b/139104187)
  • แก้ไขปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งป๊อป Fragment และเพิ่ม Fragment ใหม่พร้อมกัน (b/111659726)
  • ตอนนี้ Fragment จะรอให้การเปลี่ยนผ่านเสร็จสิ้น (นอกเหนือจากภาพเคลื่อนไหว ซึ่งได้รับการแก้ไขใน Fragment 1.2.0-alpha02) ก่อนที่จะส่ง onDestroyView() (b/138741697)

เวอร์ชัน 1.2.0-alpha02

7 สิงหาคม 2019

androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 และ androidx.fragment:fragment-testing:11.2.0-alpha02 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ SavedStateViewModelFactory เป็นค่าเริ่มต้นที่ใช้เมื่อใช้ by viewModels(), by activityViewModels(), ตัวสร้าง ViewModelProvider หรือ ViewModelProviders.of() ที่มี Fragment (b/135716331)
  • ระบบได้อัปเดตภาพเคลื่อนไหวเริ่มต้นเมื่อใช้ TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADE กับ setTransition ใน FragmentTransaction ให้ตรงกับภาพเคลื่อนไหวที่กิจกรรมใช้ในอุปกรณ์ Android 10 (aosp/1012812, aosp/1014730)

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

  • เปิดตัว FragmentContainerView เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก ซึ่งจะแทนที่การใช้งาน FrameLayout ฯลฯ เนื่องจากจะแก้ไขปัญหาการจัดลำดับ z ของภาพเคลื่อนไหวและการส่งการแทรกในหน้าต่างไปยัง Fragment (b/37036000, aosp/985243, b/136494650)
  • เพิ่มFragmentManager.findFragment(View)เมธอดแบบคงที่เพื่อดึงข้อมูล Fragment ที่มีจากมุมมองที่ขยายโดย Fragment นอกจากนี้ ยังมีส่วนขยาย Kotlin ใน fragment-ktx ด้วย (aosp/1090757)
  • เพิ่มการโอเวอร์โหลดใหม่ของ add() และ replace() ใน FragmentTransaction ที่ใช้ Class<? extends Fragment> และอาร์กิวเมนต์ Bundle ที่ไม่บังคับ วิธีการเหล่านี้ใช้ FragmentFactory เพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่น fragmentTransaction.replace<YourFragment>(R.id.container)) ลงใน fragment-ktx ด้วย (b/126124987)
  • เพิ่มคำอธิบายประกอบ @MainThread ลงใน Fragment การเรียกกลับของวงจรแล้ว (b/127272564)
  • ระบบเลิกใช้งาน API ที่เกี่ยวข้องกับชื่อเบรดคัมบ์ใน FragmentTransaction และ FragmentManager.BackStackEntry แล้ว (b/138252944)
  • เลิกใช้เมธอด setTransitionStyle ใน FragmentTransaction แล้ว (aosp/1011537)
  • วิธีการหลายอย่างใน FragmentManager abstract ไม่ได้ผลอีกต่อไป FragmentManager เองยังคงเป็น abstract และไม่ควรสร้างอินสแตนซ์หรือขยายโดยตรง คุณควรรับอินสแตนซ์ที่มีอยู่จาก getSupportFragmentManager(), getChildFragmentManager() ฯลฯ ต่อไป

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

  • จาก Fragment 1.1.0-rc04: ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858)
  • จาก Fragment 1.1.0-rc03: แก้ไขปัญหาที่การเรียกใช้ postponeEnterTransition() ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)
  • จาก Fragment 1.1.0-rc02: แก้ไขข้อขัดข้องใน FragmentPagerAdapter และ FragmentStatePagerAdapter เมื่อนำรายการปัจจุบันออก (b/137209870)
  • ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง onDestroyView() (b/136110528)
  • ตอนนี้ระบบจะจัดการภาพเคลื่อนไหวของ Fragment จาก Fragment ย่อยและ Fragment ที่สืบทอดมาอย่างถูกต้องเมื่อสร้างภาพเคลื่อนไหวของ Fragment หลัก (b/116675313)
  • แก้ไขNullPointerExceptionเมื่อใช้การเปลี่ยนองค์ประกอบที่แชร์และรวมการดำเนินการป๊อปอัปและการเพิ่ม (b/120507394)
  • เพิ่มวิธีแก้ปัญหาชั่วคราวสำหรับ IllegalStateException เมื่อใช้ FragmentPagerAdapter และ FragmentStatePagerAdapter ในการทดสอบ Robolectric (b/137201343)

เวอร์ชัน 1.2.0-alpha01

2 กรกฎาคม 2019

androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 และ androidx.fragment:fragment-testing:1.2.0-alpha01 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ FragmentManager จะเรียกใช้ requestApplyInsets() หลังจากแนบมุมมองของ Fragment และก่อนเรียกใช้ onViewCreated() โดยตรง เพื่อให้มั่นใจว่ามุมมองของคุณจะมีระยะขอบที่ถูกต้องเสมอ (b/135945162)

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

  • แก้ไขNullPointerExceptionเมื่อเปิดFragmentTransactionที่ใช้ setPrimaryNavigationFragment() ก่อน replace() (b/134673465)

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0

5 กันยายน 2019

androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 และ androidx.fragment:fragment-testing:1.1.0 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • fragment-testing: อาร์ติแฟกต์ fragment-testing มีคลาส FragmentScenario สำหรับทดสอบ Fragment แบบแยก ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการทดสอบ Fragment ของแอป
  • FragmentFactory: ตอนนี้คุณสามารถตั้งค่า FragmentFactory ใน FragmentManager เพื่อจัดการการสร้างอินสแตนซ์ของ Fragment ซึ่งจะช่วยลดข้อกำหนดที่เข้มงวดในการมีตัวสร้างที่ไม่มีอาร์กิวเมนต์
  • ตัวแทนพร็อพเพอร์ตี้ Kotlin สำหรับ ViewModel: อาร์ติแฟกต์ fragment-ktx มีตัวแทนพร็อพเพอร์ตี้ Kotlin 2 รายการ ได้แก่ by viewModels() สำหรับเข้าถึง ViewModel ที่เชื่อมโยงกับ Fragment แต่ละรายการ และ by activityViewModels() สำหรับเข้าถึง ViewModel ที่กำหนดขอบเขตไว้ในกิจกรรม
  • วงจรสูงสุด: ตอนนี้คุณสามารถตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยการเรียกใช้ setMaxLifecycle() ใน FragmentTransaction ซึ่งมาแทนที่ setUserVisibleHint() ที่เลิกใช้งานแล้ว FragmentPagerAdapter และ FragmentStatePagerAdapter มีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้
  • ตัวสร้าง FragmentActivity LayoutId: ตอนนี้คลาสย่อยของ FragmentActivity สามารถเรียกตัวสร้างใน FragmentActivity ที่ใช้รหัส R.layout ได้ ซึ่งจะระบุเลย์เอาต์ที่ควรตั้งค่าเป็นมุมมองเนื้อหาแทนการเรียก setContentView() ใน onCreate() ซึ่งจะไม่เปลี่ยนแปลงข้อกำหนดที่ว่าคลาสย่อยต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์
  • ตัวสร้าง Fragment LayoutId: ตอนนี้คลาสย่อยของ Fragment สามารถเรียกตัวสร้างใน Fragment ที่ใช้รหัส R.layout ได้โดยไม่บังคับ ซึ่งจะระบุเลย์เอาต์ที่ควรใช้สำหรับ Fragment นี้แทนการลบล้าง onCreateView() คุณกำหนดค่าเลย์เอาต์ที่ขยายได้ใน onViewCreated()
  • เลื่อนเวลาโดยมีระยะหมดเวลา: มีการเพิ่มการโอเวอร์โหลดใหม่ของ postponeEnterTransition() ซึ่งใช้ระยะหมดเวลา

เวอร์ชัน 1.1.0-rc04

7 สิงหาคม 2019

androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 และ androidx.fragment:fragment-testing:1.1.0-rc04 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858)

เวอร์ชัน 1.1.0-rc03

19 กรกฎาคม 2019

androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 และ androidx.fragment:fragment-testing:1.1.0-rc03 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • แก้ไขปัญหาที่การเรียกใช้ postponeEnterTransition() ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)

เวอร์ชัน 1.1.0-rc02

17 กรกฎาคม 2019

androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 และ androidx.fragment-testing:fragment:1.1.0-rc02 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • แก้ไขข้อขัดข้องใน FragmentPagerAdapter และ FragmentStatePagerAdapter เมื่อนำรายการปัจจุบันออก (b/137209870)

เวอร์ชัน 1.1.0-rc01

2 กรกฎาคม 2019

androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01 และ androidx.fragment:fragment-testing:1.1.0-rc01 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ฟร็อกเมนต์จะอัปเดตระดับการมองเห็นอย่างถูกต้องเมื่อใช้การดำเนินการ show() หรือ hide() ขณะที่การเปลี่ยนฉากกำลังทำงานอยู่ (b/133385058)
  • แก้ไขNullPointerExceptionเมื่อเปิดFragmentTransactionที่ใช้ setPrimaryNavigationFragment() ก่อน replace() (b/134673465)

เวอร์ชัน 1.1.0-beta01

5 มิถุนายน 2019

androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01 และ androidx.fragment:fragment-testing:1.1.0-beta01 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ระบบจะฝังandroidx.lifecycle.Lifecycleการเรียกกลับ (ที่เกี่ยวข้องกับ STARTED, RESUMED, PAUSED, STOPPED และ DESTROYED โดยเฉพาะ) สำหรับ Fragment ที่ซ้อนกันอย่างถูกต้องแล้ว (b/133497591)
  • ตอนนี้อินสแตนซ์ OnBackPressedCallback ที่ลงทะเบียนใน onCreate() ของ Fragment จะมีลำดับความสำคัญเหนือ FragmentManager ย่อยอย่างถูกต้อง (b/133175997)
  • ระบบจะไม่แสดงภาพเคลื่อนไหวของ Fragment ย่อยอีกต่อไปเมื่อมีการแทนที่ Fragment หลัก (b/121017790)
  • ตอนนี้ระบบจะไม่สนใจภาพเคลื่อนไหวและการเปลี่ยนฉากของ Fragment เมื่อใช้ animateLayoutChanges="true" ซึ่งจะช่วยแก้ไขปัญหาที่ Fragment ไม่ถูกทำลายอย่างถูกต้อง (b/116257087)

เวอร์ชัน 1.1.0-alpha09

16 พฤษภาคม 2019

androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09 และ androidx.fragment:fragment-testing:1.1.0-alpha09 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ Fragment จะได้รับการเรียกกลับไปยังเมธอด onPrimaryNavigationFragmentChanged(boolean) ใหม่เมื่อ Fragment การนำทางหลักมีการเปลี่ยนแปลง aosp/960857

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

  • ตอนนี้ระบบจะนำรายการเมนูที่ Fragment ย่อยขยายออกไปออกอย่างถูกต้องเมื่อมีการนำ Fragment หลักออก b/131581013

เวอร์ชัน 1.1.0-alpha08

7 พฤษภาคม 2019

androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 และ androidx.fragment:fragment-testing:1.1.0-alpha08 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

เวอร์ชันนี้ใช้ร่วมกับ Preferences 1.1.0-alpha01 ถึง 1.1.0-alpha04 ไม่ได้ โปรดอัปเกรดเป็น Preferences 1.1.0-alpha05 เมื่อใช้ Fragment เวอร์ชันนี้

ฟีเจอร์ใหม่

  • เพิ่มการโอเวอร์โหลดใหม่ของ postponeEnterTransition() ที่ใช้การหมดเวลา หลังจากนั้น Fragment จะเรียกใช้ startPostponedEnterTransition() โดยอัตโนมัติ b/120803208

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

  • การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ระบบได้นำเมธอด FragmentFactory instantiate ที่เลิกใช้งานไปก่อนหน้านี้ซึ่งรับ Bundle ออกแล้ว aosp/953856
  • การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: เราได้เปลี่ยนชื่อค่าคงที่ RESUME_ONLY_CURRENT_FRAGMENT และ USE_SET_USER_VISIBLE_HINT ใน FragmentPagerAdapter และ FragmentStatePagerAdapter เป็น BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT และ BEHAVIOR_SET_USER_VISIBLE_HINT ตามลำดับ aosp/954782

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

  • Fragment ที่มีวงจรจำกัดผ่าน setMaxLifecycle() จะไม่กลับมาทำงานอีกก่อนที่จะถึงสถานะสุดท้าย b/131557151
  • เมื่อใช้ setMaxLifecycle(Lifecycle.State.CREATED) ระบบจะทำลายมุมมองของ Fragment อย่างถูกต้อง aosp/954180

เวอร์ชัน 1.1.0-alpha07

25 เมษายน 2019

androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07 และ androidx.fragment:fragment-testing:1.1.0-alpha07 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยเรียกใช้ setMaxLifecycle() ใน FragmentTransaction ซึ่งมาแทนที่ setUserVisibleHint() ที่เลิกใช้งานแล้ว FragmentPagerAdapter และ FragmentStatePagerAdapter มีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ (b/129780800)

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

  • moveToState(STARTED) ใน FragmentScenario จะเรียกใช้ได้ในอุปกรณ์ API 24 ขึ้นไปเท่านั้น (b/129880016)

การเปลี่ยนแปลงพฤติกรรม

  • จาก (b/129907905) แฟรกเมนต์ใน Back Stack จะไม่ได้รับการเรียกกลับไปยัง onCreateView() เมื่อมีการสร้างกิจกรรมโฮสติ้งขึ้นใหม่ ตอนนี้ระบบจะเรียกใช้ onCreateView() เมื่อ Fragment ปรากฏเท่านั้น (กล่าวคือ เมื่อมีการป๊อป Back Stack)

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

  • แก้ไขปัญหาเมื่อใช้แท็ก <fragment> ใน XML และตัวสร้าง contentLayoutId ของ FragmentActivity หรือ AppCompatActivity (b/129907905)
  • แก้ไขปัญหาที่ระบบจะไม่ย้าย Fragment ใน Back Stack ไปยัง CREATED อย่างน้อยหลังจากเปลี่ยนการกำหนดค่า ซึ่งทำให้ ViewModel และ Fragment ย่อยที่เก็บไว้ไม่ได้รับการกำจัดอย่างถูกต้อง (b/129593351)
  • แก้ไขข้อขัดข้องใน restoreSaveState ซึ่งเกิดจากการไม่ซิงค์ของ Fragment ที่เก็บไว้หลังจากบันทึกสถานะอินสแตนซ์แล้ว (b/130433793) (aosp/947824)
  • แก้ไขปัญหาที่ระบบจะไม่เรียกใช้ OnBackPressedCallback ที่เพิ่มด้วยวงจรของ Fragment หาก FragmentManager มี Back Stack ดูรายละเอียดเพิ่มเติมได้ที่ androidx.activity 1.0.0-alpha07 (aosp/948209)
  • ตอนนี้ Fragment ไม่บังคับใช้ LAYER_TYPE_HARDWARE สำหรับภาพเคลื่อนไหวอีกต่อไป หากต้องการภาพเคลื่อนไหวเลเยอร์ฮาร์ดแวร์โดยเฉพาะ โปรดตั้งค่าเป็นส่วนหนึ่งของภาพเคลื่อนไหว (b/129486478)

เวอร์ชัน 1.1.0-alpha06

3 เมษายน 2019

androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06 และ androidx.fragment:fragment-testing:1.1.0-alpha06 จะเปิดตัว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ข้อยกเว้นที่ FragmentManager สร้างขึ้นจะมีชื่อของ Fragment อยู่ในข้อความด้วย (b/67759402)

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

  • Fragment และ FragmentActivity มีตัวสร้างที่ 2 ซึ่งใช้ @LayoutRes int ซึ่งจะแทนที่ลักษณะการทำงานก่อนหน้านี้ของการใส่คำอธิบายประกอบในคลาสด้วย @ContentView แนวทางนี้ใช้ได้ทั้งในโมดูลแอปและโมดูลไลบรารี (b/128352521)
  • ตอนนี้ onActivityResult() ของ FragmentActivity มีเครื่องหมายเป็น @CallSuper อย่างถูกต้องแล้ว (b/127971684)
  • ระบบได้เลิกใช้งานเมธอด instantiate ของ FragmentFactory ที่รับอาร์กิวเมนต์ Bundle แล้ว และแอปควรใช้โอเวอร์โหลด instantiate ใหม่ที่ไม่รับ Bundle (b/128836103)
  • ตอนนี้มีการใส่คำอธิบายประกอบเมธอด FragmentScenario อย่างถูกต้องด้วย @StyleRes แล้ว (aosp/924193)
  • FragmentTabHost เลิกใช้งานแล้ว (b/127971835)
  • นำ getThemedContext() ของ FragmentActivity ออกแล้ว (aosp/934078)

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

  • แก้ไขการถดถอยใน 1.1.0-alpha05 ที่ทำให้ Fragment ขาเข้ากะพริบบนหน้าจอ (b/129405432)
  • แก้ไขปัญหาที่ส่วนการนำทางหลักจะหายไปหลังจากดำเนินการชุด popBackStack+replace+popBackStack (b/124332597)
  • แก้ไขปัญหาเมื่อใช้ @ContentView constructors ในกิจกรรมเมื่อกู้คืนสถานะ Fragment (b/127313094)
  • แก้ไขตรรกะของ setTargetFragment() เมื่อแทนที่ Fragment เป้าหมายที่มีอยู่ด้วย Fragment ที่ยังไม่ได้แนบกับ FragmentManager (aosp/932156)

เวอร์ชัน 1.1.0-alpha05

13 มีนาคม 2019

androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05 และ androidx.fragment:fragment-testing:1.1.0-alpha05 จะเปิดตัว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ระบบจะแคชการค้นหาคำอธิบายประกอบ @ContentView แล้ว (b/123709449)

การเปลี่ยนแปลงพฤติกรรม

  • การเรียก remove(), hide(), show(), detach() และ setPrimaryNavigationFragment() โดยแนบ Fragment กับ FragmentManager อื่นจะทำให้เกิด IllegalStateException แทนที่จะล้มเหลวโดยไม่มีการแจ้งเตือน (aosp/904301)

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

  • onNewIntent สำหรับ FragmentActivity มีเครื่องหมาย @CallSuper (b/124120586) อย่างถูกต้องแล้ว
  • แก้ไขปัญหาที่อาจมีการเรียกใช้ onDismiss() ของ DialogFragment 2 ครั้งเมื่อใช้ getDialog().dismiss() หรือ getDialog().cancel() (b/126563750)

เวอร์ชัน 1.1.0-alpha04

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

androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 และ androidx.fragment:fragment-testing 1.1.0-alpha04 จะเปิดตัว

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ@ContentViewคำอธิบายประกอบคลาสที่ช่วยให้คุณระบุได้ว่าควรขยายไฟล์ XML ของเลย์เอาต์ใดแทนการลบล้าง onCreateView() ขอแนะนำให้ดูงานที่เกี่ยวข้องใน onViewCreated() (aosp/837619)
  • fragment-testing ตอนนี้ขึ้นอยู่กับ androidx.test:core-ktx 1.1.0 ที่เสถียร (b/121209673)
  • ตอนนี้คุณใช้ openActionBarOverflowOrOptionsMenu กับ FragmentScenario เพื่อทดสอบเมนูตัวเลือกที่โฮสต์ Fragment (b/121126668) ได้แล้ว

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

  • เพิ่มเมธอด requireArguments() ซึ่งจะแสดงผล @NonNull Bundle หรือส่ง IllegalStateException (b/121196360)
  • เพิ่มหมายเหตุว่าไม่ควรลบล้าง getLifecycle(), getViewLifecycleOwner() และ getViewLifecycleOwnerLiveData() และจะมีการกำหนดให้เป็นค่าสุดท้ายในรุ่นต่อๆ ไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างวิธีการนี้ (aosp/880714)
  • เพิ่มหมายเหตุว่าไม่ควรลบล้าง getViewModelStore() และจะถือเป็นค่าสุดท้ายในรุ่นต่อๆ ไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างวิธีการนี้ (aosp/880713)
  • แก้ไขปัญหาความเข้ากันได้แบบไบนารีกับ Fragment เวอร์ชันก่อนหน้า (aosp/887877) (aosp/889834)

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

  • ระบบจะล้างข้อมูลในส่วนเป้าหมายอย่างถูกต้องเมื่อคุณส่ง null ไปยัง setTargetFragment() (aosp/849969)
  • แก้ไขปัญหาที่บางครั้ง Fragment เป้าหมายไม่พร้อมใช้งานในหรือหลัง onDestroy() (b/122312935)
  • ตอนนี้ระบบจะเรียกใช้ onDismiss() ของ DialogFragment ก่อน onDestroy() (aosp/874133) (aosp/890734)

เวอร์ชัน 1.1.0-alpha03

17 ธันวาคม 2018

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment ใช้ BundleSavedStateRegistryOwner และขึ้นอยู่กับไลบรารี SavedState ที่เพิ่งเปิดตัว [aosp/824380]
  • by activityViewModels มีการเพิ่มตัวแทนพร็อพเพอร์ตี้ Kotlin เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับ Activity ที่มีอยู่ [b/119050253]
  • by viewModelsพร็อพเพอร์ตี้ดีลิเกตของ Kotlin ได้รับการขยายให้ใช้เมธอด Lambda ที่ไม่บังคับเพื่อรับ ViewModelStoreOwner ซึ่งช่วยให้คุณส่ง Fragment หลักหรือ ViewModelStoreOwner ที่กำหนดเองอื่นๆ ด้วยโค้ด เช่น val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

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

  • FragmentScenario ตอนนี้ให้คุณระบุธีม เช่น Theme.AppCompat [b/119054431] ได้แล้ว นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
  • เพิ่มเมธอด requireView() ซึ่งจะแสดงผล @NonNull View หรือส่ง IllegalStateException [b/120241368]
  • เพิ่มเมธอด requireParentFragment() ซึ่งจะแสดงผล @NonNull Fragment หรือส่ง IllegalStateException [b/112103783]

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

  • แก้ไข IllegalStateException: บันทึกสถานะไม่สำเร็จ b/120814739
  • ตอนนี้ Fragment ที่กําลังกู้คืนจากสถานะอินสแตนซ์ที่บันทึกไว้จะได้รับ Bundle [b/119794496] ที่ไม่ใช่ค่าว่างเสมอ
  • Fragment ที่นำออกจะไม่นำออบเจ็กต์ Lifecycle มาใช้ซ้ำอีกหากมีการเพิ่มอีกครั้ง [b/118880674]

เวอร์ชัน 1.1.0-alpha02

3 ธันวาคม 2018

ฟีเจอร์ใหม่

  • ตอนนี้ส่วนขยาย Kotlin ของ FragmentScenario ช่วยให้คุณใช้ Lambda ในการสร้าง Fragment แทนการส่งอินสแตนซ์ FragmentFactory ได้แล้ว (aosp/812913)

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

  • แก้ไข IllegalStateException เมื่อใช้ Fragment ที่ซ้อนกันใน Back Stack (b/119256498)
  • แก้ไขการขัดข้องเมื่อใช้ FragmentScenario.recreate() กับ FragmentFactory (aosp/820540)
  • แก้ไขปัญหาที่เข้าถึง Fragment เป้าหมายไม่ได้หลังจากนำ Fragment ออก (aosp/807634)

เวอร์ชัน 1.1.0-alpha01

5 พฤศจิกายน 2018

นี่คือรุ่นแรกของ fragment-testing อาร์ติแฟกต์และ FragmentScenario ซึ่งสร้างขึ้นจาก androidx.test:core APIs ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบการทดสอบ Fragment

ฟีเจอร์ใหม่

  • คลาส FragmentScenario ใหม่สำหรับการทดสอบ Fragment แบบแยก
  • ตอนนี้คุณตั้งค่า FragmentFactory ใน FragmentManager ใดก็ได้เพื่อควบคุมวิธี สร้างอินสแตนซ์ Fragment ใหม่
  • เพิ่มby viewModels()ตัวแทนพร็อพเพอร์ตี้ Kotlin ใหม่สำหรับการดึงข้อมูล ViewModel จาก Fragment
  • ตอนนี้ระบบจะยกเลิกเหตุการณ์อินพุตที่รอดำเนินการ (เช่น การคลิก) ใน Fragment onStop()

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

  • ขยายคำอธิบายประกอบความสามารถในการเว้นว่างอย่างมีนัยสำคัญใน Fragment API surface

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

  • แก้ไขปัญหาที่ทำให้การดำเนินการ Fragment ล้มเหลวจากภายใน LiveData (b/77944637)

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

  • คุณจะเข้าถึง Target Fragment ไม่ได้หลังจากที่นำ Fragment ออกจาก FragmentManager แล้ว
  • fragment-testing ขึ้นอยู่กับ androidx.test:core:1.0.0-beta01 แทนที่จะเป็น androidx.test:core:1.0.0 ที่ถูกต้อง