ส่วนย่อย
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 13 สิงหาคม 2025 | 1.8.9 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Fragment คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ 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 ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Issue Tracker
เวอร์ชัน 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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ 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 |
ใช่ |
เฟรมเวิร์ก 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 มีการเปลี่ยนแปลงเหล่านี้
การอัปเดตทรัพยากร Dependency
- ตอนนี้ 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 เพื่อให้ความสามารถในการเว้นว่างของประเภททั่วไปของโฮสต์ตรงกับความสามารถในการเว้นว่างของประเภทการแสดงผลของ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 มีคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- เราได้อัปเดต 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 แรกใน Back Stack ของ Fragment Manager และทำให้ Activity เสร็จสิ้นเมื่อใช้การย้อนกลับของระบบผ่านการไปยังส่วนต่างๆ แบบ 3 ปุ่มหรือท่าทางสัมผัสสำหรับการย้อนกลับที่คาดการณ์ได้ (I0664b, b/295231788)
เวอร์ชัน 1.7.0-alpha02
9 สิงหาคม 2023
androidx.fragment:fragment-*:1.7.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เมื่อใช้แฟรกเมนต์กับท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้จาก API 34 หากคุณใช้ระบบการเปลี่ยนฉากที่ไม่รองรับการค้นหา (
Animations,Transitions) หรือไม่มีการเปลี่ยนฉากเลย ตอนนี้แฟรกเมนต์จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการย้อนกลับ (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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.7.2 แล้ว ซึ่งจะแก้ปัญหาที่ผู้ใช้ Kotlin ขยาย
ComponentDialogไม่ได้หากไม่มีการอ้างอิงที่ชัดเจนใน Activity (b/287509323)
เวอร์ชัน 1.6.0
7 มิถุนายน 2023
androidx.fragment:fragment-*:1.6.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.5.0
- สถานะที่บันทึกไว้ของ
Fragmentได้รับการแยกออกเป็นสถานะของคลังส่วนตัว (คลาสParcelableที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ในBundleเสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ FragmentManager.OnBackStackChangedListenerอินเทอร์เฟซได้รับการขยายด้วย Callback เพิ่มเติม 2 รายการของonBackStackChangeStartedและonBackStackChangeCommittedซึ่งจะเรียกใช้กับแต่ละFragmentก่อนที่จะเพิ่ม/นำออกจาก Back Stack ของ Fragment และหลังจากที่คอมมิตธุรกรรมตามลำดับFragmentStrictModeเพิ่มWrongNestedHierarchyViolationใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้นการแสดงผลของ Fragment หลัก แต่ไม่ได้เพิ่มลงในchildFragmentManagerของ Fragment หลัก- ตอนนี้ API
FragmentและFragmentManagerที่ใช้IntentหรือIntentSenderมีคำอธิบายประกอบที่ถูกต้องด้วย@NonNullเพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้หยุดทำงานทันทีเสมอ DialogFragmentตอนนี้ให้สิทธิ์เข้าถึงComponentDialogพื้นฐานผ่านrequireComponentDialog()API แล้ว- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.6.1แล้ว - ตอนนี้ Fragment ขึ้นอยู่กับ SavedState
1.2.1แล้ว - ตอนนี้ Fragment ขึ้นอยู่กับ ProfileInstaller
1.3.0แล้ว อาร์ติแฟกต์
fragment-testing-manifestจะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากความแตกต่างของเวอร์ชันระหว่าง
fragment-testingกับandroidx.test
เวอร์ชัน 1.6.0-rc01
10 พฤษภาคม 2023
androidx.fragment:fragment-*:1.6.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ระบบส่ง
ActivityResultพร้อมรหัสคำขอที่ไม่ถูกต้องเมื่อมีการส่งคำขอstartActivityForResultหลายรายการติดต่อกัน (If0b9d, b/249519359) - แก้ไขปัญหาที่
onBackStackChangeListenerการเรียกกลับถูกส่งสำหรับการทำธุรกรรมที่ไม่ได้เปลี่ยน 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และ CallbackonBackStackChangeCommittedจะทำงานเมื่อมีการเปลี่ยนแปลง Back StackFragmentManagerเท่านั้น (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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ 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การเรียกกลับใหม่ในFragmentManageronBackStackChangedListenerก่อนที่ Fragment จะเริ่มย้ายไปยังสถานะเป้าหมาย (I34726)
เวอร์ชัน 1.6.0-alpha05
8 กุมภาพันธ์ 2023
androidx.fragment:fragment-*:1.6.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha05 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
FragmentManager.OnBackStackChagnedListenerตอนนี้อินเทอร์เฟซมี Callback เพิ่มเติม 2 รายการ ได้แก่onBackStackChangeStartedและonBackStackChangeCommittedซึ่งช่วยให้มีข้อมูลและการควบคุมเพิ่มเติมเมื่อมีการเปลี่ยนแปลง Back Stack ในFragmentManager(Ib7ce5, b/238686802)
การเปลี่ยนแปลง API
- ตอนนี้เราได้ใส่คำอธิบายประกอบ API
FragmentและFragmentManagerที่ใช้IntentหรือIntentSenderอย่างถูกต้องด้วย@NonNullเพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้ขัดข้องทันทีเสมอ (I06fd4)
เวอร์ชัน 1.6.0-alpha04
7 ธันวาคม 2022
androidx.fragment:fragment-*:1.6.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentStrictModeเพิ่มWrongNestedHierarchyViolationใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้นการแสดงผลของ Fragment หลัก แต่ไม่ได้เพิ่มลงในchildFragmentManagerของ Fragment หลัก (I72521, b/249299268)
การเปลี่ยนแปลงพฤติกรรม
- ตอนนี้ Fragment จะกู้คืนสถานะ
SavedStateRegistryก่อนonAttach()เพื่อให้มั่นใจว่าสถานะจะพร้อมใช้งานจากวิธีการวงจรทั้งหมดที่สูงขึ้น (I1e2b1)
การเปลี่ยนแปลง API
- อาร์ติแฟกต์
fragment-testing-manifestจะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง fragment-testing กับ androidx.test(I8e534, b/128612536)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.5: Fragment จะไม่บันทึกสถานะViewModelเป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอย่างไม่ถูกต้องอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.6.0-alpha03
5 ตุลาคม 2022
androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03 และ androidx.fragment:fragment-testing:1.6.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้คลาสที่ขยาย
DialogFragmentจะต้องเรียกใช้ super ในการลบล้างonDismiss()(I14798, b/238928865)
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซ Callback ของผู้ให้บริการรายใหม่ (
OnConfigurationChangedProvider,OnMultiWindowModeChangedProvider,OnTrimMemoryProvider,OnPictureInPictureModeChangedProvider) เพื่อให้มั่นใจว่า Fragment จะได้รับการเรียกกลับที่เหมาะสมเสมอ (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
เวอร์ชัน 1.6.0-alpha02
24 สิงหาคม 2022
androidx.fragment:fragment:1.6.0-alpha02 androidx.fragment:fragment-ktx:1.6.0-alpha02 และ androidx.fragment:fragment-testing:1.6.0-alpha02 ออกแล้ว เวอร์ชัน 1.6.0-alpha02 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.2: แก้ไขปัญหาที่การดำเนินการธุรกรรมpopBackStack()และreplace()พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้Animation/Animatorที่ไม่ถูกต้อง (Ib1c07, b/214835303)
เวอร์ชัน 1.6.0-alpha01
27 กรกฎาคม 2022
androidx.fragment:fragment:1.6.0-alpha01 androidx.fragment:fragment-ktx:1.6.0-alpha01 และ androidx.fragment:fragment-testing:1.6.0-alpha01 ออกอากาศแล้ว เวอร์ชัน 1.6.0-alpha01 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลงพฤติกรรม
- สถานะที่บันทึกไว้ของ
Fragmentได้รับการแยกออกเป็นสถานะของคลังส่วนตัว (คลาสParcelableที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ในBundleเสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ (b/207158202)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.1: แก้ไขการถดถอยในDialogFragmentCallbacksDetectorซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)
การอัปเดตทรัพยากร Dependency
- จาก 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ที่กำหนดเองกับโฮสต์ที่ไม่ได้ใช้ อินเทอร์เฟซ Callback ของผู้ให้บริการ (OnConfigurationChangedProvider,OnMultiWindowModeChangedProvider,OnTrimMemoryProvider,OnPictureInPictureModeChangedProvider) และการเรียกฟังก์ชันการส่งที่เลิกใช้งานแล้วจะส่งไปยัง Fragment ย่อยไม่สำเร็จ (I9b380)
เวอร์ชัน 1.5.3
21 กันยายน 2022
androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3 และ androidx.fragment:fragment-testing:1.5.3 เปิดตัวแล้ว เวอร์ชัน 1.5.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดที่ทำให้ Fragment ใน Back Stack ได้รับการเรียกกลับ
onMultiWindowModeChanged(),onPictureInPictureModeChanged(),onLowMemory()และonConfigurationChanged()(I34581, I8dfe6, b/242570955) - Fragment ย่อยที่ซ้อนกันจะไม่ได้รับการเรียกกลับ
onMultiWindowModeChanged(),onPictureInPictureModeChanged(),onLowMemory()หรือonConfigurationChanged()หลายรายการอีกต่อไป (I690b3, Id0096, If9d6b, I2cba2)
รุ่น 1.5.2
10 สิงหาคม 2022
androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2 และ androidx.fragment:fragment-testing:1.5.2 เปิดตัวแล้ว เวอร์ชัน 1.5.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การดำเนินการธุรกรรม
popBackStack()และreplace()พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้Animation/Animatorที่ไม่ถูกต้อง (Ib1c07, b/214835303)
รุ่น 1.5.1
27 กรกฎาคม 2022
androidx.fragment:fragment:1.5.1 androidx.fragment:fragment-ktx:1.5.1 และ androidx.fragment:fragment-testing:1.5.1 ออกอากาศแล้ว เวอร์ชัน 1.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการเกิดปัญหาซ้ำใน
DialogFragmentCallbacksDetectorซึ่งการใช้เวอร์ชันเครื่องมือวิเคราะห์ซอร์สโค้ดที่มาพร้อมกับ AGP 7.4 จะทำให้เครื่องมือวิเคราะห์ซอร์สโค้ดขัดข้อง (b/237567009)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Lifecycle
2.5.1แล้ว (Id204c) - ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity
1.5.1แล้ว (I10f07)
เวอร์ชัน 1.5.0
29 มิถุนายน 2022
androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0 และ androidx.fragment:fragment-testing:1.5.0 เปิดตัวแล้ว เวอร์ชัน 1.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.4.0
- การผสานรวม CreationExtras -
Fragmentตอนนี้สามารถระบุViewModelProvider.Factoryแบบไม่เก็บสถานะผ่าน วงจร2.5.0ของCreationExtrasได้แล้ว - การผสานรวมกล่องโต้ตอบคอมโพเนนต์ -
DialogFragmentตอนนี้ใช้ComponentDialogผ่าน 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ที่กำหนดเอง แทนที่จะใช้ 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)- เมื่อใช้
ownerProducerLambda ที่กำหนดเองกับฟังก์ชันby viewModels()lazy ตอนนี้จะใช้defaultViewModelProviderFactoryจากเจ้าของนั้นหากไม่ได้ระบุViewModelProvider.Factoryที่กำหนดเอง แทนที่จะใช้ Factory ของ Fragment เสมอ (I56170, b/214106513)
เวอร์ชัน 1.4.0
17 พฤศจิกายน 2021
androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0 และ androidx.fragment:fragment-testing:1.4.0 เปิดตัวแล้ว เวอร์ชัน 1.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.3.0
FragmentStrictModeAPI มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะส่งข้อความในบันทึกเข้าจอ เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่าFragmentStrictMode.Policyที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่เรียกใช้ได้ในFragmentManagerผ่านเมธอดsetStrictModePolicy()ใหม่ นโยบายดังกล่าวจะมีผลกับFragmentManagerนั้นและมีผลต่อเนื่องไปยัง FragmentManager ย่อยใดก็ตามที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดูโหมดเข้มงวดสำหรับ FragmentFragmentContainerViewตอนนี้มีเมธอดgetFragment()ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับfindFragmentById()ที่มีรหัสของFragmentContainerViewแต่จะอนุญาตให้เชื่อมโยงการเรียกval navController = binding.container.getFragment<NavHostFragment>().navControllerตอนนี้
FragmentScenarioได้ติดตั้งใช้งานCloseableแล้ว ซึ่งช่วยให้คุณใช้FragmentScenarioกับเมธอดuseหรือ try-with-resources ของ Kotlin ได้เพิ่ม
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragment หรือไม่เราได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน
การย้อนกลับหลายครั้ง
FragmentManager จะดูแล Back Stack ที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม
การเปิดตัวนี้จะขยายกลไกเหล่านี้โดยการจัดหา FragmentManager API ใหม่ 3 รายการ ได้แก่ saveBackStack(String name), restoreBackStack(String name) และ clearBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุก Fragment ที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมสถานะเดิมได้ในภายหลัง ซึ่งช่วยให้คุณ 'สลับ' ระหว่าง Back Stack หลายรายการได้อย่างมีประสิทธิภาพโดยการบันทึก Back Stack ปัจจุบันและกู้คืน Back Stack ที่บันทึกไว้
saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้
saveBackStack()popBackStack()จะแสดงธุรกรรมทั้งหมดใน Back Stack หากไม่พบชื่อที่ระบุใน Back Stack หรือหากมีการระบุชื่อเป็นค่าว่าง แต่saveBackStack()จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้addToBackStack()ที่มีชื่อที่แน่นอนและไม่ใช่ค่าว่างนั้นก่อนหน้านี้- ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียก
onSaveInstanceState()ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ViewModelที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และไม่ได้เรียกonCleared()ในอินสแตนซ์เหล่านั้น)
ธุรกรรมย่อยที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของแต่ละ Fragment ต้องใช้
setReorderingAllowed(true)เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับ Back Stack ในช่วงเวลาดังกล่าว
- ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า
FragmentManagerจะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว
เช่นเดียวกับ saveBackStack(), restoreBackStack() และ clearBackStack() ซึ่งจะกู้คืนหรือล้าง Back Stack ที่บันทึกไว้ก่อนหน้านี้ตามลำดับ ทั้ง 2 อย่างจะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้
ดูข้อมูลเพิ่มเติมได้ที่สแต็กย้อนกลับหลายรายการ: ข้อมูลเชิงลึก
เวอร์ชัน 1.4.0-rc01
3 พฤศจิกายน 2021
androidx.fragment:fragment:1.4.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก Fragment 1.4.0-beta01 เวอร์ชัน 1.4.0-rc01 มีคอมมิตเหล่านี้
เวอร์ชัน 1.4.0-beta01
27 ตุลาคม 2021
androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 และ androidx.fragment:fragment-testing:1.4.0-beta01 เปิดตัวแล้ว เวอร์ชัน 1.4.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment หลักจะส่ง
onHiddenChanged()ลงไป ทั้งลำดับชั้นก่อนที่จะเรียกใช้การเรียกกลับของตัวเอง (Iedc20, b/77504618) - ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อเปลี่ยนจาก Fragment ที่มีแป้นพิมพ์เปิดอยู่ไปยัง Fragment ที่มี RecyclerView (I8b842, b/196852211)
DialogFragmentตอนนี้ใช้setReorderingAllowed(true)สำหรับธุรกรรมทั้งหมด ที่สร้างขึ้นเมื่อคุณเรียกใช้show(),showNow()หรือdismiss()(Ie2c14)- คำเตือนของ Lint ที่ยาวมากของ
DetachAndAttachFragmentInSameFragmentTransactionได้รับการย่อให้เหลือDetachAndAttachSameFragmentแล้ว (e9eca3)
เวอร์ชัน 1.4.0-alpha10
29 กันยายน 2021
androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 และ androidx.fragment:fragment-testing:1.4.0-alpha10 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha10 มีคอมมิตเหล่านี้
เครื่องมือวิเคราะห์ซอร์สโค้ด
- เพิ่ม
DetachAndAttachFragmentInSameFragmentTransactionคำเตือนของ Lint สำหรับการตรวจหาการเรียกทั้งdetach()และattach()ในFragmentเดียวกันในFragmentTransactionเดียวกัน เนื่องจากเมื่อดำเนินการในธุรกรรมเดียวกัน การดำเนินการเสริมเหล่านี้จะยกเลิกซึ่งกันและกัน จึงต้องแยกออกเป็นธุรกรรมที่แยกกันเพื่อดำเนินการจริง (aosp/1832956, b/200867930) - เพิ่มข้อผิดพลาดของ
FragmentAddMenuProviderLint สำหรับการแก้ไขการใช้งานวงจรของ 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)
การอัปเดตทรัพยากร Dependency
- จาก 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()ซึ่งเป็นส่วนหนึ่งของการรองรับ Back Stack หลายรายการจะล้มเหลวเมื่อดำเนินการพร้อมกับการเรียกใช้FragmentTransactionที่ใช้replace()(I73137) - แก้ไข
NullPointerExceptionที่ จะเกิดขึ้นหลังจากกู้คืน Back Stack ที่บันทึกไว้ด้วยตนเอง ซึ่งมีธุรกรรมหลายรายการ เมื่อใช้restoreBackStack()API สำหรับ การรองรับ Back Stack หลายรายการ นอกจากนี้ ยังแก้ไขปัญหาที่ระบบไม่ได้ตรวจสอบ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จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนส่วนที่นำออก (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มีการระบุ Fragment เป้าหมายและรหัสคำขอ (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 จะดูแล Back Stack ที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม
การเปิดตัวนี้จะขยายกลไกเหล่านี้ด้วยการจัดหา FragmentManager API ใหม่ 2 รายการ ได้แก่ saveBackStack(String name) และ restoreBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุก Fragment ที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมสถานะเดิมได้ในภายหลัง ซึ่งช่วยให้คุณ 'สลับ' ระหว่าง Back Stack หลายรายการได้อย่างมีประสิทธิภาพโดยการบันทึก Back Stack ปัจจุบันและกู้คืน Back Stack ที่บันทึกไว้
saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้
saveBackStack()popBackStack()จะแสดงธุรกรรมทั้งหมดใน Back Stack หากไม่พบชื่อที่ระบุใน Back Stack หรือหากมีการระบุชื่อเป็นค่าว่าง แต่saveBackStack()จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้addToBackStack()ที่มีชื่อที่แน่นอนและไม่ใช่ค่าว่างนั้นก่อนหน้านี้- ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียก
onSaveInstanceState()ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ViewModelที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และไม่ได้เรียกonCleared()ในอินสแตนซ์เหล่านั้น)
ธุรกรรมย่อยที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของแต่ละ Fragment ต้องใช้
setReorderingAllowed(true)เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับ Back Stack ในช่วงเวลาดังกล่าว
- ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า
FragmentManagerจะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว
เช่นเดียวกับ saveBackStack() restoreBackStack() จะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้ (b/80029773)
StrictMode ของ Fragment
FragmentStrictMode API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะส่งข้อความในบันทึกเข้าจอ เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่า FragmentStrictMode.Policy ที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่เรียกใช้ได้ใน FragmentManager ผ่านเมธอด setStrictModePolicy() ใหม่ นโยบายดังกล่าวจะมีผลกับ FragmentManager นั้นและมีผลต่อเนื่องไปยัง FragmentManager ย่อยใดก็ตามที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง (#123, #131, #150, b/143774122)
detectFragmentReuse()จะตรวจหาว่ามีการเพิ่มอินสแตนซ์Fragmentที่นำออกไปก่อนหน้านี้กลับเข้าไปในFragmentManagerหรือไม่ คุณไม่ควรโต้ตอบหรือเก็บข้อมูลอ้างอิงถึงอินสแตนซ์Fragmentหลังจากที่อินสแตนซ์ดังกล่าวถูกทำลายและนำออกจากFragmentManagerแล้ว (#142, b/153738653)detectFragmentTagUsage()จะตรวจหาเมื่อคุณใช้แท็ก<fragment>ใน XML ของเลย์เอาต์ คุณควรใช้FragmentContainerViewเสมอเมื่อขยาย Fragment เป็นส่วนหนึ่งของเลย์เอาต์ (#141, b/153738235)detectWrongFragmentContainer()จะตรวจจับเมื่อคุณเพิ่ม Fragment ลงใน Container ที่ไม่ใช่FragmentContainerViewคุณควรใช้FragmentContainerViewเป็นคอนเทนเนอร์สำหรับ Fragment ในเลย์เอาต์เสมอ (#146, b/181137036)detectRetainInstanceUsage()จะตรวจจับเมื่อคุณใช้ 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แล้ว ซึ่งช่วยให้คุณใช้FragmentScenarioกับเมธอดuseหรือ try-with-resources ของ Kotlin ได้ (#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 ที่เพิ่มการตรวจสอบ Lint
UseGetLayoutInflater(#156, b/170781346) - ขอขอบคุณ tatocaster ที่เพิ่มการตรวจสอบ Lint
DialogFragmentCallbacksDetector(#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)
การอัปเดตทรัพยากร Dependency
- จาก 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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ 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) - ไม่มี
}ที่ส่วนท้ายของ FragmenttoString()อีกต่อไป (I54705, b/177761088) - ตอนนี้เมธอดที่ลบล้างใน FragmentActivity จะรับช่วง JavaDoc ของเมธอดพื้นฐานอย่างถูกต้อง (I736ce, b/139548782)
- เอกสารสำหรับ
setFragmentResultและsetFragmentResultListenerได้อัปเดตเอกสารพารามิเตอร์เพื่อแสดงให้เห็นว่าระบบไม่รับค่า Null อีกต่อไป (I990ba, b/178348386)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- แก้ไขปัญหาหน่วยความจำรั่วไหลใน Fragment ที่เกิดจาก
mFocusedView(Ib4e9e, b/179925887) - ตอนนี้ Fragment จะเรียกใช้
onCreateOptionsMenuอย่างถูกต้องเมื่อใช้ แสดง/ซ่อนธุรกรรม (I8bce8, b/180255554) - ตอนนี้ Fragment ย่อยที่มีการเปลี่ยนฉากซึ่งเริ่มก่อนที่ Fragment จะได้รับการจัดวางจะเข้าถึง
RESUMEDได้อย่างถูกต้อง (Ic11e6, b/180825150) - ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก
<fragment>จะไปถึงRESUMEDเสมอ (I452ac, (I9fa49)
การอัปเดตทรัพยากร Dependency
- 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: เพิ่มการรองรับ
ActivityResultRegistryAPI ที่เปิดตัวใน 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 ใน Navigation และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง 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_การเปลี่ยนแปลงภาพเคลื่อนไหว: ตอนนี้เอฟเฟกต์เริ่มต้นของส่วนTRANSIT_FRAGMENT_OPEN,TRANSIT_FRAGMENT_CLOSEและTRANSIT_FRAGMENT_FADEจะใช้AnimatorแทนAnimationตอนนี้แหล่งข้อมูลที่ใช้สร้างภาพเคลื่อนไหวเหล่านี้เป็นแบบส่วนตัวแล้วsetRetainInstance()การเลิกใช้งาน: เราเลิกใช้งานเมธอดsetRetainInstance()ใน Fragment แล้ว เมื่อเปิดตัว ViewModels นักพัฒนาซอฟต์แวร์จะมี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่ใช่ Fragment ที่เก็บไว้ และเก็บสถานะเฉพาะที่ต้องการแยกไว้ได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหล ขณะเดียวกันก็ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและทำลายสถานะที่เก็บไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของViewModelและ CallbackonCleared()ที่ได้รับ)การเลิกใช้งานอะแดปเตอร์ ViewPager 1: เมื่อเปิดตัว ViewPager2
1.0.0คลาสFragmentPagerAdapterและFragmentStatePagerAdapterสำหรับการโต้ตอบกับViewPagerจึงถูกเลิกใช้งาน ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2
เวอร์ชัน 1.3.0-rc02
27 มกราคม 2021
androidx.fragment:fragment:1.3.0-rc02 androidx.fragment:fragment-ktx:1.3.0-rc02 และ androidx.fragment:fragment-testing:1.3.0-rc02 ออกอากาศแล้ว เวอร์ชัน 1.3.0-rc02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
DialogFragmentหลักจะปรากฏเหนือDialogFragmentย่อยหลังจากเปลี่ยนการกำหนดค่า ตอนนี้ส่วนย่อยของกล่องโต้ตอบย่อยจะปรากฏเหนือส่วนย่อยของกล่องโต้ตอบหลักเสมอ (I30806, b/177439520) - แก้ไขปัญหาที่การดำเนินการ
hideด้วยAnimationจะทำให้แฟรกเมนต์ที่ซ่อนอยู่กะพริบที่ส่วนท้ายของภาพเคลื่อนไหว (I57e22, b/175417675) - ตอนนี้ Fragment ที่มีการเปลี่ยนฉากซึ่งเพิ่มก่อนที่จะแนบลำดับชั้นการแสดงผลจะเข้าถึง
RESUMEDได้อย่างถูกต้อง (I1fc1d, b/177154873)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- ตอนนี้มุมมองของ Fragment
Lifecycleจัดการกรณีที่มุมมองของ Fragment ถูกทำลายก่อนที่LifecycleจะไปถึงCREATEDได้อย่างถูกต้องแล้ว เพื่อหลีกเลี่ยงข้อยกเว้นที่ระบุว่า "ไม่มีเหตุการณ์จาก INITIALIZED" (eda2bd, b/176138645) - ตอนนี้ Fragment ที่ใช้
Animatorจะปรากฏตามลำดับที่ถูกต้องเมื่อใช้FragmentContainerView(Id9aa3, b/176089197)
เวอร์ชัน 1.3.0-rc01
16 ธันวาคม 2020
androidx.fragment:fragment:1.3.0-rc01 androidx.fragment:fragment-ktx:1.3.0-rc01 และ androidx.fragment:fragment-testing:1.3.0-rc01 ออกอากาศแล้ว เวอร์ชัน 1.3.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
onPrepareOptionsMenu()จะใช้ตรรกะเดียวกันกับonCreateOptionsMenu()และจะไม่เรียกใช้เมื่อ Fragment หลัก เรียกใช้setMenuVisibility(false)อีกต่อไป (Id7de8, b/173203654)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- แก้ไขการรั่วไหลและอาร์ติแฟกต์ภาพเมื่อเพิ่ม Fragment ที่มี
AnimationลงในFragmentContainerViewแล้วขัดจังหวะการเพิ่มนั้นด้วยการดำเนินการป๊อป (I952d8) - แก้ไขปัญหาที่มุมมองของ Fragment จะยังคงอยู่ในลำดับชั้นการแสดงผลหากมีการแทนที่ในระหว่างเมธอด
onCreate()หรือonViewCreated()(I8a7d5) - ตอนนี้ระบบจะคืนค่าโฟกัสไปยังมุมมองรากของ Fragment อย่างถูกต้องเมื่อมีการกลับมาทำงานต่อ (Ifc84b)
- การรวมการดำเนินการป๊อปและการแทนที่ในธุรกรรมของ Fragment เดียวกันจะแสดงภาพเคลื่อนไหวที่เหมาะสม (Ifd4e4, b/170328691)
เวอร์ชัน 1.3.0-beta02
2 ธันวาคม 2020
androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 และ androidx.fragment:fragment-testing:1.3.0-beta02 เปิดตัวแล้ว เวอร์ชัน 1.3.0-beta02 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
FragmentScenarioได้รับการแปลงเป็น Kotlin อย่างสมบูรณ์แล้วในขณะที่ยังคงความเข้ากันได้ของแหล่งที่มาและไบนารีผ่านการใช้อินเทอร์เฟซฟังก์ชันของ Kotlin 1.4 สำหรับFragmentAction(I19d31)
การเปลี่ยนแปลงพฤติกรรม
- ตอนนี้คุณสามารถใช้ FragmentContainerView ที่ไม่ได้ขยาย Fragment โดยใช้แอตทริบิวต์
classหรือandroid:nameนอกFragmentActivityได้แล้ว (Id4397, b/172266337) - ตอนนี้การพยายามตั้งค่าวงจรสูงสุดของ Fragment เป็น
DESTROYEDจะทำให้เกิดIllegalArgumentException(Ie7651, b/170765622) - ตอนนี้การเริ่มต้น FragmentScenario ด้วยสถานะ
DESTROYEDจะทำให้เกิดIllegalArgumentException(I73590, b/170765622)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- แก้ไขปัญหาที่มุมมองจะไม่ถึงสถานะสุดท้ายหากคุณขัดจังหวะการเปลี่ยน Fragment ที่ใช้
Animatorหรือตัวเลือกใดตัวเลือกหนึ่งของTRANSIT_FRAGMENT_(I92426, b/169874632) - แก้ไขปัญหาที่ทำให้ระบบทำลาย Fragment ที่มี
Animationออกอย่างไม่ถูกต้อง (I83d65) - ตอนนี้การออกจาก Fragment ที่มีการกลับเอฟเฟกต์จะ ยกเลิกและรีสตาร์ทอย่างถูกต้องด้วยเอฟเฟกต์การเข้าที่เหมาะสม (I62226, b/167092035)
- แก้ไขปัญหาที่การออก
Animatorจากhide()ไม่ทำงาน (Id7ffe) - ตอนนี้ Fragment จะปรากฏอย่างถูกต้องเมื่อเลื่อนออกไปแล้วเริ่มทันที (Ie713b, b/170022857)
- Fragment ที่นำมุมมองที่โฟกัสออกในระหว่างภาพเคลื่อนไหวจะไม่พยายามกู้คืนโฟกัสในมุมมองที่แยกออกมาอีกต่อไปเมื่อถึง
RESUMED(I38c65, b/172925703)
การมีส่วนร่วมภายนอก
FragmentFactoryจะแคชคลาส Fragment แยกกันสำหรับอินสแตนซ์ClassLoaderที่แตกต่างกัน ขอขอบคุณ Simon Schiller (#87, b/113886460)
เวอร์ชัน 1.3.0-beta01
1 ตุลาคม 2020
androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 และ androidx.fragment:fragment-testing:1.3.0-beta01 เปิดตัวแล้ว เวอร์ชัน 1.3.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
setMaxLifecycle()ตอนนี้รองรับการตั้งค่าสถานะLifecycleเป็นINITIALIZINGตราบใดที่ยังไม่ได้ย้ายชิ้นส่วนไปยังCREATED(b/159662173)
การเปลี่ยนแปลง API
- อัปเกรด 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)
- ตอนนี้ State Manager ใหม่จะนำมุมมอง Fragment ที่ออกไปออกอย่างสม่ำเสมอก่อนที่จะเพิ่มมุมมอง Fragment ที่เข้ามา (I41a6e)
- ตอนนี้ State Manager ใหม่จะพิจารณาการเปลี่ยนแปลงระดับการเข้าถึงของมุมมอง 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)
ปัญหาต่อไปนี้จะได้รับการแก้ไขเมื่อใช้เครื่องมือจัดการสถานะใหม่เท่านั้น
- ตอนนี้ระบบจะหยุด Fragment ก่อนหน้าของ
replaceการดำเนินการอย่างถูกต้องก่อนที่จะเริ่ม Fragment ใหม่ (b/161654580) - ตอนนี้ Fragment จะป้องกันไม่ให้แอนิเมชันหลายรายการที่แข่งขันกันแสดงใน Fragment เดียวกัน เพื่อหลีกเลี่ยงกรณีที่
Animationจะลบล้างเอฟเฟกต์Transitionทั้งหมด หรือกรณีที่AnimatorและTransitionใน Fragment เดียวจะทำงานพร้อมกัน (b/149569323) - ตอนนี้ระบบจะเรียกใช้
enterTransitionและexitTranstionของทุกๆ Fragment ที่เข้าและออก แทนที่จะเรียกใช้เฉพาะ Fragment สุดท้ายที่เข้าและ Fragment แรกที่ออก (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ใช้ APIOnContextAvailableListenerที่เปิดตัวใน 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 ใน Navigation และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment อยู่ในสถานะSTARTEDอย่างน้อย (b/149787344)
การเปลี่ยนแปลง API
- เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้ว หากต้องการส่งข้อมูลระหว่าง Fragment คุณควรใช้ Fragment Result API ใหม่แทน (b/149787344)
- เราได้เลิกใช้งาน API
startActivityForResult()/onActivityResult()และrequestPermissions()/onRequestPermissionsResult()ใน Fragment แล้ว โปรดใช้ Activity Result APIs (aosp/1290887) - การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องจากกิจกรรม
1.2.0-alpha04: เราได้เปลี่ยนชื่อเมธอดprepareCall()เป็นregisterForActivityResult()(aosp/1278717)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะหยุด
getViewLifecycleOwner()ของ Fragment ก่อนที่จะเรียกใช้onSaveInstanceState()ซึ่งเป็นการจำลองลักษณะการทำงานของวงจรของ Fragment (b/154645875) - ตอนนี้การเรียกใช้
setMenuVisibility(false)ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุไว้อย่างถูกต้องแล้ว (b/153593580) - แก้ไข
illegalStateExceptionเมื่อเพิ่ม Fragment ลงในลำดับชั้นการแสดงผลของDialogFragmentด้วยFragmentContainerView(b/154366601) getDefaultViewModelProviderFactory()ใน Fragment จะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์ Fragment นอกกิจกรรม (b/153762914)
เวอร์ชัน 1.3.0-alpha03
1 เมษายน 2020
androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 และ androidx.fragment:fragment-testing:1.3.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
prepareCallในFragmentเป็นfinalแล้ว (b/152439361)
การแก้ไขข้อบกพร่อง
- แก้ไขการเกิดปัญหาซ้ำที่เกิดขึ้นใน Fragment
1.3.0-alpha02เมื่อใช้BottomSheetDialogFragment(b/151652127, aosp/1263328, aosp/1265163) - แก้ไขข้อขัดข้องเมื่อใช้
prepareCallจาก Fragment หลังจากเปลี่ยนการกำหนดค่า (b/152137004) - แก้ไขปัญหาที่ระบบไม่สนใจการเปลี่ยนองค์ประกอบที่แชร์และการเปลี่ยนฉากออกเมื่อใช้
setTargetFragment()(b/152023196) - จาก Fragment
1.2.4: อัปเดตกฎ ProGuard ของ Fragment เพื่ออนุญาตการปกปิดโค้ดของ Fragment ที่เก็บไว้ (b/151605338) - จาก Fragment
1.2.4: ปิดใช้FragmentLiveDataObserveกฎ Lint ในคลาสDialogFragmentเนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ ทำให้ใช้thisหรือviewLifecycleOwnerได้อย่างปลอดภัยเมื่อเรียกใช้observe(b/151765086)
การเปลี่ยนแปลงทรัพยากร Dependency
- 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: แก้ไขผลบวกที่ผิดพลาดในการตรวจสอบ Lint ของUseRequireInsteadOfGetเมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ 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)
- แก้ไขผลการตรวจหาที่ผิดพลาดใน
UseRequireInsteadOfGetเครื่องมือวิเคราะห์ซอร์สโค้ดเมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163) FragmentContainerViewจะไม่แสดงUnsupportedOperationExceptionสำหรับการใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์อีกต่อไป (b/149707833)
เวอร์ชัน 1.2.2
เวอร์ชัน 1.2.2
19 กุมภาพันธ์ 2020
androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 และ androidx.fragment:fragment-testing:1.2.2 เปิดตัวแล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้
การตรวจสอบ Lint ใหม่
- เครื่องมือวิเคราะห์ซอร์สโค้ดแนะนำให้ใช้
viewLifecycleOwnerเป็นLifecycleOwnerในการเรียกใช้OnBackPressedDispatcherในonCreateView(),onViewCreated()และonActivityCreated()(b/142117657) - เพิ่มการตรวจสอบ Lint ใหม่ที่ยืนยันว่าคุณใช้
debugImplementationที่ถูกต้องเมื่อใช้ชิ้นงานfragment-testing(b/141500106) - ตอนนี้ Fragment จะแนะนำให้ใช้เมธอด
require___()ที่เชื่อมโยงเพื่อรับข้อความแสดงข้อผิดพลาดที่อธิบายได้ดีกว่าแทนcheckNotNull(get___()),requireNonNull(get___())หรือget___()!!สำหรับ Fragment API ทั้งหมดที่มีทั้งgetและrequireที่เทียบเท่า (aosp/1202883)
การแก้ไขข้อบกพร่อง
- แก้ไขไฟล์ ProGuard ของ Fragment เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
- ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนําให้ใช้
viewLifecycleOwnerเมื่อใช้observeเพื่อจัดการเวอร์ชันเมธอดส่วนขยายlivedata-ktxของobserveด้วย (b/148996309) - แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint หลายรายการ (aosp/1157012)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Zac Sweers ที่มีส่วนร่วมในการตรวจสอบ Lint ของ
require___()ในนามของ Slack (aosp/1202883)
เวอร์ชัน 1.2.1
เวอร์ชัน 1.2.1
5 กุมภาพันธ์ 2020
androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 และ androidx.fragment:fragment-testing:1.2.1 เปิดตัวแล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ ProGuard จะเก็บตัวสร้างเริ่มต้นของ Fragment ที่เพิ่มผ่านเมธอด
addและreplaceซึ่งใช้อินสแตนซ์Class(หรือเวอร์ชัน Kotlin ที่ได้รับการทำให้เป็นจริง) ไว้ (b/148181315) FragmentStatePagerAdapterและFragmentPagerAdapterจะไม่ดักจับข้อยกเว้นที่FragmentManagerสร้างขึ้นเมื่อเรียกใช้finishUpdate()อีกต่อไป (aosp/1208711)- แก้ไขปัญหาที่
FragmentManager.findFragment()ไม่ทำงานกับส่วนที่เพิ่มผ่านแท็ก<fragment>(b/147784323) - ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก
<fragment>จะได้รับการเรียกใช้onInflate()ก่อนonCreate()เสมอเมื่ออยู่ในเลย์เอาต์ (aosp/1215856) - การเรียก
toString()ในอินสแตนซ์FragmentManagerจะไม่ทำให้เกิดNullPointerExceptionอีกต่อไปเมื่อ Activity ถูกทำลายไปแล้ว (b/148189412)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ 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ด้วย - การผสานรวม Lifecycle ViewModel SavedState: ตอนนี้
SavedStateViewModelFactoryเป็น Factory เริ่มต้นที่ใช้เมื่อใช้by viewModels(),by activityViewModels(), เครื่องมือสร้างViewModelProviderหรือViewModelProviders.of()กับ Fragment - การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้
getViewLifecycleOwner()เมื่อสังเกตLiveDataจากonCreateView(),onViewCreated()หรือonActivityCreated() getFragmentManager()การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดgetFragmentManager()และrequireFragmentManager()ใน Fragment แล้ว และแทนที่ด้วยเมธอดgetParentFragmentManager()เดียว ซึ่งจะส่งคืนFragmentManagerที่ไม่ใช่ค่าว่างซึ่ง 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 เหล่านี้ไปยัง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)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ 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ที่ไม่ใช่ Null ที่เพิ่ม Fragment (คุณสามารถใช้isAdded()เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่) (b/140574496) - เลิกใช้เมธอด
FragmentManager.enableDebugLoggingแบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้Log.isLoggable()สำหรับแท็กFragmentManagerซึ่งช่วยให้คุณเปิดใช้การบันทึกDEBUGหรือVERBOSEได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง (aosp/1116591)
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะทำลาย Fragment อย่างถูกต้องในขณะที่ภาพเคลื่อนไหวขาออกใน Fragment อื่นๆ กำลังทำงานอยู่ (b/140574199)
- แก้ไขปัญหาที่ Fragment จะเรียกใช้
Activity.findViewById()ในกรณีที่ก่อนหน้านี้ไม่ได้เรียกใช้ (aosp/1116431)
เวอร์ชัน 1.2.0-alpha03
5 กันยายน 2019
androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 และ androidx.fragment:fragment-testing:1.2.0-alpha03 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
FragmentContainerViewเปลี่ยนชื่อเป็นfinalแล้ว (b/140133091)
แก้ไขข้อบกพร่อง
- ตอนนี้
FragmentContainerViewจะกลับลำดับการวาดอย่างถูกต้องเมื่อนำ Fragment ออกจาก Back Stack (b/139104187) - แก้ไขปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งป๊อป Fragment และเพิ่ม Fragment ใหม่พร้อมกัน (b/111659726)
- ตอนนี้ Fragment จะรอให้การเปลี่ยนผ่าน (นอกเหนือจากภาพเคลื่อนไหว ซึ่งได้รับการแก้ไขใน Fragment
1.2.0-alpha02) เสร็จสิ้นก่อนที่จะส่งonDestroyView()(b/138741697)
เวอร์ชัน 1.2.0-alpha02
7 สิงหาคม 2019
androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 และ androidx.fragment:fragment-testing:11.2.0-alpha02 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้
SavedStateViewModelFactoryเป็นค่าเริ่มต้นที่ใช้เมื่อใช้by viewModels(),by activityViewModels(), เครื่องมือสร้างViewModelProviderหรือViewModelProviders.of()ที่มีFragment(b/135716331) - ระบบได้อัปเดตภาพเคลื่อนไหวเริ่มต้นเมื่อใช้
TRANSIT_FRAGMENT_OPEN,TRANSIT_FRAGMENT_CLOSE,TRANSIT_FRAGMENT_FADEกับsetTransitionในFragmentTransactionให้ตรงกับภาพเคลื่อนไหวที่กิจกรรมใช้ในอุปกรณ์ Android 10 (aosp/1012812, aosp/1014730)
การเปลี่ยนแปลง API
- เปิดตัว
FragmentContainerViewเป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก ซึ่งจะแทนที่การใช้งานFrameLayoutฯลฯ เนื่องจากจะแก้ไขปัญหาการจัดลำดับ Z ของภาพเคลื่อนไหวและการส่งการแทรกหน้าต่างไปยัง Fragment (b/37036000, aosp/985243, b/136494650) - เพิ่มเมธอด
FragmentManager.findFragment(View)แบบคงที่เพื่อดึงข้อมูล Fragment ที่มีจากมุมมองที่ Fragment ขยาย นอกจากนี้ ยังมีส่วนขยาย Kotlin ในfragment-ktxด้วย (aosp/1090757) - เพิ่มการโอเวอร์โหลดใหม่ของ
add()และreplace()ในFragmentTransactionที่ใช้Class<? extends Fragment>และอาร์กิวเมนต์Bundleที่ไม่บังคับ วิธีการเหล่านี้ใช้FragmentFactoryเพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)) ลงในfragment-ktxด้วย (b/126124987) - เพิ่มคำอธิบายประกอบ
@MainThreadลงในFragmentการเรียกกลับของวงจร (b/127272564) - API ที่เกี่ยวข้องกับชื่อเบรดคัมบ์ใน
FragmentTransactionและFragmentManager.BackStackEntryเลิกใช้งานแล้ว (b/138252944) - เลิกใช้เมธอด
setTransitionStyleในFragmentTransactionแล้ว (aosp/1011537) - เมธอดหลายรายการใน
FragmentManagerไม่abstractอีกต่อไปFragmentManagerยังคงเป็นabstractและไม่ควรสร้างอินสแตนซ์หรือขยายโดยตรง คุณควรรับอินสแตนซ์ที่มีอยู่จากgetSupportFragmentManager(),getChildFragmentManager()ฯลฯ ต่อไป
แก้ไขข้อบกพร่อง
- จาก Fragment
1.1.0-rc04: ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858) - จาก Fragment
1.1.0-rc03: แก้ปัญหาที่การเรียกใช้postponeEnterTransition()ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118) - จาก Fragment
1.1.0-rc02: แก้ไขข้อขัดข้องในFragmentPagerAdapterและFragmentStatePagerAdapterเมื่อนำรายการปัจจุบันออก (b/137209870) - ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง
onDestroyView()(b/136110528) - ตอนนี้ระบบจะจัดการภาพเคลื่อนไหวของ Fragment จาก Fragment ย่อยและ Fragment ที่สืบทอดมาอย่างถูกต้องเมื่อสร้างภาพเคลื่อนไหวของ Fragment หลัก (b/116675313)
- แก้ไข
NullPointerExceptionเมื่อใช้การเปลี่ยนองค์ประกอบที่แชร์และรวมการดำเนินการป๊อปและการเพิ่ม (b/120507394) - เพิ่มวิธีแก้ปัญหาชั่วคราวสำหรับ
IllegalStateExceptionเมื่อใช้FragmentPagerAdapterและFragmentStatePagerAdapterในการทดสอบ Robolectric (b/137201343)
เวอร์ชัน 1.2.0-alpha01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 และ androidx.fragment:fragment-testing:1.2.0-alpha01 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้ FragmentManager จะเรียกใช้
requestApplyInsets()หลังจากแนบมุมมองของ Fragment และก่อนเรียกใช้onViewCreated()โดยตรง เพื่อให้มั่นใจว่ามุมมองจะมีระยะขอบที่ถูกต้องเสมอ (b/135945162)
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerExceptionเมื่อเปิดFragmentTransactionที่ใช้setPrimaryNavigationFragment()ก่อนreplace()(b/134673465)
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0
5 กันยายน 2019
androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 และ androidx.fragment:fragment-testing:1.1.0 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0
- fragment-testing: อาร์ติแฟกต์
fragment-testingมีคลาสFragmentScenarioสำหรับทดสอบ Fragment แยกกัน ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการทดสอบ Fragment ของแอป - FragmentFactory: ตอนนี้คุณสามารถตั้งค่า
FragmentFactoryในFragmentManagerเพื่อจัดการการสร้างอินสแตนซ์ของ Fragment ได้แล้ว ซึ่งจะช่วยลดข้อกำหนดที่เข้มงวดในการมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ - ตัวแทนพร็อพเพอร์ตี้ Kotlin สำหรับ ViewModel: อาร์ติแฟกต์
fragment-ktxมีตัวแทนพร็อพเพอร์ตี้ Kotlin 2 รายการ ได้แก่by viewModels()สำหรับเข้าถึง ViewModel ที่เชื่อมโยงกับ Fragment แต่ละรายการ และby activityViewModels()สำหรับเข้าถึง ViewModel ที่กำหนดขอบเขตไว้ในกิจกรรม - วงจรสูงสุด: ตอนนี้คุณตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยเรียกใช้
setMaxLifecycle()ในFragmentTransactionซึ่งมาแทนที่setUserVisibleHint()ที่เลิกใช้งานไปแล้วFragmentPagerAdapterและFragmentStatePagerAdapterมีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ - ตัวสร้าง FragmentActivity LayoutId: ตอนนี้คลาสย่อยของ
FragmentActivityสามารถเรียกตัวสร้างในFragmentActivityที่ใช้รหัสR.layoutได้โดยไม่บังคับ ซึ่งระบุเลย์เอาต์ที่ควรตั้งค่าเป็นมุมมองเนื้อหาแทนการเรียกsetContentView()ในonCreate()การดำเนินการนี้จะไม่เปลี่ยนแปลงข้อกำหนดที่ว่าคลาสย่อยต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ - ตัวสร้าง Fragment LayoutId: ตอนนี้คลาสย่อยของ
Fragmentสามารถเรียกตัวสร้างในFragmentที่ใช้รหัสR.layoutได้โดยไม่บังคับ ซึ่งจะระบุเลย์เอาต์ที่ควรใช้สำหรับ Fragment นี้แทนการลบล้างonCreateView()คุณกำหนดค่าเลย์เอาต์ที่ขยายได้ในonViewCreated() - เลื่อนเวลาด้วยการหมดเวลา: มีการเพิ่มการโอเวอร์โหลดใหม่ของ
postponeEnterTransition()ซึ่งใช้การหมดเวลา
เวอร์ชัน 1.1.0-rc04
7 สิงหาคม 2019
androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 และ androidx.fragment:fragment-testing:1.1.0-rc04 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858)
เวอร์ชัน 1.1.0-rc03
19 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 และ androidx.fragment:fragment-testing:1.1.0-rc03 ออกแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเรียกใช้
postponeEnterTransition()ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)
เวอร์ชัน 1.1.0-rc02
17 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc02 androidx.fragment:fragment-ktx:1.1.0-rc02 และ androidx.fragment-testing:fragment:1.1.0-rc02 ออกแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องใน
FragmentPagerAdapterและFragmentStatePagerAdapterเมื่อนำรายการปัจจุบันออก (b/137209870)
เวอร์ชัน 1.1.0-rc01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc01 androidx.fragment:fragment-ktx:1.1.0-rc01 และ androidx.fragment:fragment-testing:1.1.0-rc01 ออกแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ฟรอนต์เอนด์จะอัปเดตระดับการมองเห็นอย่างถูกต้องเมื่อใช้การดำเนินการ
show()หรือhide()ขณะที่การเปลี่ยนผ่านกำลังทำงานอยู่ (b/133385058) - แก้ไข
NullPointerExceptionเมื่อเปิดFragmentTransactionที่ใช้setPrimaryNavigationFragment()ก่อนreplace()(b/134673465)
เวอร์ชัน 1.1.0-beta01
5 มิถุนายน 2019
androidx.fragment:fragment:1.1.0-beta01 androidx.fragment:fragment-ktx:1.1.0-beta01 และ androidx.fragment:fragment-testing:1.1.0-beta01 ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะฝัง
androidx.lifecycle.Lifecycleการเรียกกลับ (ที่เกี่ยวข้องกับSTARTED,RESUMED,PAUSED,STOPPEDและDESTROYEDโดยเฉพาะ) สำหรับ Fragment ที่ซ้อนกันอย่างถูกต้องแล้ว (b/133497591) - ตอนนี้อินสแตนซ์
OnBackPressedCallbackที่ลงทะเบียนในonCreate()ของ Fragment จะมีความสำคัญสูงกว่า FragmentManager ของ 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()เมื่อส่วนย่อยปรากฏเท่านั้น (เช่น เมื่อมีการป๊อป Back Stack)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้แท็ก
<fragment>ใน XML และตัวสร้างcontentLayoutIdของFragmentActivityหรือAppCompatActivity(b/129907905) - แก้ไขปัญหาที่ระบบจะไม่ย้าย Fragment ใน Back Stack ไปยัง
CREATEDอย่างน้อยหลังจากเปลี่ยนการกำหนดค่า ซึ่งทำให้ ViewModel และ Fragment ที่เก็บไว้ของ Child ไม่ได้รับการกำจัดอย่างถูกต้อง (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) แล้ว- แก้ไขปัญหาที่อาจมีการเรียกใช้
onDismiss()ของDialogFragment2 ครั้งเมื่อใช้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คำอธิบายประกอบคลาสonCreateView()ที่ช่วยให้คุณระบุได้ว่าควรขยายไฟล์ 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
- ขยายคำอธิบายประกอบความสามารถในการเว้นว่างอย่างมีนัยสำคัญใน 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ที่ถูกต้อง