ส่วนย่อย
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 13 สิงหาคม 2025 | 1.8.9 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Fragment คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูลของคุณ
ดึงดูด
dependencies { def fragment_version = "1.8.9" // 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.8.9" // 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 ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 1.8
เวอร์ชัน 1.8.9
13 สิงหาคม 2025
androidx.fragment:fragment-*:1.8.9 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.9 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ซึ่งจะแสดงการซ่อนจะทำให้ท่าทางสัมผัสถัดไปเคลื่อนไหวไม่ถูกต้องเมื่อใช้ Animator (I0a400, b/384765586)
- แก้ไขข้อผิดพลาดที่การรวมกันของ
setMaxLifecycleและpopBackStackอาจย้าย Fragment ด้านบนไปยังสถานะ 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มีAndroidFragmentComposableที่อนุญาตให้เพิ่ม Fragment ลงในลำดับชั้นของ Compose ผ่านชื่อคลาส Fragment แล้ว ซึ่งจะจัดการการบันทึกและกู้คืนสถานะของ Fragment โดยอัตโนมัติ ควรใช้วิธีนี้แทนที่วิธีที่แนะนำก่อนหน้านี้โดยตรง ซึ่งก็คือการใช้AndroidViewBindingเพื่อขยาย Fragment - ตอนนี้
onBackStackChangeCancelledการเรียกกลับในอินเทอร์เฟซของFragmentManagerOnBackStackChangedListenerจะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการใน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 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
AndroidFragmentComposableใหม่ช่วยให้เพิ่ม Fragment ลงในลำดับชั้นของ Compose ผ่านชื่อคลาส Fragment ได้ ซึ่งจะจัดการการบันทึกและกู้คืนสถานะของ Fragment โดยอัตโนมัติ ซึ่งใช้แทน AndroidViewBinding ได้โดยตรงComposable.(b/312895363, Icf841)
การเปลี่ยนแปลงเอกสาร
- อัปเดตเอกสารประกอบสำหรับ
OnBackStackChangedListenerAPI เพื่อระบุเวลาที่เรียกใช้และวิธีใช้ (I0bfd9)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Profile Installer 1.3.1 แล้ว
เวอร์ชัน 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 |
ได้ |
Framework Transition |
R.transition |
ไม่ได้ |
AndroidX Transition ที่มี Transition 1.4.1 หรือต่ำกว่า |
R.transition |
ไม่ได้ |
AndroidX 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 มีการเปลี่ยนแปลงเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Profile Installer 1.3.1 แล้ว
เวอร์ชัน 1.7.0-beta01
20 มีนาคม 2024
androidx.fragment:fragment-*:1.7.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
FragmentHostCallbackเขียนด้วย Kotlin เพื่อให้ค่า Null ของประเภททั่วไปของโฮสต์ตรงกับค่า Null ของประเภทการคืนค่าของ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 คุณจะเข้าถึงสถานะต่างๆ เช่น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 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- เราได้อัปเดต Fragment ให้ขึ้นอยู่กับ
animateToStartAPI ใหม่ที่เพิ่มเข้ามาใน Transition1.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 แรกในสแต็กย้อนกลับของ 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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เมื่อขยาย
FragmentContainerViewสถานะของFragmentContainerViewเช่น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)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ 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 และหลังจากที่คอมมิตธุรกรรมตามลำดับFragmentStrictModeเพิ่มWrongNestedHierarchyViolationใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้น View ของ Fragment หลัก แต่ไม่ได้เพิ่มลงในchildFragmentManagerของ Fragment หลัก- ตอนนี้เราได้ใส่คำอธิบายประกอบ API
FragmentและFragmentManagerที่รับIntentหรือIntentSenderอย่างถูกต้องด้วย@NonNullเพื่อป้องกันการส่งค่าว่าง เนื่องจากค่าว่างจะทำให้ 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การเรียกกลับถูกส่งสำหรับการทำธุรกรรมที่ไม่ได้เปลี่ยน Back Stack จริงๆ หากมีการผสมกับการทำธุรกรรมที่เปลี่ยน (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)- API
commitNow(),executePendingTransactions()และpopBackStackImmediate()ได้รับการอธิบายประกอบด้วย@MainThreadซึ่งหมายความว่าตอนนี้ API ทั้งหมดจะแสดงข้อผิดพลาดในการสร้างเมื่อไม่ได้เรียกจากเทรดหลัก แทนที่จะรอให้เกิดข้อผิดพลาดในรันไทม์ (Ic9665, b/236538905)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องใน
FragmentManagerที่การบันทึกและกู้คืนในเฟรมเดียวกันอาจทำให้เกิดข้อขัดข้อง (Ib36af, b/246519668) - ตอนนี้
OnBackStackChangedListeneronBackStackChangeStartedและonBackStackChangeCommittedจะเรียกใช้เมื่อมีการเปลี่ยนแปลงสแต็กย้อนกลับของ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 ที่ยกเลิกการเชื่อมต่อแล้วไปยังการเรียกกลับ (I66a76, b/273568280)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.6: แก้ไขปัญหาที่การเรียกclearFragmentResultListenerภายในsetFragmentResultListenerจะไม่ทำงานหากLifecycleเป็นSTARTEDอยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.6.1แล้ว (586fe7) - ตอนนี้ Fragment จะขึ้นอยู่กับ SavedState
1.2.1(078e4e) - ตอนนี้ Fragment ขึ้นอยู่กับ ProfileInstaller
1.3.0แล้ว (3fc05b)
เวอร์ชัน 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การเรียกกลับในFragmentManagerของonBackStackChangedListenerก่อนที่ Fragment จะเริ่มเปลี่ยนไปเป็นสถานะเป้าหมาย (I34726)
เวอร์ชัน 1.6.0-alpha05
8 กุมภาพันธ์ 2023
androidx.fragment:fragment-*:1.6.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
FragmentManager.OnBackStackChagnedListenerอินเทอร์เฟซมีฟังก์ชันเรียกกลับเพิ่มเติม 2 รายการ ได้แก่onBackStackChangeStartedและonBackStackChangeCommittedซึ่งช่วยให้มีข้อมูลและการควบคุมเพิ่มเติมเมื่อมีการเปลี่ยนแปลงสแต็กย้อนกลับในFragmentManager(Ib7ce5, b/238686802)
การเปลี่ยนแปลง API
- ตอนนี้เราได้ใส่คำอธิบายประกอบที่เหมาะสมให้กับ API
FragmentและFragmentManagerที่ใช้IntentหรือIntentSenderด้วย@NonNullเพื่อป้องกันการส่งค่าว่าง เนื่องจากค่าว่างจะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้หยุดทำงานทันทีเสมอ (I06fd4)
เวอร์ชัน 1.6.0-alpha04
7 ธันวาคม 2022
androidx.fragment:fragment-*:1.6.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentStrictModeเพิ่มWrongNestedHierarchyViolationใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้น View ของ Fragment หลัก แต่ไม่ได้เพิ่มลงในchildFragmentManagerของ Fragment หลัก (I72521, b/249299268)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ Fragment จะคืนค่า
SavedStateRegistryสถานะก่อนonAttach()เพื่อให้แน่ใจว่า Fragment จะพร้อมใช้งานจากเมธอดวงจรการทำงานทั้งหมดที่สูงขึ้น (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)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.5.1: ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Lifecycle2.5.1แล้ว (Id204c) - จาก Fragment
1.5.1: ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity1.5.1แล้ว (I10f07)
รุ่น 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ซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารี 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แบบไม่มีสถานะผ่าน Lifecycle2.5.0ของCreationExtrasได้แล้ว - การผสานรวมกล่องโต้ตอบคอมโพเนนต์ -
DialogFragmentตอนนี้ใช้ComponentDialogผ่าน Activity1.5.0เป็นกล่องโต้ตอบเริ่มต้นที่onCreateDialog()แสดงผล - การปรับโครงสร้างโค้ดสถานะอินสแตนซ์ที่บันทึกไว้ - Fragment เริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์แล้ว ซึ่งเป็นความพยายามที่จะช่วยระบุอย่างชัดเจนว่ามีการบันทึกสถานะใดไว้ใน Fragment และแหล่งที่มาของสถานะ การเปลี่ยนแปลงในปัจจุบันมีดังนี้
FragmentManagerจะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงในBundleแทนที่จะบันทึกลงในParcelableที่กำหนดเองโดยตรง- ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าผ่าน
Fragment Result APIsซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของFragmentManager - ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ
FragmentManagerซึ่งช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในบันทึกการแก้ไขข้อบกพร่องของFragmentได้
การเปลี่ยนแปลงอื่นๆ
FragmentStrictModeมีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้allowViolation()กับชื่อคลาส- เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน
ActionBarของกิจกรรมแล้ว APIMenuHostและMenuProviderที่เพิ่มใน Activity1.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
- เราเลิกใช้งาน
setHasOptionsMenu()ของFragmentแล้ว หากต้องการจัดการเมนูและรายการเมนู คุณควรใช้ Menu API ใหม่แทนตามหมายเหตุประจำรุ่นของ Fragment1.5.0-alpha04(I7b4b4, b/226438239)
เวอร์ชัน 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 กับกิจกรรมอย่างแน่นแฟ้นและไม่สามารถทดสอบแยกกันได้ APIMenuHostและMenuProviderที่เพิ่มใน Activity1.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 ซึ่งเปิดตัวเป็นส่วนหนึ่งของ Lifecycle2.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ที่กำหนดเอง แทนที่จะใช้โรงงานของ Fragment เสมอ (I56170, b/214106513) - แก้ไขข้อขัดข้องเมื่อเข้าถึง
ViewModelเป็นครั้งแรกจากแฮนเดิลการเรียกกลับregisterForActivityResult()ของ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แลมบ์ดาที่กำหนดเองกับฟังก์ชันby viewModels()lazy ตอนนี้จะใช้defaultViewModelProviderFactoryจากเจ้าของนั้นหากไม่ได้ระบุViewModelProvider.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
FragmentStrictModeAPI มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ API ของ Fragment ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะพิมพ์ข้อความบันทึก เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่าFragmentStrictMode.Policyที่ควบคุมการตรวจสอบที่เปิดใช้และ "บทลงโทษ" ที่เรียกใช้ได้ในFragmentManagerผ่านเมธอดsetStrictModePolicy()ใหม่ นโยบายดังกล่าวมีผลกับFragmentManagerและมีผลต่อเนื่องกับ FragmentManager ย่อยที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดูโหมด Strict สำหรับ FragmentFragmentContainerViewตอนนี้มีเมธอดgetFragment()ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับfindFragmentById()ที่มีรหัสของFragmentContainerViewแต่จะอนุญาตให้เชื่อมโยงการเรียกval navController = binding.container.getFragment<NavHostFragment>().navControllerFragmentScenarioได้ติดตั้งใช้งานCloseableแล้ว ซึ่งช่วยให้คุณใช้ได้กับเมธอดuseของ Kotlin หรือ try-with-resourcesเพิ่ม
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragment หรือไม่เราได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน
การย้อนกลับหลายครั้ง
FragmentManager จะเก็บสแต็กย้อนกลับที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม
การเปิดตัวนี้จะขยายกลไกเหล่านี้โดยการจัดหา FragmentManager API ใหม่ 3 รายการ ได้แก่ saveBackStack(String name), restoreBackStack(String name) และ clearBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุก Fragment ที่เพิ่มในการทำธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมและ Fragment ได้ในภายหลัง ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพโดยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้
saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้
saveBackStack()popBackStack()จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่saveBackStack()จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้addToBackStack()ที่มีชื่อที่ตรงกันและไม่ใช่ค่าว่างมาก่อน- ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียกใช้
onSaveInstanceState()ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ViewModelที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และไม่เรียกใช้onCleared()ในอินสแตนซ์เหล่านั้น)
ธุรกรรมแบบแยกส่วนที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของแต่ละส่วนต้องใช้
setReorderingAllowed(true)เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าจะมีอะไรเปลี่ยนแปลงใน Back Stack ในช่วงเวลาดังกล่าวก็ตาม
- ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า
FragmentManagerจะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว
เช่นเดียวกับ saveBackStack(), restoreBackStack() และ clearBackStack() ซึ่งจะกู้คืนหรือล้างสแต็กย้อนกลับที่บันทึกไว้ก่อนหน้านี้ตามลำดับ ทั้ง 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 มีคอมมิตต่อไปนี้
Lint
- เพิ่ม
DetachAndAttachFragmentInSameFragmentTransactionคำเตือนของโปรแกรมตรวจสอบโค้ดเพื่อตรวจหาการเรียกทั้งdetach()และattach()ในFragmentเดียวกันในFragmentTransactionเดียวกัน เนื่องจากเมื่อดำเนินการในธุรกรรมเดียวกัน การดำเนินการเสริมเหล่านี้จะหักล้างกันเอง จึงต้องแยกออกเป็นธุรกรรมที่แยกกันเพื่อดำเนินการจริง (aosp/1832956, b/200867930) - เพิ่ม
FragmentAddMenuProviderข้อผิดพลาดของ Lint สำหรับการแก้ไขการใช้งานวงจรของ Fragment เป็นวงจรของมุมมอง Fragment เมื่อใช้addMenuProviderAPI ของMenuHost(aosp/1830457, b/200326272)
การอัปเดตเอกสารประกอบ
- ข้อความการเลิกใช้งานสำหรับ API ที่ตอนนี้จัดการโดย Activity Result APIs ซึ่งได้แก่
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)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.3.6: ตอนนี้ Fragment ขึ้นอยู่กับ Activity1.2.4(I3a66c)
เวอร์ชัน 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มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งมีคอนเทนเนอร์หลัก ที่ระบบจะเพิ่มส่วนย่อยลงไป (Ic33a7) WrongFragmentContainerViolationตอนนี้มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงคอนเทนเนอร์ที่ มีการเพิ่ม Fragment (Ib55f8)- ตอนนี้คลาสกรณีการใช้งานสำหรับ
TargetFragmentUsageViolationมีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งรวมถึงส่วนที่ทำให้เกิดการละเมิดและข้อมูลอื่นๆ ที่มีอยู่ (Icc6ac) - คลาสที่ขยาย
RetainInstanceUsageViolationจะมีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งรวมถึง Fragment ที่ทำให้เกิดการละเมิด (I6bd55) FragmentReuseViolationมีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงรหัสก่อนหน้าของ Fragment (I28ce2)SetUserVisibleHintViolationมีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงคำแนะนำที่ผู้ใช้ มองเห็นที่กำลังตั้งค่า (Ib2d5f)
- ตอนนี้
การเปลี่ยนแปลงลักษณะการทำงาน
- ยกเลิกการจำกัดการเรียก
fitsSystemWindowsในFragmentContainerViewแล้ว ซึ่งจะไม่ทำให้แอปขัดข้องอีกต่อไป (6b8ddd, b/190622202)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.3.5: แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันซึ่งเปิดตัวใน Fragment1.3.4โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนฉากได้อย่างถูกต้องแล้ว (ทั้งที่ตั้งค่าโดยตรงผ่านtransitionGroup="true"หรือโดยอ้อมผ่านtransitionNameหรือbackground) และ องค์ประกอบที่ใช้ร่วมกันจะไม่แสดงIndexOutOfBoundsExceptionอีกต่อไป (I16484, b/188679569, b/188969304) FragmentManagerจะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนการนำ Fragment ออก (I573dd, b/183634730)- การตรวจสอบ Lint ของ
OnCreateDialogIncorrectCallbackจะไม่ขัดข้องอีกต่อไปเมื่อประเมินตัวแปรระดับบนสุด (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เพื่อเพิ่มข้อมูลโครงสร้างตามการละเมิดแต่ละครั้ง ซึ่งจะช่วยให้คุณยืนยันได้อย่างชัดเจนว่าอะไรเป็นสาเหตุของการละเมิดพร้อมกับส่วนที่ละเมิด (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 (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 จะเก็บสแต็กย้อนกลับที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม
การเปิดตัวนี้จะขยายกลไกเหล่านี้ด้วยการจัดหา FragmentManager API ใหม่ 2 รายการ ได้แก่ saveBackStack(String name) และ restoreBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุก Fragment ที่เพิ่มในการทำธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมและ Fragment ได้ในภายหลัง ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพโดยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้
saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้
saveBackStack()popBackStack()จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่saveBackStack()จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้addToBackStack()ที่มีชื่อที่ตรงกันและไม่ใช่ค่าว่างมาก่อน- ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียกใช้
onSaveInstanceState()ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ViewModelที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และไม่เรียกใช้onCleared()ในอินสแตนซ์เหล่านั้น)
ธุรกรรมแบบแยกส่วนที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของแต่ละส่วนต้องใช้
setReorderingAllowed(true)เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าจะมีอะไรเปลี่ยนแปลงใน Back Stack ในช่วงเวลาดังกล่าวก็ตาม
- ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า
FragmentManagerจะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว
เช่นเดียวกับ saveBackStack() restoreBackStack() จะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้ (b/80029773)
StrictMode ของ Fragment
FragmentStrictMode API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ API ของ Fragment ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะพิมพ์ข้อความบันทึก เรียกใช้ 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()จะตรวจจับเมื่อคุณใช้ APIsetRetainInstance()หรือgetRetainInstance()ที่เลิกใช้งานแล้ว (#140, b/153737954)detectSetUserVisibleHint()จะตรวจหาเมื่อคุณใช้ APIsetUserVisibleHint()ที่เลิกใช้งานแล้ว (#136, b/153738974)detectTargetFragmentUsage()จะตรวจจับเมื่อคุณใช้ APIsetTargetFragment(),getTargetFragment()หรือgetTargetRequestCode()ที่เลิกใช้งานแล้ว (#139, b/153737745)
การเปลี่ยนแปลง API
- เราได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน (I90036, b/162776418) FragmentScenarioได้ติดตั้งใช้งานCloseableแล้ว ซึ่งช่วยให้คุณใช้ได้กับเมธอดuseของ Kotlin หรือ try-with-resources (#121, b/143774122)
การตรวจสอบ Lint ใหม่
UseGetLayoutInflaterการตรวจสอบ Lint จะแสดงคำเตือนเมื่อใช้LayoutInflater.from(Context)ภายในDialogFragment- คุณควรใช้วิธีgetLayoutInflater()ของ DialogFragment เสมอเพื่อให้ได้LayoutInflaterที่เหมาะสม (#156, b/170781346)DialogFragmentCallbacksDetectorการตรวจสอบ Lint จะแจ้งเตือนเมื่อเรียกใช้setOnCancelListenerหรือsetOnDismissListenerในเมธอดonCreateDialog()ของDialogFragmentซึ่งเป็นเจ้าของ Listener เหล่านี้ และคุณควรลบล้างonCancel()และonDismiss()เพื่อรับการเรียกกลับเหล่านี้DialogFragment(#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)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ simonschiller ที่ทำให้
FragmentScenarioนำCloseableไปใช้ (#121, b/143774122) - ขอขอบคุณ simonschiller ที่เพิ่ม API ของ
FragmentStrictModeทั้งหมดสำหรับการเปิดตัวนี้ (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - ขอขอบคุณ tatocaster ที่เพิ่ม
UseGetLayoutInflaterการตรวจสอบ Lint (#156, b/170781346) - ขอขอบคุณ tatocaster ที่เพิ่ม
DialogFragmentCallbacksDetectorการตรวจสอบ Lint (#171, b/181780047)
เวอร์ชัน 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)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.3.6: ตอนนี้ Fragment ขึ้นอยู่กับ Activity1.2.4(I3a66c)
เวอร์ชัน 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 สามารถใช้ Inset ได้อย่างอิสระ (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)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.2.2 ซึ่งแก้ไขปัญหาเกี่ยวกับการตรวจสอบ Lint ของ
InvalidFragmentVersionForActivityResultActivity เมื่อใช้ 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) - ไม่มี
}ที่ส่วนท้ายของส่วนย่อย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)
การอัปเดตการขึ้นต่อกัน
- Fragment 1.3.1 ขึ้นอยู่กับ Activity
1.2.1(I557b9)
เวอร์ชัน 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ที่เปิดตัวใน Activity1.2.0เพื่อจัดการstartActivityForResult()+onActivityResult()รวมถึงโฟลว์requestPermissions()+onRequestPermissionsResult()โดยไม่ต้องแทนที่เมธอดใน Fragment นอกเหนือจากการให้ Hook สำหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว- การเปิดตัวนี้แก้ไขปัญหาหลายอย่างเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ Activity Result API ใช้งานไม่ได้ใน
FragmentActivityเวอร์ชันก่อนหน้า คุณต้องอัปเกรดเป็น Fragment 1.3.0 เพื่อใช้ Activity Result API ในFragmentActivityหรือAppCompatActivity
- การเปิดตัวนี้แก้ไขปัญหาหลายอย่างเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ Activity Result API ใช้งานไม่ได้ใน
Fragment Result API: เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน
FragmentManagerซึ่งใช้ได้กับส่วนลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ในการนำทาง และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะSTARTEDเป็นอย่างน้อย เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้วเพื่อรองรับ API ใหม่เหล่านี้ ดูหัวข้อรับผลลัพธ์โดยใช้ Fragment Result APIFragmentOnAttachListener: เราเลิกใช้งานการเรียกกลับ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แต่ละรายการเป็นครั้งแรก- ตอนนี้มีทางเลือกอื่นแทน
FragmentScenarioAPI ของonFragmentในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ KotlinwithFragmentซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันนี้จะส่งต่อข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุ
ViewTreeการรองรับ:Fragmentตอนนี้รองรับ APIViewTreeLifecycleOwner.get(View),ViewTreeViewModelStoreOwner.get(View)และViewTreeSavedStateRegistryOwnerที่เพิ่มเข้ามาใน Lifecycle2.3.0และ SavedState1.1.0เพื่อให้ส่งคืน Fragment เป็นViewModelStoreOwnerรวมถึงSavedStateRegistryOwnerและLifecycleOwnerที่เชื่อมโยงกับ view Lifecycle ของ Fragment เมื่อใช้ViewภายในFragmentTRANSIT_การเปลี่ยนแปลงภาพเคลื่อนไหว: ตอนนี้เอฟเฟกต์เริ่มต้นของ Fragment,TRANSIT_FRAGMENT_OPEN,TRANSIT_FRAGMENT_CLOSEและTRANSIT_FRAGMENT_FADEจะใช้AnimatorแทนAnimationตอนนี้ทรัพยากรที่ใช้สร้างภาพเคลื่อนไหวเหล่านี้เป็นแบบส่วนตัวแล้วการเลิกใช้งาน
setRetainInstance(): เราเลิกใช้งานเมธอดsetRetainInstance()ใน Fragment แล้ว เมื่อเปิดตัว ViewModels นักพัฒนาซอฟต์แวร์จะมี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ 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จะปรากฏเหนือDialogFragmentกล่องโต้ตอบย่อยDialogFragmentหลังจากเปลี่ยนการกำหนดค่า ตอนนี้กล่องโต้ตอบย่อยจะปรากฏเหนือกล่องโต้ตอบหลักเสมอ (I30806, b/177439520) - แก้ไขปัญหาที่การดำเนินการ
hideด้วยAnimationจะทำให้เศษซ่อนกะพริบที่ส่วนท้ายของภาพเคลื่อนไหว (I57e22, b/175417675) - ตอนนี้ Fragment ที่มีการเปลี่ยนฉากซึ่งเพิ่มก่อนที่จะแนบลำดับชั้นของ View จะเข้าถึง
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 ด้วย
DESTROYEDstate จะทำให้เกิด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
- อัปเกรด androidx เพื่อใช้ Kotlin 1.4 (Id6471, b/165307851, b/165300826)
การเปลี่ยนแปลงลักษณะการทำงาน
- ไฟล์ทรัพยากรของ 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 มีคอมมิตต่อไปนี้
New State Manager
การเผยแพร่นี้รวมถึงการปรับโครงสร้างครั้งใหญ่ของการจัดการสถานะภายในของ FragmentManager ซึ่งส่งผลต่อการเรียกใช้เมธอดวงจร การเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการธุรกรรมที่เลื่อนออกไป ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่บล็อกโพสต์ "Fragments: Rebuilding the Internals" (b/139536619, b/147749580)
- คุณใช้ API experimental ใน
FragmentManager.enableNewStateManager(boolean)เพื่อควบคุมว่า FragmentManager จะใช้เครื่องมือจัดการสถานะใหม่หรือไม่ (I7b6ee)
ปัญหาต่อไปนี้จะได้รับการแก้ไขเมื่อใช้เครื่องมือจัดการสถานะใหม่เท่านั้น
- ตอนนี้ระบบจะหยุดส่วนก่อนหน้าของ
replaceการดำเนินการอย่างถูกต้องก่อนที่จะเริ่มส่วนใหม่ (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()จากภายในแฮนเดิลonAttachFragment()(b/153082833)- ตอนนี้ Fragment จะไม่เรียกใช้
onCreateView()ใน Fragment ที่กำลังถูกทำลายเมื่อมีการเลื่อนเวลาการแทนที่ Fragment (b/143915710) - ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อพยายามรวมอินสแตนซ์ของเฟรมเวิร์ก
Transitionและ AndroidXTransitionจะกล่าวถึง Fragment ที่มีการเปลี่ยนที่ไม่ถูกต้อง (b/155574969)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้คุณสามารถโทรหา
launch()ในActivityResultLauncherในเมธอดวงจรonCreate()ของ Fragment ได้แล้ว (b/161464278) - ตอนนี้การเรียกใช้
registerForActivityResult()หลังจากonCreate()จะทำให้เกิดข้อยกเว้นที่ระบุว่าไม่อนุญาตให้ดำเนินการนี้ แทนที่จะไม่แสดงผลลัพธ์อย่างเงียบๆ หลังจากเปลี่ยนการกำหนดค่า (b/162255449) FragmentActivityใช้OnContextAvailableListenerAPI ที่เปิดตัวใน Activity1.2.0-alpha08เพื่อคืนค่าสถานะของFragmentManagerListener ที่เพิ่มลงในคลาสย่อยของ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)- เพิ่มทางเลือกแทน
FragmentScenarioAPI ของonFragmentในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ KotlinwithFragmentซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันนี้จะส่งต่อข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุ (b/158697631)
การเปลี่ยนแปลงลักษณะการทำงาน
FragmentScenarioใช้setMaxLifecycle()เพื่อใช้moveToState()ซึ่งช่วยให้มั่นใจได้ถึงลักษณะการทำงานที่สอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐาน (b/156527405)SavedStateRegistryOwnerที่ViewTreeSavedStateRegistryOwnerแสดงผลจะเชื่อมโยงกับวงจรของมุมมอง Fragment แล้ว ซึ่งช่วยให้มั่นใจได้ว่าระบบจะบันทึกและกู้คืนสถานะของ Fragment พร้อมกับมุมมองของ Fragment (b/158503763)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment จะรอให้มุมมองของ Fragment แนบก่อนที่จะเรียก
ViewCompat.requestApplyInsets()เพื่อหลีกเลี่ยงกรณีที่คำขอแทรกถูกทิ้ง (b/158095749) - การเรียก
clearFragmentResultListenerจะล้าง เครื่องสังเกตวงจรของออบเจ็กต์ได้อย่างถูกต้องแล้ว (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 ขององค์ประกอบย่อยโดยตรง (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 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ViewTreeViewModelStoreOwnerจาก Lifecycle2.3.0-alpha03และViewTreeSavedStateRegistryOwnerจาก SavedState1.1.0-alpha01เมื่อใช้ViewภายในFragment(aosp/1297993, aosp/1300264)
การเปลี่ยนแปลง 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 API (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 ในคลาสDialogFragmentเนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ จึงทำให้ใช้thisหรือviewLifecycleOwnerได้อย่างปลอดภัยเมื่อเรียกใช้observe(b/151765086)
การเปลี่ยนแปลงการขึ้นต่อกัน
- Fragment ขึ้นอยู่กับ Activity
1.2.0-alpha03ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result API ที่เปิดตัวใน Activity1.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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ActivityResultRegistryAPI ที่เปิดตัวใน Activity1.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: แก้ไขผลบวกที่ผิดพลาดในการตรวจสอบUseRequireInsteadOfGetLint เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ 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 ที่เพิ่มใน Lifecycle2.3.0-alpha01เพื่อให้แสดงviewLifecycleOwnerของ Fragment เป็นLifecycleOwnerสำหรับ View ใดก็ตามที่onCreateView()แสดง (aosp/1182955)
การเปลี่ยนแปลง API
- เลิกใช้งานเมธอด
setRetainInstance()ใน Fragment แล้ว เมื่อเปิดตัว ViewModels นักพัฒนาซอฟต์แวร์จะมี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่ใช่ Fragment ที่เก็บไว้ และแยกสถานะที่ต้องการเก็บไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหล ขณะเดียวกันก็ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและทำลายสถานะที่เก็บไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของViewModelและการเรียกกลับonCleared()ที่ได้รับ) (b/143911815) - เมื่อเปิดตัว ViewPager2
1.0.0คลาสFragmentPagerAdapterและFragmentStatePagerAdapterสำหรับการโต้ตอบกับViewPagerจึงถูกเลิกใช้งาน ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2 (b/145132715)
การแก้ไขข้อบกพร่อง
- ตอนนี้กฎ ProGuard ของ Fragment จะเก็บเฉพาะตัวสร้างเริ่มต้นของคลาส
Fragmentที่ใช้เท่านั้น ไม่ใช่สำหรับอินสแตนซ์Fragmentทั้งหมด ซึ่งแก้ไขการถดถอยที่เกิดขึ้นใน Fragment1.2.1(b/149665169 require___()กฎ Lint ที่เพิ่มใน Fragment1.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 ฟีเจอร์นี้เปิดตัวใน Fragment1.3.0-alpha04ไปแล้วก่อนหน้านี้ (b/154645875) - การเรียกใช้
setMenuVisibility(false)ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุได้อย่างถูกต้องแล้ว ฟีเจอร์นี้เปิดตัวใน Fragment1.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)
- แก้ไขผลการตรวจหาที่ผิดพลาดใน
UseRequireInsteadOfGetLint check เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ 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 ใหม่
- 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อีกต่อไปเมื่อมีการทำลายกิจกรรมแล้ว (b/148189412)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Fragment
1.2.1จะขึ้นอยู่กับ Lifecycle ViewModel SavedState2.2.0
เวอร์ชัน 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()เวลา: ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวขาออก การเปลี่ยนเฟรมเวิร์กขาออก และการเปลี่ยน AndroidX ขาออก (เมื่อใช้ Transition1.3.0) เสร็จสมบูรณ์ก่อนที่จะเรียกใช้onDestroyView()- อิงตามคลาส
add()และreplace(): เพิ่มการโอเวอร์โหลดใหม่ของadd()และreplace()ในFragmentTransactionที่ใช้Class<? extends Fragment>และอาร์กิวเมนต์Bundleที่ไม่บังคับ วิธีการเหล่านี้ใช้FragmentFactoryเพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)) ลงในfragment-ktxด้วย - การผสานรวม ViewModel ของ Lifecycle กับ SavedState: ตอนนี้
SavedStateViewModelFactoryเป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้by viewModels(),by activityViewModels(), ตัวสร้างViewModelProviderหรือViewModelProviders.of()กับ Fragment - การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้
getViewLifecycleOwner()เมื่อสังเกตLiveDataจากonCreateView(),onViewCreated()หรือonActivityCreated() getFragmentManager()การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดgetFragmentManager()และrequireFragmentManager()ใน Fragment แล้ว และแทนที่ด้วยเมธอดgetParentFragmentManager()เมธอดเดียว ซึ่งจะแสดงผลFragmentManagerที่ไม่ใช่ค่าว่างซึ่ง Fragment เพิ่มเข้าไป (คุณใช้isAdded()เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่)FragmentManager.enableDebugLogging()การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดแบบคงที่FragmentManager.enableDebugLoggingแล้ว ตอนนี้ FragmentManager จะใช้Log.isLoggable()สำหรับแท็กFragmentManagerซึ่งช่วยให้คุณเปิดใช้การบันทึกDEBUGหรือVERBOSEได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง
ปัญหาที่ทราบ
- ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์
classหรือandroid:nameในFragmentContainerViewโดยอัตโนมัติ คุณจึงต้องเพิ่มกฎการเก็บรักษาสำหรับคลาส 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>อย่างถูกต้อง แม้ว่า 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการเปลี่ยนแปลงลักษณะการทำงานโดยไม่ตั้งใจซึ่งทำให้
findFragmentById()/findFragmentByTag()ยังคงแสดงผล Fragment ที่ถูกนำออกไปแล้วในขณะที่ภาพเคลื่อนไหว/การเปลี่ยนฉากขาออกทำงานอยู่ (b/143982969, aosp/1167585) - ตอนนี้ระบบจะหยุด Child Fragment อย่างถูกต้องก่อน Parent Fragment เมื่อกิจกรรมที่มีอยู่เรียกใช้
onSaveInstanceState()(b/144380645) - แก้ไขปัญหาที่ระบบทำเครื่องหมายว่าดูแล้ว
INVISIBLEอย่างไม่ถูกต้องหลังจากแสดง Fragment ที่ซ่อนอยู่ (b/70793925) - ตอนนี้การเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันของ Fragment จะจัดการ View ที่หมุน ปรับขนาด ฯลฯ ได้แล้ว (b/142835261)
การอัปเดตเอกสารประกอบ
- ปรับปรุงเอกสารประกอบการเลิกใช้งานเกี่ยวกับ
setUserVisibleHint()(b/143897055) - ปรับปรุงเอกสารประกอบเกี่ยวกับ
setFragmentFactory()และgetFragmentFactory()เพื่อระบุให้ดียิ่งขึ้นว่าการตั้งค่าFragmentFactoryจะส่งผลต่อ FragmentManager ของ Fragment ย่อยด้วย (aosp/1170095)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.2.0-rc03, Lifecycle ViewModel SavedState1.0.0-rc03และ Activity1.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()(เปิดตัวใน Fragment1.2.0-rc01) จะใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ KotlinviewLifecycleOwnerแทน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โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎการเก็บรักษาสำหรับคลาส 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 เริ่มต้นพร้อมการรองรับเพิ่มเติมสำหรับแอตทริบิวต์ XMLandroid:nameและandroid:tagที่ไม่บังคับFragmentContainerViewใช้FragmentTransactionปกติเบื้องหลังเพื่อเพิ่ม Fragment เริ่มต้น ซึ่งช่วยให้ดำเนินการFragmentTransactionเพิ่มเติมในFragmentContainerViewได้ และเปิดใช้การใช้ View Binding สำหรับเลย์เอาต์ ซึ่งแตกต่างจากแท็ก<fragment>(b/139830628, b/141177981)- ตอนนี้ Fragment มีคำเตือนของ Lint ซึ่งเสนอวิธีแก้ไขด่วนเพื่อแทนที่
<fragment>ด้วยFragmentContainerView(b/139830056)
แก้ไขข้อบกพร่อง
- แก้ไข
ClassCastExceptionเมื่อใช้androidx.transition(b/140680619) - เมื่อใช้ Transition
1.3.0-beta01ตอนนี้ Fragment จะรอให้การเปลี่ยนandroidx.transitionเสร็จสิ้น (นอกเหนือจากการเปลี่ยนและภาพเคลื่อนไหวของเฟรมเวิร์ก ซึ่งได้รับการแก้ไขใน Fragment1.2.0-alpha03และ Fragment1.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 Test1.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 ที่เกี่ยวข้องกับชื่อ Breadcrumb ใน
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 ของ Fragment ย่อยอย่างเหมาะสม (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
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ระบบได้นำเมธอด
FragmentFactoryinstantiateที่เลิกใช้งานไปก่อนหน้านี้ซึ่งรับ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)
- แก้ไขปัญหาที่ทำให้ Fragment การนำทางหลักหายไปหลังจากดำเนินการชุด popBackStack+replace+popBackStack (b/124332597)
- แก้ไขปัญหาเมื่อใช้
@ContentViewตัวสร้างในกิจกรรมเมื่อกู้คืนสถานะ 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) แล้ว- แก้ไขปัญหาที่อาจมีการเรียกใช้
DialogFragmentonDismiss()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-ktx1.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 ได้รับการขยายให้ใช้วิธีแลมบ์ดาที่ไม่บังคับเพื่อรับ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 property delegate ใหม่สําหรับการดึงข้อมูล ViewModel จาก Fragment - ตอนนี้ระบบจะยกเลิกเหตุการณ์อินพุตที่รอดำเนินการ (เช่น การคลิก) ใน
onStop()ของ Fragment
การเปลี่ยนแปลง API
- ขยายคำอธิบายประกอบการยอมรับค่า Null ได้อย่างมากใน 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ที่ถูกต้อง