ส่วนย่อย
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
13 สิงหาคม 2025 | 1.8.9 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Fragment คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
ดึงดูด
dependencies { def fragment_version = "1.8.9" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.9" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 1.8
เวอร์ชัน 1.8.9
13 สิงหาคม 2025
androidx.fragment:fragment-*:1.8.9
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.9 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ซึ่งจะแสดงการซ่อนจะทำให้ท่าทางสัมผัสถัดไปเคลื่อนไหวไม่ถูกต้องเมื่อใช้ Animator (I0a400, b/384765586)
- แก้ไขข้อผิดพลาดที่การรวมกันของ
setMaxLifecycle
และpopBackStack
อาจย้าย Fragment ด้านบนไปยังสถานะ RESUMED ไม่สำเร็จ (I3448b, b/406127576)
เวอร์ชัน 1.8.8
4 มิถุนายน 2025
androidx.fragment:fragment-*:1.8.8
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.8 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
FragmentManager
จะขัดข้องขณะพยายามบันทึกสถานะของ Fragment ที่เพิ่มด้วยsetMaxLifecycle(Lifecycle.State.INITIALIZED)
เนื่องจากไม่ได้ผ่านonCreate()
มาก่อน จึงไม่มีการบันทึกสถานะหรือเรียกใช้onSaveInstanceState()
อีกต่อไป (I6e37a)
เวอร์ชัน 1.8.7
20 พฤษภาคม 2025
androidx.fragment:fragment-*:1.8.7
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.7 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
FragmentManager
ไม่อยู่ในสถานะที่เหมาะสมหลังจากดำเนินการป๊อปและแทนที่ในเฟรมเดียวกัน ซึ่งอาจทำให้เกิดข้อขัดข้องเมื่อใช้ร่วมกับการป๊อป Backstack ผ่านpopBackStack
หรือท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ (I50ad1) - แก้ไขข้อขัดข้องที่เกิดจากการใช้ AndroidX Transitions และเข้าสู่กรณีที่ธุรกรรมของ Fragment ที่ต่อเนื่องอย่างรวดเร็วพยายามยกเลิกการเปลี่ยนภาพที่ยังไม่เริ่มต้น และไลบรารี AndroidX Transition ไม่ได้ล้างสถานะการเปลี่ยนภาพอย่างถูกต้อง (ดู b/414612221) (Ib5235)
เวอร์ชัน 1.8.6
12 กุมภาพันธ์ 2025
androidx.fragment:fragment-*:1.8.6
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.6 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การลบล้าง
setOnApplyWindowInsetsListener
ของFragmentContainerView
จะใช้ Listener ที่เป็น Null ซึ่งตรงกับที่เฟรมเวิร์กอนุญาต (I575f0, b/282790626)
เวอร์ชัน 1.8.5
30 ตุลาคม 2024
androidx.fragment:fragment-*:1.8.5
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.5 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
IllegalStateException
จะทริกเกอร์โดยsaveBackStack
หลังจากที่ยกเลิกหรือขัดจังหวะท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้แล้วเท่านั้น (I3387d, b/342419080)
เวอร์ชัน 1.8.4
2 ตุลาคม 2024
androidx.fragment:fragment-*:1.8.4
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.4 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การกดปุ่มย้อนกลับของระบบอย่างรวดเร็วหรือการใช้ท่าทางสัมผัสย้อนกลับอย่างรวดเร็วจะทำให้ Fragment ขัดข้องเมื่อใช้ Androidx Transitions (Ibc038, b/364804225)
- แก้ไขปัญหาใน Fragment ที่การขัดจังหวะท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะส่ง FragmentManager ไปยังสถานะที่ไม่ได้กำหนด และอาจแสดง Fragment ที่ไม่ถูกต้อง (If82e2, b/338624457)
- แก้ไข
UninitializedPropertyAccessException
ในAndroidFragment
เมื่อสลับคลาสที่อินสแตนซ์AndroidFragment
ของคุณใช้อย่างไดนามิก (I12dea)
เวอร์ชัน 1.8.3
4 กันยายน 2024
androidx.fragment:fragment-*:1.8.3
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.3 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
FragmentManager
ตอนนี้จะพิจารณาการดำเนินการที่รอดำเนินการอย่างถูกต้องเมื่อจัดการท่าทางสัมผัสสำหรับการย้อนกลับที่คาดการณ์ได้ ซึ่งจะช่วยให้การย้อนกลับระบบไม่ทำให้เกิดIndexOutOfBoundsException
อีกต่อไป (I9ba32, b/342316801)AndroidFragment
จะไม่ขัดข้องอีกต่อไปหากมีการเพิ่มลงในการเรียบเรียงในขณะที่ระบบบันทึกสถานะของกิจกรรม/Fragment ที่มีอยู่แล้ว (I985e9, b/356643968)
เวอร์ชัน 1.8.2
24 กรกฎาคม 2024
androidx.fragment:fragment-*:1.8.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.2 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
AndroidFragment
ตอนนี้จัดการกรณีที่วาง Fragment หลักไว้ใน Fragment Back Stack ได้อย่างถูกต้องแล้ว ซึ่งจะช่วยหลีกเลี่ยงปัญหา "ไม่พบ View สำหรับรหัส" เมื่อย้อนกลับไปที่ Fragment นั้น (I94608)- ตอนนี้ Fragment ที่เพิ่มผ่านเมธอด
FragmentTransaction.add
ซึ่งใช้ViewGroup
จะรอonContainerAvailable
ก่อนที่จะไปยังonStart()
ซึ่งจะส่งผลต่อผู้ใช้ API นั้น เช่นAndroidFragment
ซึ่งตอนนี้จะรอให้AndroidFragment
กลับมาที่การเขียนก่อนที่จะย้ายผ่านonStart()
(I94608)
เวอร์ชัน 1.8.1
26 มิถุนายน 2024
androidx.fragment:fragment-*:1.8.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Fragment ที่ไม่มีคอนเทนเนอร์จะ
DESTROYED
ทันทีเมื่อเริ่มท่าทางสัมผัสย้อนกลับแบบคาดการณ์ ตอนนี้ระบบจะเก็บไว้ในสถานะCREATED
จนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ (If6b83, b/345244539)
เวอร์ชัน 1.8.0
12 มิถุนายน 2024
androidx.fragment:fragment-*:1.8.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.7.0
- ตอนนี้อาร์ติแฟกต์
fragment-compose
มีAndroidFragment
Composable
ที่อนุญาตให้เพิ่ม Fragment ลงในลำดับชั้นของ Compose ผ่านชื่อคลาส Fragment แล้ว ซึ่งจะจัดการการบันทึกและกู้คืนสถานะของ Fragment โดยอัตโนมัติ ควรใช้วิธีนี้แทนที่วิธีที่แนะนำก่อนหน้านี้โดยตรง ซึ่งก็คือการใช้AndroidViewBinding
เพื่อขยาย Fragment - ตอนนี้
onBackStackChangeCancelled
การเรียกกลับในอินเทอร์เฟซของFragmentManager
OnBackStackChangedListener
จะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการในFragmentManager
ซึ่งทำให้สอดคล้องกับเวลาของการเรียกกลับonBackStackChangeCommitted
มากขึ้น
เวอร์ชัน 1.8.0-rc01
29 พฤษภาคม 2024
androidx.fragment:fragment-*:1.8.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
onBackStackChangeCancelled
การเรียกกลับในอินเทอร์เฟซFragmentManagers OnBackStackChangedListener
จะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการในFragmentManager
ซึ่งทำให้สอดคล้องกับเวลาของการเรียกกลับonBackStackChangeCommitted
มากขึ้น (I5ebfb, b/332916112)
เวอร์ชัน 1.8.0-beta01
14 พฤษภาคม 2024
androidx.fragment:fragment-*:1.8.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.7.1
: ตอนนี้การย้อนกลับแบบคาดการณ์จะทำงานเฉพาะกับธุรกรรมที่ Fragment ทั้งหมดมี Animator หรือ Androidx Transition ที่ค้นหาได้ การแก้ไขนี้จะช่วยแก้ปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนจะทำให้เกิดหน้าจอสีดำ (I43037, b/339169168)
เวอร์ชัน 1.8.0-alpha02
17 เมษายน 2024
androidx.fragment:fragment-*:1.8.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.7.0-rc02
: เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่าsharedElement
โดยไม่มีการเปลี่ยนฉากอื่นๆ จะไม่ทำงาน (Iec48e) - จาก Fragment
1.7.0-rc02
: แก้ไขข้อบกพร่องที่ทำให้เกิดข้อขัดข้องในกรณีที่เพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถค้นหาได้ลงในธุรกรรมที่การเปลี่ยนฉากอื่นๆ ทั้งหมดสามารถค้นหาได้ ตอนนี้ระบบจะพิจารณาธุรกรรมดังกล่าวว่าไม่สามารถค้นหาได้ตามที่ควรจะเป็น (I18ccd)
เวอร์ชัน 1.8.0-alpha01
3 เมษายน 2024
androidx.fragment:fragment-*:1.8.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
AndroidFragment
Composable
ใหม่ช่วยให้เพิ่ม Fragment ลงในลำดับชั้นของ Compose ผ่านชื่อคลาส Fragment ได้ ซึ่งจะจัดการการบันทึกและกู้คืนสถานะของ Fragment โดยอัตโนมัติ ซึ่งใช้แทน AndroidViewBinding ได้โดยตรงComposable
.(b/312895363, Icf841)
การเปลี่ยนแปลงเอกสาร
- อัปเดตเอกสารประกอบสำหรับ
OnBackStackChangedListener
API เพื่อระบุเวลาที่เรียกใช้และวิธีใช้ (I0bfd9)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Profile Installer 1.3.1 แล้ว
เวอร์ชัน 1.7
เวอร์ชัน 1.7.1
14 พฤษภาคม 2024
androidx.fragment:fragment-*:1.7.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.1 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การคาดการณ์ย้อนกลับจะทำงานเฉพาะกับธุรกรรมที่ Fragment ทั้งหมดมี Animator หรือ Androidx Transition ที่ค้นหาได้ การแก้ไขนี้จะช่วยแก้ปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนจะทำให้หน้าจอว่างเปล่า (I43037, b/339169168)
เวอร์ชัน 1.7.0
1 พฤษภาคม 2024
androidx.fragment:fragment-*:1.7.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0 มีการคอมมิตเหล่านี้
การรองรับท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ได้
- ตอนนี้ Fragment รองรับการย้อนกลับในแอปแบบคาดการณ์เมื่อใช้
Animator
หรือเมื่อใช้ AndroidX Transition 1.5.0 ซึ่งจะช่วยให้ผู้ใช้ใช้ท่าทางสัมผัสย้อนกลับเพื่อดู Fragment ก่อนหน้าได้โดยการค้นหา Animator/Transition ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านการทำท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบการเปลี่ยนผ่าน | ทรัพยากร XML | รองรับการย้อนกลับที่คาดการณ์ได้ |
---|---|---|
Animation |
R.anim |
ไม่ได้ |
Animator |
R.animator |
ได้ |
Framework Transition |
R.transition |
ไม่ได้ |
AndroidX Transition ที่มี Transition 1.4.1 หรือต่ำกว่า |
R.transition |
ไม่ได้ |
AndroidX Transition พร้อมการเปลี่ยนฉาก 1.5.0 |
R.transition |
ได้ |
หากพบปัญหาเกี่ยวกับการรองรับการคาดการณ์การย้อนกลับใน Fragment หลังจากเลือกใช้ท่าทางสัมผัสการคาดการณ์การย้อนกลับแล้ว โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมโปรเจ็กต์ตัวอย่างที่จำลองปัญหาของคุณ คุณปิดใช้การคาดการณ์การย้อนกลับได้โดยใช้ FragmentManager.enabledPredictiveBack(false)
ในonCreate()
ของกิจกรรม
FragmentManager.OnBackStackChangedListener()
ตอนนี้มี onBackStackChangeProgressed()
และ onBackStackChangeCancelled()
สำหรับรับความคืบหน้าของการย้อนกลับที่คาดการณ์ได้และเหตุการณ์ที่ยกเลิกตามลำดับ
Fragment Compose Artifact
เราได้สร้างอาร์ติแฟกต์ใหม่ fragment-compose
ที่มุ่งเน้นการรองรับแอปที่อยู่ระหว่างการย้ายจากสถาปัตยกรรมที่อิงตาม Fragment ไปยังสถาปัตยกรรมที่อิงตาม Compose อย่างเต็มรูปแบบ
ฟีเจอร์แรกที่พร้อมใช้งานในอาร์ติแฟกต์ใหม่นี้คือcontent
เมธอดส่วนขยายใน Fragment
ซึ่งพยายามทำให้การใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการง่ายขึ้นด้วยการสร้าง ComposeView
ให้คุณและตั้งค่า ViewCompositionStrategy
ที่ถูกต้อง
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
เวอร์ชัน 1.7.0-rc02
17 เมษายน 2024
androidx.fragment:fragment-*:1.7.0-rc02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-rc02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า
sharedElement
โดยไม่มีการเปลี่ยนฉากอื่นๆ จะไม่ทำงาน (Iec48e) - แก้ไขข้อบกพร่องที่ทำให้เกิดข้อขัดข้องหากมีการเพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถค้นหาได้ลงในธุรกรรมที่การเปลี่ยนฉากอื่นๆ ทั้งหมดสามารถค้นหาได้ ตอนนี้ระบบจะพิจารณาธุรกรรมดังกล่าวว่าไม่สามารถค้นหาได้ตามที่ควรจะเป็น (I18ccd)
เวอร์ชัน 1.7.0-rc01
3 เมษายน 2024
androidx.fragment:fragment-*:1.7.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Profile Installer 1.3.1 แล้ว
เวอร์ชัน 1.7.0-beta01
20 มีนาคม 2024
androidx.fragment:fragment-*:1.7.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
FragmentHostCallback
เขียนด้วย Kotlin เพื่อให้ค่า Null ของประเภททั่วไปของโฮสต์ตรงกับค่า Null ของประเภทการคืนค่าของonGetHost()
(I40af5)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่เมื่อใช้ท่าทางสัมผัสย้อนกลับแบบคาดการณ์ใน Fragment ที่ไม่ได้อยู่ในคอนเทนเนอร์ ระบบจะไม่ทำลาย Fragment นั้น ตอนนี้ระบบจะย้าย Fragment ไปยังสถานะสุดท้ายทันที (Ida0d9)
- แก้ไขปัญหาใน Fragment ที่การขัดจังหวะการเปลี่ยนฉากขาเข้าด้วยท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะทำลายมุมมองที่เข้า และทำให้หน้าจอว่างเปล่า (Id3f22, b/319531491)
เวอร์ชัน 1.7.0-alpha10
7 กุมภาพันธ์ 2024
androidx.fragment:fragment-*:1.7.0-alpha10
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha10 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทราบใน Fragment เวอร์ชันก่อนหน้าซึ่งเมื่อใช้การรองรับการย้อนกลับแบบคาดการณ์ของ Fragment สำหรับ
Animator
หรือ AndroidX Transition แล้ว Fragment จะส่งNullPointerException
จากhandleOnBackProgressed
หากไม่เคยมีการเพิ่มFragmentManager.OnBackStackChangedListener
ผ่านaddOnBackStackChangedListener
(I7c835)
เวอร์ชัน 1.7.0-alpha09
24 มกราคม 2024
androidx.fragment:fragment-*:1.7.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha09 มีคอมมิตต่อไปนี้
Fragment Compose Artifact
เราได้สร้างอาร์ติแฟกต์ใหม่ fragment-compose
ที่มุ่งเน้นการรองรับแอปที่อยู่ระหว่างการย้ายจากสถาปัตยกรรมที่อิงตาม Fragment ไปยังสถาปัตยกรรมที่อิงตาม Compose อย่างเต็มรูปแบบ
ฟีเจอร์แรกที่พร้อมใช้งานในอาร์ติแฟกต์ใหม่นี้คือcontent
เมธอดส่วนขยายใน Fragment
ซึ่งพยายามทำให้การใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการง่ายขึ้นด้วยการสร้าง ComposeView
ให้คุณและตั้งค่า ViewCompositionStrategy
ที่ถูกต้อง (561cb7, b/258046948)
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
ฟีเจอร์ใหม่
FragmentManager.OnBackStackChangedListener()
ตอนนี้มีonBackStackChangeProgressed()
และonBackStackChangeCancelled()
สำหรับรับความคืบหน้าของการย้อนกลับที่คาดการณ์ได้และเหตุการณ์ที่ยกเลิกตามลำดับ (214b87)
ปัญหาที่ทราบ
- เมื่อใช้การรองรับการย้อนกลับแบบคาดการณ์ของ Fragment สำหรับ
Animator
หรือ AndroidX Transition, Fragment จะส่งNullPointerException
จากhandleOnBackProgressed
หากไม่เคยเพิ่มFragmentManager.OnBackStackChangedListener
ผ่านaddOnBackStackChangedListener
การเพิ่ม Listener ด้วยตนเองจะช่วยแก้ปัญหาข้อขัดข้องได้ การแก้ไขปัญหานี้จะพร้อมใช้งานในรุ่นถัดไปของ Fragment
เวอร์ชัน 1.7.0-alpha08
10 มกราคม 2024
androidx.fragment:fragment-*:1.7.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha08 มีคอมมิตเหล่านี้
ล้างข้อมูล
- นำวิธีแก้ปัญหาชั่วคราวสำหรับไลบรารีการเปลี่ยนฉากที่ได้รับการแก้ไขแล้วใน Transition
1.5.0-alpha06
ออก (I04356)
เวอร์ชัน 1.7.0-alpha07
29 พฤศจิกายน 2023
androidx.fragment:fragment-*:1.7.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha07 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
ที่เกิดจากการตั้งค่าการเปลี่ยนองค์ประกอบที่แชร์และตั้งค่า enter/exitTransition ไม่สำเร็จ (I8472b) - จาก Fragment
1.6.2
: เมื่อมีการขยายFragmentContainerView
ของ Fragment คุณจะเข้าถึงสถานะต่างๆ เช่นFragmentManager
, Host และรหัส ได้ในตอนนี้ในโค้ดเรียกกลับonInflate
(I1e44c, b/307427423) - จาก Fragment
1.6.2
: เมื่อใช้clearBackStack
เพื่อนำชุด Fragment ออก ระบบจะล้างViewModel
ของ Fragment ที่ซ้อนกันเมื่อล้างViewModels
ของ Fragment หลัก (I6d83c, b/296173018)
เวอร์ชัน 1.7.0-alpha06
4 ตุลาคม 2023
androidx.fragment:fragment-*:1.7.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha06 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- เราได้อัปเดต Fragment ให้ขึ้นอยู่กับ
animateToStart
API ใหม่ที่เพิ่มเข้ามาใน Transition1.5.0-alpha04
เวอร์ชัน 1.7.0-alpha05
20 กันยายน 2023
androidx.fragment:fragment-*:1.7.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Fragment รองรับการย้อนกลับที่คาดการณ์ได้เมื่อใช้ Androidx Transitions ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อไปยัง Fragment ก่อนหน้าด้วยการเปลี่ยน Androidx ที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันหรือยกเลิกธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์ คุณต้องใช้รุ่นการเปลี่ยนผ่าน
1.5.0-alpha03
เพื่อเปิดใช้ฟีเจอร์นี้ (Ib49b4, b/285175724)
ปัญหาที่ทราบ
- ขณะนี้มีปัญหาที่หลังจากยกเลิกท่าทางสัมผัสย้อนกลับด้วยการเปลี่ยนภาพ 1 ครั้งแล้ว ครั้งถัดไปที่คุณเริ่มท่าทางสัมผัสย้อนกลับ ระบบจะไม่สามารถเรียกใช้การเปลี่ยนภาพได้ ทำให้เกิดหน้าจอว่าง ปัญหานี้อาจเกิดจากปัญหาในไลบรารีการเปลี่ยนฉาก (b/300157785) หากพบปัญหานี้ โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมโปรเจ็กต์ตัวอย่างที่สร้างปัญหาซ้ำ คุณปิดใช้การคาดการณ์การย้อนกลับได้โดยใช้
FragmentManager.enabledPredictiveBack(false)
ในonCreate()
ของกิจกรรม
เวอร์ชัน 1.7.0-alpha04
6 กันยายน 2023
androidx.fragment:fragment-*:1.7.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha04 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ที่ทำให้ Fragment เปลี่ยนไปอยู่ในสถานะ Lifecycle ที่ถูกต้องไม่สำเร็จ (I7cffe, b/297379023)
- แก้ไขการถดถอยที่อนุญาตให้ภาพเคลื่อนไหวทำงานร่วมกับการเปลี่ยน (I59f36)
- แก้ไขปัญหาเมื่อใช้การคาดการณ์การย้อนกลับกับ Fragment ซึ่งการพยายามย้อนกลับ 2 ครั้งอย่างรวดเร็วใน Fragment ที่ 2 จากท้ายสุดใน Back Stack จะทำให้เกิดข้อขัดข้อง (Ifa1a4)
เวอร์ชัน 1.7.0-alpha03
23 สิงหาคม 2023
androidx.fragment:fragment-*:1.7.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha03 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ Fragment เมื่อใช้การย้อนกลับที่คาดการณ์ได้ ซึ่งทำให้ระบบข้าม Fragment แรกในสแต็กย้อนกลับของ Fragment Manager และทำให้ Activity เสร็จสิ้นเมื่อใช้การย้อนกลับของระบบผ่านการไปยังส่วนต่างๆ แบบ 3 ปุ่มหรือท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ (I0664b, b/295231788)
เวอร์ชัน 1.7.0-alpha02
9 สิงหาคม 2023
androidx.fragment:fragment-*:1.7.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เมื่อใช้ Fragment กับท่าทางสัมผัสย้อนกลับแบบคาดการณ์จาก API 34 หากคุณใช้ระบบการเปลี่ยนฉากที่ไม่รองรับการค้นหา (
Animations
,Transitions
) หรือไม่มีการเปลี่ยนฉากเลย ตอนนี้ Fragment จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการย้อนกลับ (I8100c)
เวอร์ชัน 1.7.0-alpha01
7 มิถุนายน 2023
androidx.fragment:fragment-*:1.7.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชันนี้ได้รับการพัฒนาในสาขาภายใน
ฟีเจอร์ใหม่
- ตอนนี้ Fragment รองรับการย้อนกลับในแอปที่คาดการณ์ได้เมื่อใช้
Animator
ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดู Fragment ก่อนหน้าด้วย Animator ที่กำหนดเองได้ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก นอกจากนี้ คุณยังปิดใช้ลักษณะการทำงานใหม่นี้ได้โดยใช้enablePredictiveBack()
เวอร์ชันทดลองและส่งfalse
เวอร์ชัน 1.6
เวอร์ชัน 1.6.2
1 พฤศจิกายน 2023
androidx.fragment:fragment-*:1.6.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เมื่อขยาย
FragmentContainerView
สถานะของFragmentContainerView
เช่นFragmentManager
, Host และรหัส จะเข้าถึงได้ในโค้ดเรียกกลับonInflate
(I1e44c, b/307427423) - เมื่อใช้
clearBackStack
เพื่อนำชุด Fragment ออก ระบบจะล้างViewModel
ของ Fragment ที่ซ้อนกันเมื่อล้างViewModels
ของ Fragment หลัก (I6d83c, b/296173018)
เวอร์ชัน 1.6.1
26 กรกฎาคม 2023
androidx.fragment:fragment-*:1.6.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่แคชสถานะที่บันทึกไว้ซึ่งจัดเก็บเมื่อหยุดกิจกรรมแต่ไม่ได้ทำลายอย่างไม่ถูกต้อง แม้หลังจากย้ายอินสแตนซ์ของ Fragment กลับไปที่สถานะ
RESUMED
แล้วก็ตาม ซึ่งจะทำให้มีการนำสถานะที่แคชไว้กลับมาใช้ซ้ำหากอินสแตนซ์ของ Fragment นั้นอยู่ใน Back Stack เมื่อใช้ API ของ Back Stack หลายรายการเพื่อบันทึกและกู้คืน Fragment นั้น (I71288, b/246289075)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.7.2 แล้ว การแก้ไขนี้จะช่วยแก้ปัญหาที่ผู้ใช้ Kotlin ขยาย
ComponentDialog
ไม่ได้หากไม่มีการอ้างอิงที่ชัดเจนใน Activity (b/287509323)
เวอร์ชัน 1.6.0
7 มิถุนายน 2023
androidx.fragment:fragment-*:1.6.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.5.0
- สถานะที่บันทึกไว้ของ
Fragment
ได้รับการแยกออกเป็นสถานะของคลังส่วนตัว (คลาสParcelable
ที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ในBundle
เสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ FragmentManager.OnBackStackChangedListener
อินเทอร์เฟซได้รับการขยายด้วยการเรียกกลับเพิ่มเติม 2 รายการของonBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งจะเรียกใช้กับแต่ละFragment
ก่อนที่จะเพิ่ม/นำออกจากสแต็กย้อนกลับของ Fragment และหลังจากที่คอมมิตธุรกรรมตามลำดับFragmentStrictMode
เพิ่มWrongNestedHierarchyViolation
ใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้น View ของ Fragment หลัก แต่ไม่ได้เพิ่มลงในchildFragmentManager
ของ Fragment หลัก- ตอนนี้เราได้ใส่คำอธิบายประกอบ API
Fragment
และFragmentManager
ที่รับIntent
หรือIntentSender
อย่างถูกต้องด้วย@NonNull
เพื่อป้องกันการส่งค่าว่าง เนื่องจากค่าว่างจะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้ขัดข้องทันทีเสมอ DialogFragment
ตอนนี้ให้สิทธิ์เข้าถึงComponentDialog
พื้นฐานผ่านrequireComponentDialog()
API แล้ว- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.6.1
แล้ว - ตอนนี้ Fragment จะขึ้นอยู่กับ SavedState
1.2.1
- ตอนนี้ Fragment ขึ้นอยู่กับ ProfileInstaller
1.3.0
แล้ว อาร์ติแฟกต์
fragment-testing-manifest
จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง
fragment-testing
กับandroidx.test
เวอร์ชัน 1.6.0-rc01
10 พฤษภาคม 2023
androidx.fragment:fragment-*:1.6.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ระบบส่ง
ActivityResult
พร้อมรหัสคำขอที่ไม่ถูกต้องเมื่อมีการส่งคำขอstartActivityForResult
หลายรายการติดต่อกัน (If0b9d, b/249519359) - แก้ไขปัญหาที่
onBackStackChangeListener
การเรียกกลับถูกส่งสำหรับการทำธุรกรรมที่ไม่ได้เปลี่ยน Back Stack จริงๆ หากมีการผสมกับการทำธุรกรรมที่เปลี่ยน (I0eb5c, b/279306628)
เวอร์ชัน 1.6.0-beta01
19 เมษายน 2023
androidx.fragment:fragment-*:1.6.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การใช้
postponeEnterTransition
ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปรั่วไหลอีกต่อไป (I2ec7d, b/276375110) - ตอนนี้ Callback ใหม่
onBackStackChangeStarted
และonBackStackChangeCommitted
จะส่ง Fragment เพียงครั้งเดียวเท่านั้น แม้ว่าธุรกรรมหลายรายการจะมี Fragment เดียวกันก็ตาม (Ic6b69)
เวอร์ชัน 1.6.0-alpha09
5 เมษายน 2023
androidx.fragment:fragment-*:1.6.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha09 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
DialogFragment
ตอนนี้ให้สิทธิ์เข้าถึงComponentDialog
พื้นฐานผ่านrequireComponentDialog()
API แล้ว (I022e3, b/234274777)- API
commitNow()
,executePendingTransactions()
และpopBackStackImmediate()
ได้รับการอธิบายประกอบด้วย@MainThread
ซึ่งหมายความว่าตอนนี้ API ทั้งหมดจะแสดงข้อผิดพลาดในการสร้างเมื่อไม่ได้เรียกจากเทรดหลัก แทนที่จะรอให้เกิดข้อผิดพลาดในรันไทม์ (Ic9665, b/236538905)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องใน
FragmentManager
ที่การบันทึกและกู้คืนในเฟรมเดียวกันอาจทำให้เกิดข้อขัดข้อง (Ib36af, b/246519668) - ตอนนี้
OnBackStackChangedListener
onBackStackChangeStarted
และonBackStackChangeCommitted
จะเรียกใช้เมื่อมีการเปลี่ยนแปลงสแต็กย้อนกลับของFragmentManager
เท่านั้น (I66055, b/274788957)
เวอร์ชัน 1.6.0-alpha08
22 มีนาคม 2023
androidx.fragment:fragment-*:1.6.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงพฤติกรรม
- เราได้ปรับเวลาของ
OnBackStackChangedListener.onBackStackChangeCommited
การเรียกกลับให้ดำเนินการก่อนการดำเนินการของ Fragment ซึ่งช่วยให้มั่นใจได้ว่าจะไม่มีการส่ง Fragment ที่ยกเลิกการเชื่อมต่อแล้วไปยังการเรียกกลับ (I66a76, b/273568280)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.6
: แก้ไขปัญหาที่การเรียกclearFragmentResultListener
ภายในsetFragmentResultListener
จะไม่ทำงานหากLifecycle
เป็นSTARTED
อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.6.1
แล้ว (586fe7) - ตอนนี้ Fragment จะขึ้นอยู่กับ SavedState
1.2.1
(078e4e) - ตอนนี้ Fragment ขึ้นอยู่กับ ProfileInstaller
1.3.0
แล้ว (3fc05b)
เวอร์ชัน 1.6.0-alpha07
8 มีนาคม 2023
androidx.fragment:fragment-*:1.6.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha07 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.6
: แก้ไขปัญหาที่การนำ Fragment ออกไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทำให้เมนูของกิจกรรมใช้ไม่ได้ (50f098, b/244336571)
เวอร์ชัน 1.6.0-alpha06
22 กุมภาพันธ์ 2023
androidx.fragment:fragment-*:1.6.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงพฤติกรรม
- ตอนนี้ระบบจะเรียกใช้
onBackStackChangedStarted
การเรียกกลับในFragmentManager
ของonBackStackChangedListener
ก่อนที่ Fragment จะเริ่มเปลี่ยนไปเป็นสถานะเป้าหมาย (I34726)
เวอร์ชัน 1.6.0-alpha05
8 กุมภาพันธ์ 2023
androidx.fragment:fragment-*:1.6.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
FragmentManager.OnBackStackChagnedListener
อินเทอร์เฟซมีฟังก์ชันเรียกกลับเพิ่มเติม 2 รายการ ได้แก่onBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งช่วยให้มีข้อมูลและการควบคุมเพิ่มเติมเมื่อมีการเปลี่ยนแปลงสแต็กย้อนกลับในFragmentManager
(Ib7ce5, b/238686802)
การเปลี่ยนแปลง API
- ตอนนี้เราได้ใส่คำอธิบายประกอบที่เหมาะสมให้กับ API
Fragment
และFragmentManager
ที่ใช้Intent
หรือIntentSender
ด้วย@NonNull
เพื่อป้องกันการส่งค่าว่าง เนื่องจากค่าว่างจะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้หยุดทำงานทันทีเสมอ (I06fd4)
เวอร์ชัน 1.6.0-alpha04
7 ธันวาคม 2022
androidx.fragment:fragment-*:1.6.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentStrictMode
เพิ่มWrongNestedHierarchyViolation
ใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้น View ของ Fragment หลัก แต่ไม่ได้เพิ่มลงในchildFragmentManager
ของ Fragment หลัก (I72521, b/249299268)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ Fragment จะคืนค่า
SavedStateRegistry
สถานะก่อนonAttach()
เพื่อให้แน่ใจว่า Fragment จะพร้อมใช้งานจากเมธอดวงจรการทำงานทั้งหมดที่สูงขึ้น (I1e2b1)
การเปลี่ยนแปลง API
- อาร์ติแฟกต์
fragment-testing-manifest
จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง fragment-testing
กับ androidx.test
(I8e534, b/128612536)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.5
: Fragment จะไม่บันทึกสถานะViewModel
เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอย่างไม่ถูกต้องอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.6.0-alpha03
5 ตุลาคม 2022
androidx.fragment:fragment:1.6.0-alpha03
androidx.fragment:fragment-ktx:1.6.0-alpha03
และ androidx.fragment:fragment-testing:1.6.0-alpha03
ออกอากาศแล้ว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้คลาสที่ขยาย
DialogFragment
จะต้องเรียกใช้ super ในการลบล้างonDismiss()
(I14798, b/238928865)
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซการเรียกกลับของผู้ให้บริการรายใหม่ (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) เพื่อให้มั่นใจว่า Fragment จะได้รับการเรียกกลับที่เหมาะสมเสมอ (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
เวอร์ชัน 1.6.0-alpha02
24 สิงหาคม 2022
androidx.fragment:fragment:1.6.0-alpha02
androidx.fragment:fragment-ktx:1.6.0-alpha02
และ androidx.fragment:fragment-testing:1.6.0-alpha02
ออกอากาศแล้ว เวอร์ชัน 1.6.0-alpha02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.2
: แก้ไขปัญหาที่การดำเนินการธุรกรรมpopBackStack()
และreplace()
พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้Animation
/Animator
ที่ไม่ถูกต้อง (Ib1c07, b/214835303)
เวอร์ชัน 1.6.0-alpha01
27 กรกฎาคม 2022
androidx.fragment:fragment:1.6.0-alpha01
androidx.fragment:fragment-ktx:1.6.0-alpha01
และ androidx.fragment:fragment-testing:1.6.0-alpha01
ออกอากาศแล้ว เวอร์ชัน 1.6.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- สถานะที่บันทึกไว้ของ
Fragment
ได้รับการแยกออกเป็นสถานะของคลังส่วนตัว (คลาสParcelable
ที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ในBundle
เสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ (b/207158202)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.1
: แก้ไขการถดถอยในDialogFragmentCallbacksDetector
ซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.5.1
: ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Lifecycle2.5.1
แล้ว (Id204c) - จาก Fragment
1.5.1
: ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity1.5.1
แล้ว (I10f07)
รุ่น 1.5
เวอร์ชัน 1.5.7
19 เมษายน 2023
androidx.fragment:fragment:1.5.7
androidx.fragment:fragment-ktx:1.5.7
และ androidx.fragment:fragment-testing:1.5.7
ออกอากาศแล้ว เวอร์ชัน 1.5.7 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การใช้
postponeEnterTransition
ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปรั่วไหลอีกต่อไป (I2ec7d, b/276375110)
เวอร์ชัน 1.5.6
22 มีนาคม 2023
androidx.fragment:fragment:1.5.6
androidx.fragment:fragment-ktx:1.5.6
และ androidx.fragment:fragment-testing:1.5.6
ออกอากาศแล้ว เวอร์ชัน 1.5.6 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การนำ Fragment ออกไม่ว่าจะมีการเพิ่มรายการในเมนูหรือไม่ก็ตาม จะทำให้เมนูของกิจกรรมใช้งานไม่ได้ (50f098, b/244336571)
- แก้ไขปัญหาที่การเรียก
clearFragmentResultListener
ภายในsetFragmentResultListener
จะไม่ทำงานหากLifecycle
เป็นSTARTED
อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)
เวอร์ชัน 1.5.5
7 ธันวาคม 2022
androidx.fragment:fragment:1.5.5
androidx.fragment:fragment-ktx:1.5.5
และ androidx.fragment:fragment-testing:1.5.5
ออกอากาศแล้ว เวอร์ชัน 1.5.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- Fragment จะไม่บันทึกสถานะ
ViewModel
อย่างไม่ถูกต้องเป็นส่วนหนึ่งของสถานะที่บันทึกของรีจิสทรีมุมมองอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.5.4
24 ตุลาคม 2022
androidx.fragment:fragment:1.5.4
androidx.fragment:fragment-ktx:1.5.4
และ androidx.fragment:fragment-testing:1.5.4
ออกอากาศแล้ว เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดที่การใช้
FragmentController
ที่กำหนดเองกับโฮสต์ที่ไม่ได้ใช้ส่วนติดต่อการเรียกกลับของผู้ให้บริการ (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) และการเรียกใช้ฟังก์ชันการส่งที่เลิกใช้งานแล้วจะส่งไปยัง Fragment ย่อยไม่สำเร็จ (I9b380)
เวอร์ชัน 1.5.3
21 กันยายน 2022
androidx.fragment:fragment:1.5.3
androidx.fragment:fragment-ktx:1.5.3
และ androidx.fragment:fragment-testing:1.5.3
ออกอากาศแล้ว เวอร์ชัน 1.5.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดที่ทำให้ Fragment ใน Back Stack ได้รับการเรียกกลับ
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
และonConfigurationChanged()
(I34581, I8dfe6, b/242570955) - Fragment ย่อยที่ซ้อนกันจะไม่ได้รับการเรียกกลับ
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
หรือonConfigurationChanged()
หลายรายการอีกต่อไป (I690b3, Id0096, If9d6b, I2cba2)
รุ่น 1.5.2
10 สิงหาคม 2022
androidx.fragment:fragment:1.5.2
androidx.fragment:fragment-ktx:1.5.2
และ androidx.fragment:fragment-testing:1.5.2
ออกอากาศแล้ว เวอร์ชัน 1.5.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การดำเนินการธุรกรรม
popBackStack()
และreplace()
พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้Animation
/Animator
ที่ไม่ถูกต้อง (Ib1c07, b/214835303)
รุ่น 1.5.1
27 กรกฎาคม 2022
androidx.fragment:fragment:1.5.1
androidx.fragment:fragment-ktx:1.5.1
และ androidx.fragment:fragment-testing:1.5.1
ออกอากาศแล้ว เวอร์ชัน 1.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน
DialogFragmentCallbacksDetector
ซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารี Fragment ขึ้นต่อกันกับ Lifecycle
2.5.1
แล้ว (Id204c) - ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity
1.5.1
แล้ว (I10f07)
เวอร์ชัน 1.5.0
29 มิถุนายน 2022
androidx.fragment:fragment:1.5.0
androidx.fragment:fragment-ktx:1.5.0
และ androidx.fragment:fragment-testing:1.5.0
ออกอากาศแล้ว เวอร์ชัน 1.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.4.0
- การผสานรวม CreationExtras - ตอนนี้
Fragment
สามารถระบุViewModelProvider.Factory
แบบไม่มีสถานะผ่าน Lifecycle2.5.0
ของCreationExtras
ได้แล้ว - การผสานรวมกล่องโต้ตอบคอมโพเนนต์ -
DialogFragment
ตอนนี้ใช้ComponentDialog
ผ่าน Activity1.5.0
เป็นกล่องโต้ตอบเริ่มต้นที่onCreateDialog()
แสดงผล - การปรับโครงสร้างโค้ดสถานะอินสแตนซ์ที่บันทึกไว้ - Fragment เริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์แล้ว ซึ่งเป็นความพยายามที่จะช่วยระบุอย่างชัดเจนว่ามีการบันทึกสถานะใดไว้ใน Fragment และแหล่งที่มาของสถานะ การเปลี่ยนแปลงในปัจจุบันมีดังนี้
FragmentManager
จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงในBundle
แทนที่จะบันทึกลงในParcelable
ที่กำหนดเองโดยตรง- ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าผ่าน
Fragment Result APIs
ซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของFragmentManager
- ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ
FragmentManager
ซึ่งช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในบันทึกการแก้ไขข้อบกพร่องของFragment
ได้
การเปลี่ยนแปลงอื่นๆ
FragmentStrictMode
มีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้allowViolation()
กับชื่อคลาส- เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน
ActionBar
ของกิจกรรมแล้ว APIMenuHost
และMenuProvider
ที่เพิ่มใน Activity1.4.0
มีพื้นผิว API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของแอป ซึ่ง Fragment ควรใช้
เวอร์ชัน 1.5.0-rc01
11 พฤษภาคม 2022
androidx.fragment:fragment:1.5.0-rc01
androidx.fragment:fragment-ktx:1.5.0-rc01
และ androidx.fragment:fragment-testing:1.5.0-rc01
ออกอากาศแล้ว เวอร์ชัน 1.5.0-rc01 มีคอมมิตเหล่านี้
การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้
- ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ
FragmentManager
ซึ่งช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในการบันทึกการแก้ไขข้อบกพร่องของ Fragment ได้ (a153e0, b/207158202)
เวอร์ชัน 1.5.0-beta01
20 เมษายน 2022
androidx.fragment:fragment:1.5.0-beta01
androidx.fragment:fragment-ktx:1.5.0-beta01
และ androidx.fragment:fragment-testing:1.5.0-beta01
ออกอากาศแล้ว เวอร์ชัน 1.5.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
DialogFragment
ได้เพิ่มเมธอดdismissNow
ใหม่ที่ใช้commitNow
เพื่อให้เทียบเท่ากับฟังก์ชันshowNow
โปรดทราบว่าการดำเนินการนี้จะไม่ทำให้Dialog
ถูกปิดในทันที แต่จะอัปเดตสถานะของFragmentManager
แบบพร้อมกันเท่านั้น (I15c36, b/72644830)
การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้
FragmentManager
จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงในBundle
แทนที่จะบันทึกลงในParcelable
ที่กำหนดเองโดยตรง นี่เป็นขั้นตอนแรกในการเพิ่มความโปร่งใสเกี่ยวกับสิ่งที่ Fragments บันทึกไว้จริงๆ (I93807, b/207158202)- ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าผ่าน Fragment Result APIs ซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของ
FragmentManager
ซึ่งจะช่วยให้มีความโปร่งใสเพิ่มเติมเกี่ยวกับผลลัพธ์ที่บันทึกไว้เป็นส่วนหนึ่งของสถานะอินสแตนซ์ที่บันทึกไว้ (I6ea12, b/207158202)
เวอร์ชัน 1.5.0-alpha05
6 เมษายน 2022
androidx.fragment:fragment:1.5.0-alpha05
androidx.fragment:fragment-ktx:1.5.0-alpha05
และ androidx.fragment:fragment-testing:1.5.0-alpha05
ออกอากาศแล้ว เวอร์ชัน 1.5.0-alpha05 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เราเลิกใช้งาน
setHasOptionsMenu()
ของFragment
แล้ว หากต้องการจัดการเมนูและรายการเมนู คุณควรใช้ Menu API ใหม่แทนตามหมายเหตุประจำรุ่นของ Fragment1.5.0-alpha04
(I7b4b4, b/226438239)
เวอร์ชัน 1.5.0-alpha04
23 มีนาคม 2022
androidx.fragment:fragment:1.5.0-alpha04
androidx.fragment:fragment-ktx:1.5.0-alpha04
และ androidx.fragment:fragment-testing:1.5.0-alpha04
ออกอากาศแล้ว เวอร์ชัน 1.5.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน
ActionBar
ของกิจกรรมแล้ว เนื่องจาก API ดังกล่าวเชื่อมโยง Fragment กับกิจกรรมอย่างแน่นแฟ้นและไม่สามารถทดสอบแยกกันได้ APIMenuHost
และMenuProvider
ที่เพิ่มใน Activity1.4.0-alpha01
มีพื้นผิว API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของแอป ซึ่ง Fragment ควรใช้ (I50a59, I20758)
การแก้ไขข้อบกพร่อง
- ตอนนี้
SavedStateViewFactory
รองรับการใช้CreationExtras
แล้วแม้ว่าจะเริ่มต้นด้วยSavedStateRegistryOwner
ก็ตาม หากมีการระบุส่วนเสริม ระบบจะไม่สนใจอาร์กิวเมนต์ที่เริ่มต้น (I6c43b, b/224844583)
เวอร์ชัน 1.5.0-alpha03
23 กุมภาพันธ์ 2022
androidx.fragment:fragment:1.5.0-alpha03
androidx.fragment:fragment-ktx:1.5.0-alpha03
และ androidx.fragment:fragment-testing:1.5.0-alpha03
ออกอากาศแล้ว เวอร์ชัน 1.5.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้คุณส่ง
CreationExtras
ไปยังฟังก์ชันby viewModels()
และby activityViewModels()
ได้แล้ว (Ibefe7, b/217601110)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
DialogFragment
ใช้ComponentDialog
เป็นค่าเริ่มต้น กล่องโต้ตอบที่onCreateDialog()
แสดงผล (If3784, b/217618170)
เวอร์ชัน 1.5.0-alpha02
9 กุมภาพันธ์ 2022
androidx.fragment:fragment:1.5.0-alpha02
androidx.fragment:fragment-ktx:1.5.0-alpha02
และ androidx.fragment:fragment-testing:1.5.0-alpha02
ออกอากาศแล้ว เวอร์ชัน 1.5.0-alpha02 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
FragmentStrictMode
มีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้allowViolation()
กับชื่อคลาส (I8f678)
เวอร์ชัน 1.5.0-alpha01
26 มกราคม 2022
androidx.fragment:fragment:1.5.0-alpha01
androidx.fragment:fragment-ktx:1.5.0-alpha01
และ androidx.fragment:fragment-testing:1.5.0-alpha01
ออกอากาศแล้ว เวอร์ชัน 1.5.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
Fragment
ตอนนี้ผสานรวมกับ ViewModel CreationExtras ซึ่งเปิดตัวเป็นส่วนหนึ่งของ Lifecycle2.5.0-alpha01
แล้ว (I3060b, b/207012585)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.4.1
:FragmentContainerView
จะไม่ทําให้เกิดข้อยกเว้นสถานะที่ไม่ถูกต้องอีกต่อไปเมื่อรหัสมุมมองที่สร้างจาก XML มีค่าเป็นลบ (Ic185b, b/213086140) - จาก Fragment
1.4.1
: เมื่อใช้ownerProducer
แลมบ์ดาที่กำหนดเองกับฟังก์ชันby viewModels()
lazy ตอนนี้จะใช้defaultViewModelProviderFactory
จากเจ้าของนั้นหากไม่ได้ระบุViewModelProvider.Factory
ที่กำหนดเอง แทนที่จะใช้โรงงานของ Fragment เสมอ (I56170, b/214106513) - แก้ไขข้อขัดข้องเมื่อเข้าถึง
ViewModel
เป็นครั้งแรกจากแฮนเดิลการเรียกกลับregisterForActivityResult()
ของFragment
(Iea2b3)
เวอร์ชัน 1.4
เวอร์ชัน 1.4.1
26 มกราคม 2022
androidx.fragment:fragment:1.4.1
androidx.fragment:fragment-ktx:1.4.1
และ androidx.fragment:fragment-testing:1.4.1
ออกอากาศแล้ว เวอร์ชัน 1.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
FragmentContainerView
จะไม่ทําให้เกิดข้อยกเว้นสถานะที่ผิดกฎหมาย อีกต่อไปเมื่อรหัสมุมมองที่สร้างจาก XML มีค่าเป็นลบ (Ic185b, b/213086140)- เมื่อใช้
ownerProducer
แลมบ์ดาที่กำหนดเองกับฟังก์ชันby viewModels()
lazy ตอนนี้จะใช้defaultViewModelProviderFactory
จากเจ้าของนั้นหากไม่ได้ระบุViewModelProvider.Factory
ที่กำหนดเอง แทนที่จะใช้โรงงานของ Fragment เสมอ (I56170, b/214106513)
เวอร์ชัน 1.4.0
17 พฤศจิกายน 2021
androidx.fragment:fragment:1.4.0
androidx.fragment:fragment-ktx:1.4.0
และ androidx.fragment:fragment-testing:1.4.0
ออกอากาศแล้ว เวอร์ชัน 1.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.3.0
FragmentStrictMode
API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ API ของ Fragment ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะพิมพ์ข้อความบันทึก เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่าFragmentStrictMode.Policy
ที่ควบคุมการตรวจสอบที่เปิดใช้และ "บทลงโทษ" ที่เรียกใช้ได้ในFragmentManager
ผ่านเมธอดsetStrictModePolicy()
ใหม่ นโยบายดังกล่าวมีผลกับFragmentManager
และมีผลต่อเนื่องกับ FragmentManager ย่อยที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดูโหมด Strict สำหรับ FragmentFragmentContainerView
ตอนนี้มีเมธอดgetFragment()
ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับfindFragmentById()
ที่มีรหัสของFragmentContainerView
แต่จะอนุญาตให้เชื่อมโยงการเรียกval navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
ได้ติดตั้งใช้งานCloseable
แล้ว ซึ่งช่วยให้คุณใช้ได้กับเมธอดuse
ของ Kotlin หรือ try-with-resourcesเพิ่ม
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragment หรือไม่เราได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)
ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน
การย้อนกลับหลายครั้ง
FragmentManager
จะเก็บสแต็กย้อนกลับที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack()
ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม
การเปิดตัวนี้จะขยายกลไกเหล่านี้โดยการจัดหา FragmentManager
API ใหม่ 3 รายการ ได้แก่ saveBackStack(String name)
, restoreBackStack(String name)
และ clearBackStack(String name)
API เหล่านี้ใช้ name
เดียวกันกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของทุก Fragment ที่เพิ่มในการทำธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมและ Fragment ได้ในภายหลัง ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพโดยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้
saveBackStack()
popBackStack()
จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่saveBackStack()
จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้addToBackStack()
ที่มีชื่อที่ตรงกันและไม่ใช่ค่าว่างมาก่อน- ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียกใช้
onSaveInstanceState()
ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ViewModel
ที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และไม่เรียกใช้onCleared()
ในอินสแตนซ์เหล่านั้น)
ธุรกรรมแบบแยกส่วนที่ใช้กับ saveBackStack()
ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของแต่ละส่วนต้องใช้
setReorderingAllowed(true)
เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าจะมีอะไรเปลี่ยนแปลงใน Back Stack ในช่วงเวลาดังกล่าวก็ตาม
- ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า
FragmentManager
จะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว
เช่นเดียวกับ saveBackStack()
, restoreBackStack()
และ clearBackStack()
ซึ่งจะกู้คืนหรือล้างสแต็กย้อนกลับที่บันทึกไว้ก่อนหน้านี้ตามลำดับ ทั้ง 2 อย่างจะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack()
ด้วยชื่อเดียวกันก่อนหน้านี้
ดูข้อมูลเพิ่มเติมได้ที่สแต็กย้อนกลับหลายรายการ: ข้อมูลเชิงลึก
เวอร์ชัน 1.4.0-rc01
3 พฤศจิกายน 2021
androidx.fragment:fragment:1.4.0-rc01
เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก Fragment 1.4.0-beta01 เวอร์ชัน 1.4.0-rc01 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.4.0-beta01
27 ตุลาคม 2021
androidx.fragment:fragment:1.4.0-beta01
androidx.fragment:fragment-ktx:1.4.0-beta01
และ androidx.fragment:fragment-testing:1.4.0-beta01
ออกอากาศแล้ว เวอร์ชัน 1.4.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment ระดับบนสุดจะส่ง
onHiddenChanged()
ลง ทั้งลำดับชั้นก่อนที่จะเรียกใช้การเรียกกลับของตัวเอง (Iedc20, b/77504618) - ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อเปลี่ยนจาก Fragment ที่มีแป้นพิมพ์เปิดอยู่ไปยัง Fragment ที่มี RecyclerView (I8b842, b/196852211)
DialogFragment
ตอนนี้ใช้setReorderingAllowed(true)
สำหรับธุรกรรมทั้งหมด ที่สร้างขึ้นเมื่อคุณเรียกใช้show()
,showNow()
หรือdismiss()
(Ie2c14)- เราได้ย่อคำเตือนของ Lint ที่ยาวมากของ
DetachAndAttachFragmentInSameFragmentTransaction
เป็นDetachAndAttachSameFragment
แล้ว (e9eca3)
เวอร์ชัน 1.4.0-alpha10
29 กันยายน 2021
androidx.fragment:fragment:1.4.0-alpha10
androidx.fragment:fragment-ktx:1.4.0-alpha10
และ androidx.fragment:fragment-testing:1.4.0-alpha10
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha10 มีคอมมิตต่อไปนี้
Lint
- เพิ่ม
DetachAndAttachFragmentInSameFragmentTransaction
คำเตือนของโปรแกรมตรวจสอบโค้ดเพื่อตรวจหาการเรียกทั้งdetach()
และattach()
ในFragment
เดียวกันในFragmentTransaction
เดียวกัน เนื่องจากเมื่อดำเนินการในธุรกรรมเดียวกัน การดำเนินการเสริมเหล่านี้จะหักล้างกันเอง จึงต้องแยกออกเป็นธุรกรรมที่แยกกันเพื่อดำเนินการจริง (aosp/1832956, b/200867930) - เพิ่ม
FragmentAddMenuProvider
ข้อผิดพลาดของ Lint สำหรับการแก้ไขการใช้งานวงจรของ Fragment เป็นวงจรของมุมมอง Fragment เมื่อใช้addMenuProvider
API ของMenuHost
(aosp/1830457, b/200326272)
การอัปเดตเอกสารประกอบ
- ข้อความการเลิกใช้งานสำหรับ API ที่ตอนนี้จัดการโดย Activity Result APIs ซึ่งได้แก่
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
และonRequestPermissionsResult
ได้รับการขยายรายละเอียดเพิ่มเติมแล้ว (cce80f) - ข้อความการเลิกใช้งานสำหรับ
onActivityCreated()
ทั้งFragment
และDialogFragment
ได้รับการขยายรายละเอียดเพิ่มเติมทั้งหมดแล้ว (224db4)
เวอร์ชัน 1.4.0-alpha09
15 กันยายน 2021
androidx.fragment:fragment:1.4.0-alpha09
androidx.fragment:fragment-ktx:1.4.0-alpha09
และ androidx.fragment:fragment-testing:1.4.0-alpha09
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha09 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถเรียกใช้
clearBackStack(name)
เพื่อ ล้างสถานะที่บันทึกไว้ก่อนหน้านี้ด้วยsaveBackStack(name)
(I70cd7)
การเปลี่ยนแปลง API
- เราได้เขียนคลาส
FragmentContainerView
ใหม่ใน Kotlin เพื่อให้มั่นใจว่าฟังก์ชันgetFragment
จะพิจารณา ค่า Null อย่างถูกต้อง (If694a, b/189629145) - ตอนนี้ FragmentStrictMode เขียนด้วย Kotlin แล้ว (I11767, b/199183506)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่สถานะของ Fragment
ซึ่งเพิ่มด้วย
setReorderingAllowed(true)
แล้ว นำออกทันทีก่อนที่จะดำเนินการธุรกรรมที่รอดำเนินการ จะไม่ได้รับการล้างข้อมูลอย่างถูกต้อง (I8ccb8)
เวอร์ชัน 1.4.0-alpha08
1 กันยายน 2021
androidx.fragment:fragment:1.4.0-alpha08
androidx.fragment:fragment-ktx:1.4.0-alpha08
และ androidx.fragment:fragment-testing:1.4.0-alpha08
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha08 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- ปรับปรุง
UseRequireInsteadOfGet
การตรวจสอบ Lint เพื่อจัดการวงเล็บซ้ำได้ดียิ่งขึ้น (I2d865) - ปรับปรุง
UseGetLayoutInflater
การตรวจสอบ Lint เพื่อรองรับกรณีขอบเพิ่มเติม (Ie5423)
เวอร์ชัน 1.4.0-alpha07
18 สิงหาคม 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
และ androidx.fragment:fragment-testing:1.4.0-alpha07
เปิดตัวโดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 1.4.0-alpha07 มีคอมมิตต่อไปนี้
เวอร์ชัน 1.4.0-alpha06
4 สิงหาคม 2021
androidx.fragment:fragment:1.4.0-alpha06
androidx.fragment:fragment-ktx:1.4.0-alpha06
และ androidx.fragment:fragment-testing:1.4.0-alpha06
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha06 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ Back Stack หลายรายการเมื่อสลับไปมาระหว่าง Back Stack อย่างรวดเร็ว ซึ่งจะปรากฏเป็น
IllegalStateException
ขณะกู้คืนFragmentTransaction
หรือเป็น สำเนาที่ 2 ของ Fragment ที่ปรากฏขึ้น (I9039f) - แก้ไขปัญหาที่
FragmentManager
จะเก็บสำเนาของสถานะที่บันทึกไว้ก่อนหน้านี้ ผ่านsaveBackStack()
แม้หลังจากกู้คืนสถานะนั้นแล้ว ก็ตาม (Ied212) dismissAllowingStateLoss()
เมธอด ของDialogFragment
จะไม่ขัดข้องอีกต่อไปเมื่อคุณเรียกใช้ หลังจากบันทึกสถานะเมื่อเพิ่ม DialogFragment ผ่านเมธอดshow(FragmentTransaction, String)
โดยเฉพาะ (I84422)
เวอร์ชัน 1.4.0-alpha05
21 กรกฎาคม 2021
androidx.fragment:fragment:1.4.0-alpha05
androidx.fragment:fragment-ktx:1.4.0-alpha05
และ androidx.fragment:fragment-testing:1.4.0-alpha05
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha05 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.3.6
: ตอนนี้ระบบจะตั้งค่ามุมมองของ Fragment เป็นGONE
อย่างถูกต้องเมื่อใช้hide()
เมื่อมุมมองรากมีการตั้งค่าtransitionGroup=”true”
(aosp/1766655, b/193603427) - จาก Fragment
1.3.6
:FragmentActivity
ตอนนี้จะปลดล็อกสถานะที่บันทึกไว้เสมอ เป็นการดำเนินการแรกในวงจร การเรียกกลับของวงจรที่แทนที่ (I6db7a)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.3.6
: ตอนนี้ Fragment ขึ้นอยู่กับ Activity1.2.4
(I3a66c)
เวอร์ชัน 1.4.0-alpha04
30 มิถุนายน 2021
androidx.fragment:fragment:1.4.0-alpha04
androidx.fragment:fragment-ktx:1.4.0-alpha04
และ androidx.fragment:fragment-testing:1.4.0-alpha04
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
FragmentManager
ใช้SavedStateRegistry
เบื้องหลังเพื่อบันทึกสถานะ นอกจากนี้ เมธอดsaveAllState()
และrestoreSavedState()
ยังเลิกใช้งานในFragmentController
ด้วย หากใช้FragmentController
เพื่อโฮสต์ Fragment นอกFragmentActivity
คุณควรให้FragmentHostCallbacks
ใช้SavedStateRegistryOwner
(Iba68e, b/188734238)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเรียกไปยัง
saveBackStack()
ซึ่งเป็นส่วนหนึ่งของการรองรับแบ็ก สแต็กหลายรายการจะล้มเหลวเมื่อดำเนินการพร้อมกับ การเรียกใช้FragmentTransaction
ที่ใช้replace()
(I73137) - แก้ไข
NullPointerException
ที่ จะเกิดขึ้นหลังจากกู้คืนสแต็กย้อนกลับที่บันทึกไว้ ด้วยตนเองซึ่งมีธุรกรรมหลายรายการ เมื่อใช้restoreBackStack()
API สำหรับ การรองรับสแต็กย้อนกลับหลายรายการ นอกจากนี้ ยังแก้ไขปัญหาที่ระบบไม่ได้ตรวจสอบsetReorderingAllowed(true)
สำหรับธุรกรรมทั้งหมดด้วย (I8c593) - แก้ไขปัญหาที่
FragmentManager
จะ กู้คืนสถานะที่บันทึกไว้ก่อนหน้านี้ของ Fragment อย่างไม่ถูกต้องต่อไปแม้หลังจากที่นำ Fragment เหล่านั้นออกจากFragmentManager
แล้วก็ตาม ซึ่งทำให้สถานะที่บันทึกไว้ เพิ่มขึ้นเรื่อยๆ เมื่อเวลาผ่านไป (I1fb8e)
เวอร์ชัน 1.4.0-alpha03
16 มิถุนายน 2021
androidx.fragment:fragment:1.4.0-alpha03
androidx.fragment:fragment-ktx:1.4.0-alpha03
และ androidx.fragment:fragment-testing:1.4.0-alpha03
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha03 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เราได้อัปเดตคลาส Fragment StrictMode
Violation
ทั้งหมดด้วยข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งอธิบายรายละเอียดของการละเมิด (b/187871638)- ตอนนี้
FragmentTagUsageViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งมีคอนเทนเนอร์หลัก ที่ระบบจะเพิ่มส่วนย่อยลงไป (Ic33a7) WrongFragmentContainerViolation
ตอนนี้มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงคอนเทนเนอร์ที่ มีการเพิ่ม Fragment (Ib55f8)- ตอนนี้คลาสกรณีการใช้งานสำหรับ
TargetFragmentUsageViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งรวมถึงส่วนที่ทำให้เกิดการละเมิดและข้อมูลอื่นๆ ที่มีอยู่ (Icc6ac) - คลาสที่ขยาย
RetainInstanceUsageViolation
จะมีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งรวมถึง Fragment ที่ทำให้เกิดการละเมิด (I6bd55) FragmentReuseViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงรหัสก่อนหน้าของ Fragment (I28ce2)SetUserVisibleHintViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงคำแนะนำที่ผู้ใช้ มองเห็นที่กำลังตั้งค่า (Ib2d5f)
- ตอนนี้
การเปลี่ยนแปลงลักษณะการทำงาน
- ยกเลิกการจำกัดการเรียก
fitsSystemWindows
ในFragmentContainerView
แล้ว ซึ่งจะไม่ทำให้แอปขัดข้องอีกต่อไป (6b8ddd, b/190622202)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.3.5
: แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันซึ่งเปิดตัวใน Fragment1.3.4
โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนฉากได้อย่างถูกต้องแล้ว (ทั้งที่ตั้งค่าโดยตรงผ่านtransitionGroup="true"
หรือโดยอ้อมผ่านtransitionName
หรือbackground
) และ องค์ประกอบที่ใช้ร่วมกันจะไม่แสดงIndexOutOfBoundsException
อีกต่อไป (I16484, b/188679569, b/188969304) FragmentManager
จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนการนำ Fragment ออก (I573dd, b/183634730)- การตรวจสอบ Lint ของ
OnCreateDialogIncorrectCallback
จะไม่ขัดข้องอีกต่อไปเมื่อประเมินตัวแปรระดับบนสุด (0a9efa, b/189967522)
เวอร์ชัน 1.4.0-alpha02
2 มิถุนายน 2021
androidx.fragment:fragment:1.4.0-alpha02
androidx.fragment:fragment-ktx:1.4.0-alpha02
และ androidx.fragment:fragment-testing:1.4.0-alpha02
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
FragmentStrictMode
จะบันทึกการละเมิดเสมอเมื่อเปิดใช้การบันทึกผ่านFragmentManager
ไม่ว่านโยบายโหมดเข้มงวดที่ใช้อยู่จะเป็นอะไรก็ตาม (I02df6, b/187872638) FragmentStrictMode
ตอนนี้รองรับการยกเว้นFragment
บางชั้นเรียนจากViolation
โหมดเข้มงวดแล้ว ซึ่งจะช่วยให้ชั้นเรียนนั้นหลีกเลี่ยงการลงโทษได้ (Ib4e5d, b/184786736)เราได้ขยาย
FragmentStrictMode
คลาสViolation
เพื่อเพิ่มข้อมูลโครงสร้างตามการละเมิดแต่ละครั้ง ซึ่งจะช่วยให้คุณยืนยันได้อย่างชัดเจนว่าอะไรเป็นสาเหตุของการละเมิดพร้อมกับส่วนที่ละเมิด (If5118, b/187871150) โดยแต่ละViolation
จะมีข้อมูลต่อไปนี้WrongFragmentContainerViolation
มีViewGroup
ที่Fragment
พยายามเพิ่ม (I83c75, b/187871150)TargetFragmentUsageViolation
ได้รับการขยายเป็นSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
และGetTargetFragmentRequestCodeUsageViolation
โดยSetTargetFragmentUsageViolation
มีทั้งโค้ดคำขอและโค้ดส่วนเป้าหมาย (I741b4, b/187871150)- ตอนนี้
SetUserVisibleHintViolation
มีค่าบูลีนที่ส่งไปยังsetUserVisibleHint()
แล้ว (I00585, b/187871150) FragmentTagUsageViolation
มี ViewGroup ที่แท็ก<fragment>
พยายามขยาย Fragment เข้าไป (I5dbbc, b/187871150)FragmentReuseViolation
ตอนนี้มี รหัสที่ไม่ซ้ำกันของอินสแตนซ์ก่อนหน้าของFragment
ที่ทำให้เกิดการละเมิด (I0544d, b/187871150)RetainInstanceUsageViolation
ตอนนี้เป็น นามธรรมและมี 2 คลาสย่อย ได้แก่SetRetainInstanceUsageViolation
และGetRetainInstanceUsageViolation
ซึ่งแสดงถึง 2 กรณี สำหรับประเภทการละเมิด (Ic81e5, b/187871150)
การเปลี่ยนแปลงลักษณะการทำงาน
FragmentContainerView
จะโยนข้อยกเว้นเมื่อพยายามเปลี่ยนแอตทริบิวต์fitsSystemWindow
โดยใช้โปรแกรมหรือผ่าน XML ส่วนแทรกควรได้รับการจัดการโดยมุมมองของแต่ละ Fragment (Ie6651, b/187304502)
เวอร์ชัน 1.4.0-alpha01
18 พฤษภาคม 2021
androidx.fragment:fragment:1.4.0-alpha01
androidx.fragment:fragment-ktx:1.4.0-alpha01
และ androidx.fragment:fragment-testing:1.4.0-alpha01
ออกอากาศแล้ว เวอร์ชัน 1.4.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
FragmentContainerView
ตอนนี้มีเมธอดgetFragment()
ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับfindFragmentById()
ที่มีรหัสของFragmentContainerView
แต่จะอนุญาตให้เชื่อมโยงการเรียก (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
เพิ่ม
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragment หรือไม่ (I46652)
การย้อนกลับหลายครั้ง
FragmentManager
จะเก็บสแต็กย้อนกลับที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack()
ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม
การเปิดตัวนี้จะขยายกลไกเหล่านี้ด้วยการจัดหา FragmentManager
API ใหม่ 2 รายการ ได้แก่ saveBackStack(String name)
และ restoreBackStack(String name)
API เหล่านี้ใช้ name
เดียวกันกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของทุก Fragment ที่เพิ่มในการทำธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมและ Fragment ได้ในภายหลัง ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพโดยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้ธุรกรรมของ Fragment ทั้งหมดกลับไปที่ชื่อนั้นๆ เพื่อย้อนกลับ ("ป๊อป") และ Fragment ที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้
saveBackStack()
popBackStack()
จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่saveBackStack()
จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้addToBackStack()
ที่มีชื่อที่ตรงกันและไม่ใช่ค่าว่างมาก่อน- ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ View ของทุก Fragment, เรียกใช้
onSaveInstanceState()
ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ViewModel
ที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และไม่เรียกใช้onCleared()
ในอินสแตนซ์เหล่านั้น)
ธุรกรรมแบบแยกส่วนที่ใช้กับ saveBackStack()
ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของแต่ละส่วนต้องใช้
setReorderingAllowed(true)
เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าจะมีอะไรเปลี่ยนแปลงใน Back Stack ในช่วงเวลาดังกล่าวก็ตาม
- ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า
FragmentManager
จะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว
เช่นเดียวกับ saveBackStack()
restoreBackStack()
จะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack()
ด้วยชื่อเดียวกันก่อนหน้านี้ (b/80029773)
StrictMode ของ Fragment
FragmentStrictMode
API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ API ของ Fragment ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะพิมพ์ข้อความบันทึก เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่า FragmentStrictMode.Policy
ที่ควบคุมการตรวจสอบที่เปิดใช้และ "บทลงโทษ" ที่เรียกใช้ได้ใน FragmentManager
ผ่านเมธอด setStrictModePolicy()
ใหม่ นโยบายดังกล่าวมีผลกับ FragmentManager
และมีผลต่อเนื่องกับ FragmentManager ย่อยที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง (#123, #131, #150, b/143774122)
detectFragmentReuse()
จะตรวจหาว่ามีการเพิ่มอินสแตนซ์Fragment
ที่นำออกไปก่อนหน้านี้กลับเข้าไปในFragmentManager
หรือไม่ คุณไม่ควรโต้ตอบหรือเก็บข้อมูลอ้างอิงของอินสแตนซ์Fragment
หลังจากที่อินสแตนซ์ดังกล่าวถูกทำลายและนำออกจากFragmentManager
แล้ว (#142, b/153738653)detectFragmentTagUsage()
จะตรวจหาเมื่อคุณใช้แท็ก<fragment>
ใน XML ของเลย์เอาต์ คุณควรใช้FragmentContainerView
เสมอเมื่อขยาย Fragment เป็นส่วนหนึ่งของเลย์เอาต์ (#141, b/153738235)detectWrongFragmentContainer()
จะตรวจหาเมื่อคุณเพิ่ม Fragment ลงใน Container ที่ไม่ใช่FragmentContainerView
คุณควรใช้FragmentContainerView
เป็นคอนเทนเนอร์สำหรับ Fragment ในเลย์เอาต์เสมอ (#146, b/181137036)detectRetainInstanceUsage()
จะตรวจจับเมื่อคุณใช้ APIsetRetainInstance()
หรือgetRetainInstance()
ที่เลิกใช้งานแล้ว (#140, b/153737954)detectSetUserVisibleHint()
จะตรวจหาเมื่อคุณใช้ APIsetUserVisibleHint()
ที่เลิกใช้งานแล้ว (#136, b/153738974)detectTargetFragmentUsage()
จะตรวจจับเมื่อคุณใช้ APIsetTargetFragment()
,getTargetFragment()
หรือgetTargetRequestCode()
ที่เลิกใช้งานแล้ว (#139, b/153737745)
การเปลี่ยนแปลง API
- เราได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)
ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน (I90036, b/162776418) FragmentScenario
ได้ติดตั้งใช้งานCloseable
แล้ว ซึ่งช่วยให้คุณใช้ได้กับเมธอดuse
ของ Kotlin หรือ try-with-resources (#121, b/143774122)
การตรวจสอบ Lint ใหม่
UseGetLayoutInflater
การตรวจสอบ Lint จะแสดงคำเตือนเมื่อใช้LayoutInflater.from(Context)
ภายในDialogFragment
- คุณควรใช้วิธีgetLayoutInflater()
ของ DialogFragment เสมอเพื่อให้ได้LayoutInflater
ที่เหมาะสม (#156, b/170781346)DialogFragmentCallbacksDetector
การตรวจสอบ Lint จะแจ้งเตือนเมื่อเรียกใช้setOnCancelListener
หรือsetOnDismissListener
ในเมธอดonCreateDialog()
ของDialogFragment
ซึ่งเป็นเจ้าของ Listener เหล่านี้ และคุณควรลบล้างonCancel()
และonDismiss()
เพื่อรับการเรียกกลับเหล่านี้DialogFragment
(#171, b/181780047, b/187524311)
การแก้ไขข้อบกพร่อง
- จาก Fragment 1.3.4: แก้ไขการถดถอยที่เกิดขึ้นใน Fragment
1.3.3
เมื่อใช้ViewTreeViewModelStoreOwner.get()
API กับViewModelProvider
หรือเมธอด Jetpack Compose ของviewModel()
ภายใน Fragment ตอนนี้ Use Case เหล่านี้ใช้ViewModelProvider.Factory
ที่ Fragment ของคุณระบุอย่างถูกต้องหากมีการลบล้างgetDefaultViewModelProviderFactory()
(เช่นเดียวกับที่ Fragment ที่มีคำอธิบายประกอบ@AndroidEntryPoint
ทำเมื่อใช้ Hilt) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้างSavedStateViewModelFactory
ที่บันทึกและกู้คืนสถานะควบคู่ไปกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368) - จาก Fragment 1.3.4: เมื่อใช้
FragmentContainerView
ใน API 29 ระบบจะไม่ส่ง Inset อย่างไม่มีกำหนดอีกต่อไป ซึ่งจะแก้ไขปัญหาเกี่ยวกับอินสแตนซ์BottomNavigationBar
และFloatingActionButton
(I1bb78, b/186012452) - จาก Fragment 1.3.4: ตอนนี้คุณสามารถดึงข้อมูล Parcelable จากผลลัพธ์ของ Fragment bundle ได้หลังจากกระบวนการสิ้นสุดลง (I65932, b/187443158)
- จาก Fragment 1.3.4: เมื่อทำการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันใน ViewGroup หาก ViewGroup มี
transitionGroup
ตั้งค่าเป็น false ตอนนี้จะเปลี่ยนอย่างถูกต้องแล้ว (I99675)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ simonschiller ที่ทำให้
FragmentScenario
นำCloseable
ไปใช้ (#121, b/143774122) - ขอขอบคุณ simonschiller ที่เพิ่ม API ของ
FragmentStrictMode
ทั้งหมดสำหรับการเปิดตัวนี้ (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - ขอขอบคุณ tatocaster ที่เพิ่ม
UseGetLayoutInflater
การตรวจสอบ Lint (#156, b/170781346) - ขอขอบคุณ tatocaster ที่เพิ่ม
DialogFragmentCallbacksDetector
การตรวจสอบ Lint (#171, b/181780047)
เวอร์ชัน 1.3
เวอร์ชัน 1.3.6
21 กรกฎาคม 2021
androidx.fragment:fragment:1.3.6
androidx.fragment:fragment-ktx:1.3.6
และ androidx.fragment:fragment-testing:1.3.6
ออกอากาศแล้ว เวอร์ชัน 1.3.6 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.4.0-alpha03
:FragmentManager
จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายามซ่อน Fragment ที่นำออก (I573dd, b/183634730) - ตอนนี้ระบบจะตั้งค่ามุมมองของ Fragment เป็น
GONE
อย่างถูกต้องเมื่อใช้hide()
เมื่อมุมมองรูทมีการตั้งค่าtransitionGroup=”true”
(aosp/1766655, b/193603427) - ตอนนี้
FragmentActivity
จะปลดล็อกสถานะที่บันทึกไว้เสมอ เป็นการดำเนินการแรกในวงจร การเรียกกลับของวงจรที่แทนที่ (I6db7a)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.3.6
: ตอนนี้ Fragment ขึ้นอยู่กับ Activity1.2.4
(I3a66c)
เวอร์ชัน 1.3.5
16 มิถุนายน 2021
androidx.fragment:fragment:1.3.5
androidx.fragment:fragment-ktx:1.3.5
และ androidx.fragment:fragment-testing:1.3.5
ออกอากาศแล้ว เวอร์ชัน 1.3.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบแบบใช้ร่วมกันที่เปิดตัวใน Fragment
1.3.4
โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนฉากได้อย่างถูกต้องแล้ว (ทั้งที่ตั้งค่าโดยตรงผ่านtransitionGroup="true"
หรือโดยอ้อมผ่านtransitionName
หรือbackground
) และ องค์ประกอบที่ใช้ร่วมกันจะไม่แสดงIndexOutOfBoundsException
อีกต่อไป (I16484, b/188679569, b/188969304)
เวอร์ชัน 1.3.4
18 พฤษภาคม 2021
androidx.fragment:fragment:1.3.4
androidx.fragment:fragment-ktx:1.3.4
และ androidx.fragment:fragment-testing:1.3.4
ออกอากาศแล้ว เวอร์ชัน 1.3.4 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดขึ้นใน Fragment
1.3.3
เมื่อใช้ViewTreeViewModelStoreOwner.get()
API กับViewModelProvider
หรือเมธอด Jetpack Compose ของviewModel()
ภายใน Fragment เมื่อใช้ Hilt ตอนนี้ Use Case เหล่านี้ใช้ViewModelProvider.Factory
ที่ Fragment ระบุอย่างถูกต้องหากมีการลบล้างgetDefaultViewModelProviderFactory()
(เช่นเดียวกับที่ Fragment ที่มีคำอธิบายประกอบ@AndroidEntryPoint
ทำ) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้างSavedStateViewModelFactory
ที่บันทึกและกู้คืนสถานะควบคู่ไปกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368) - เมื่อใช้
FragmentContainerView
ใน API 29 การแทรกจะไม่ส่งต่อไปเรื่อยๆ อีกต่อไป ซึ่งจะช่วยแก้ไขปัญหาเกี่ยวกับอินสแตนซ์BottomNavigationBar
และFloatingActionButton
(I1bb78, b/186012452) - ตอนนี้คุณสามารถดึงข้อมูล Parcelable จากผลลัพธ์ของ Fragment ใน Bundle หลังจากกระบวนการสิ้นสุดลงได้แล้ว (I65932, b/187443158)
- เมื่อทำการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันใน ViewGroup หากตั้งค่า
transitionGroup
เป็น false ตอนนี้จะเปลี่ยนอย่างถูกต้องแล้ว (I99675)
เวอร์ชัน 1.3.3
21 เมษายน 2021
androidx.fragment:fragment:1.3.3
androidx.fragment:fragment-ktx:1.3.3
และ androidx.fragment:fragment-testing:1.3.3
ออกอากาศแล้ว เวอร์ชัน 1.3.3 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
SavedStateViewModelFactory
ทำงานได้แล้ว เมื่อใช้กับSavedStateRegistryOwner
ที่ส่งคืนโดย ใช้ViewTreeSavedStateRegistryOwner.get()
กับ มุมมองของ Fragment (I21acf, b/181577191)
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดขึ้นใน Fragment
1.3.2
ซึ่งจะทำให้ภาพเคลื่อนไหวpopEnter
ไม่ทำงานเมื่อแสดงFragmentTransaction
ที่มีการดำเนินการsetPrimaryNavFragment
เช่น การดำเนินการที่ใช้โดยNavHostFragment
(I38c87, b/183877426) FragmentContainerView
ตอนนี้จะช่วยให้มั่นใจได้ว่าFragment
ทุกรายการจะได้รับชุดใหม่ของWindowInsets
ซึ่งทำให้ตอนนี้แต่ละ Fragment สามารถใช้ Inset ได้อย่างอิสระ (I63f68, b/172153900)DialogFragment
ตอนนี้จัดการกรณีที่มีการเพิ่ม Fragment ของบุตรไปยังคอนเทนเนอร์ที่มีรหัสเดียวกับคอนเทนเนอร์ในคลาสDialog
ที่กำหนดเองได้อย่างถูกต้องแล้ว ซึ่งจะช่วยแก้ไขปัญหาลำดับชั้นของมุมมองเมื่อนำรหัสที่ใช้ภายในโดยกล่องโต้ตอบ เช่นBottomSheetDialog
กลับมาใช้ใหม่ (Ie6279, b/180021387)FragmentManager.dump()
ตอนนี้จะเยื้องส่วนแรกในรายการส่วนที่ใช้งานอยู่อย่างถูกต้องแล้ว (If5c33, b/183705451)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- ตอนนี้ตัวจัดการสถานะ Fragment ใหม่จะจัดการการเปลี่ยน ผ่านการดำเนินการซ่อนได้อย่างถูกต้อง (I9e4de, b/184830265)
เวอร์ชัน 1.3.2
24 มีนาคม 2021
androidx.fragment:fragment:1.3.2
androidx.fragment:fragment-ktx:1.3.2
และ androidx.fragment:fragment-testing:1.3.2
ออกอากาศแล้ว เวอร์ชัน 1.3.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- เมื่อเรียกใช้ทั้งการดำเนินการ
popBackStack()
และcommit()
พร้อมกัน การดำเนินการสุดท้ายจะกำหนดทิศทางสำหรับการเคลื่อนไหวทั้งหมด แทนที่จะเรียกใช้ภาพเคลื่อนไหวป๊อปอัปบางรายการและภาพเคลื่อนไหวเข้า บางรายการ (I7072e, b/181142246) - การดูภายในลำดับชั้นขององค์ประกอบที่ใช้ร่วมกันจะไม่ล้างชื่อการเปลี่ยนภาพอีกต่อไป เมื่อทำการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกัน (I4d4a6, b/179934757)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.2.2 ซึ่งแก้ไขปัญหาเกี่ยวกับการตรวจสอบ Lint ของ
InvalidFragmentVersionForActivityResult
Activity เมื่อใช้ Fragment 1.3.1 ขึ้นไป - ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.3.1 แล้ว
เวอร์ชัน 1.3.1
10 มีนาคม 2021
androidx.fragment:fragment:1.3.1
androidx.fragment:fragment-ktx:1.3.1
และ androidx.fragment:fragment-testing:1.3.1
ออกอากาศแล้ว เวอร์ชัน 1.3.1 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้กล่องโต้ตอบภายใน
DialogFragment
สามารถเข้าถึง ViewTree owners ผ่าน DecorView เพื่อให้มั่นใจว่าสามารถใช้DialogFragment
กับComposeView
ได้ (Ib9290, b/180691023)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะแสดง Fragment ที่ขยายเป็นกิจกรรม
RESUMED
ที่มีอยู่แล้วโดยใช้ FragmentContainerView อย่างถูกต้องหลังจากมีการเปลี่ยนแปลงการกำหนดค่า (Ie14c8, b/180538371) - ไม่มี
}
ที่ส่วนท้ายของส่วนย่อยtoString()
อีกต่อไป (I54705, b/177761088) - ตอนนี้เมธอดที่ลบล้างใน FragmentActivity จะรับช่วง เอกสารประกอบ Java ของเมธอดพื้นฐานอย่างถูกต้อง (I736ce, b/139548782)
- เอกสารสำหรับ
setFragmentResult
และsetFragmentResultListener
ได้อัปเดตเอกสารพารามิเตอร์เพื่อแสดงให้เห็นว่าระบบไม่รับค่า Null อีกต่อไป (I990ba, b/178348386)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- แก้ไขปัญหาหน่วยความจำรั่วไหลใน Fragment ที่เกิดจาก
mFocusedView
(Ib4e9e, b/179925887) - ตอนนี้ Fragment จะเรียกใช้
onCreateOptionsMenu
อย่างถูกต้องเมื่อใช้ ธุรกรรมการแสดง/ซ่อน (I8bce8, b/180255554) - ตอนนี้ Fragment ย่อยที่มีการเปลี่ยนฉากซึ่งเริ่มก่อนที่ Fragment จะได้รับการจัดวางจะเข้าถึง
RESUMED
(Ic11e6, b/180825150) ได้อย่างถูกต้อง - ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก
<fragment>
จะไปถึงRESUMED
เสมอ (I452ac, (I9fa49)
การอัปเดตการขึ้นต่อกัน
- Fragment 1.3.1 ขึ้นอยู่กับ Activity
1.2.1
(I557b9)
เวอร์ชัน 1.3.0
10 กุมภาพันธ์ 2021
androidx.fragment:fragment:1.3.0
androidx.fragment:fragment-ktx:1.3.0
และ androidx.fragment:fragment-testing:1.3.0
ออกอากาศแล้ว เวอร์ชัน 1.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.2.0
- State Manager ใหม่: การเขียนใหม่ภายในที่สำคัญของ
FragmentManager
ได้แก้ไขปัญหามากมายเกี่ยวกับการเรียกใช้เหตุการณ์วงจรการใช้งาน ภาพเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการกับ Fragment ที่เลื่อนออกไป การผสานรวม Activity Result API: เพิ่มการรองรับ API
ActivityResultRegistry
ที่เปิดตัวใน Activity1.2.0
เพื่อจัดการstartActivityForResult()
+onActivityResult()
รวมถึงโฟลว์requestPermissions()
+onRequestPermissionsResult()
โดยไม่ต้องแทนที่เมธอดใน Fragment นอกเหนือจากการให้ Hook สำหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว- การเปิดตัวนี้แก้ไขปัญหาหลายอย่างเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ Activity Result API ใช้งานไม่ได้ใน
FragmentActivity
เวอร์ชันก่อนหน้า คุณต้องอัปเกรดเป็น Fragment 1.3.0 เพื่อใช้ Activity Result API ในFragmentActivity
หรือAppCompatActivity
- การเปิดตัวนี้แก้ไขปัญหาหลายอย่างเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ Activity Result API ใช้งานไม่ได้ใน
Fragment Result API: เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน
FragmentManager
ซึ่งใช้ได้กับส่วนลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ในการนำทาง และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะSTARTED
เป็นอย่างน้อย เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้วเพื่อรองรับ API ใหม่เหล่านี้ ดูหัวข้อรับผลลัพธ์โดยใช้ Fragment Result APIFragmentOnAttachListener
: เราเลิกใช้งานการเรียกกลับonAttachFragment()
ในFragmentActivity
และFragment
แล้ว เราได้เพิ่มFragmentOnAttachListener
ใหม่เพื่อเป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์onAttachFragment()
ให้กับ Listener ที่แยกต่างหากและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ไปยัง FragmentManager อื่นๆ นอกเหนือจาก FragmentManager ขององค์ประกอบย่อยโดยตรงFragmentScenario
การปรับปรุง: คลาสFragmentScenario
จากอาร์ติแฟกต์fragment-testing
ได้รับการเขียนใหม่ใน Kotlin และได้รับการปรับปรุงหลายอย่าง ดังนี้FragmentScenario
ใช้setMaxLifecycle()
เพื่อใช้moveToState()
ซึ่งช่วยให้มั่นใจได้ถึงลักษณะการทำงานที่สอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐานFragmentScenario
ตอนนี้รองรับการตั้งค่าLifecycle.State
เริ่มต้นเพื่อรองรับการยืนยันสถานะของ Fragment ก่อนที่จะย้ายไปยังLifecycle.State
แต่ละรายการเป็นครั้งแรก- ตอนนี้มีทางเลือกอื่นแทน
FragmentScenario
API ของ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
ภายในFragment
TRANSIT_
การเปลี่ยนแปลงภาพเคลื่อนไหว: ตอนนี้เอฟเฟกต์เริ่มต้นของ Fragment,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
จะใช้Animator
แทนAnimation
ตอนนี้ทรัพยากรที่ใช้สร้างภาพเคลื่อนไหวเหล่านี้เป็นแบบส่วนตัวแล้วการเลิกใช้งาน
setRetainInstance()
: เราเลิกใช้งานเมธอดsetRetainInstance()
ใน Fragment แล้ว เมื่อเปิดตัว ViewModels นักพัฒนาซอฟต์แวร์จะมี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่ใช่ Fragment ที่เก็บไว้ และแยกสถานะที่ต้องการเก็บไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหล ขณะเดียวกันก็ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและทำลายสถานะที่เก็บไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของViewModel
และการเรียกกลับonCleared()
ที่ได้รับ)การเลิกใช้งานอะแดปเตอร์ ViewPager 1: เมื่อเปิดตัว ViewPager2
1.0.0
คลาสFragmentPagerAdapter
และFragmentStatePagerAdapter
สำหรับการโต้ตอบกับViewPager
จึงถูกเลิกใช้งาน ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2
เวอร์ชัน 1.3.0-rc02
27 มกราคม 2021
androidx.fragment:fragment:1.3.0-rc02
androidx.fragment:fragment-ktx:1.3.0-rc02
และ androidx.fragment:fragment-testing:1.3.0-rc02
ออกอากาศแล้ว เวอร์ชัน 1.3.0-rc02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
DialogFragment
กล่องโต้ตอบหลักDialogFragment
จะปรากฏเหนือDialogFragment
กล่องโต้ตอบย่อยDialogFragment
หลังจากเปลี่ยนการกำหนดค่า ตอนนี้กล่องโต้ตอบย่อยจะปรากฏเหนือกล่องโต้ตอบหลักเสมอ (I30806, b/177439520) - แก้ไขปัญหาที่การดำเนินการ
hide
ด้วยAnimation
จะทำให้เศษซ่อนกะพริบที่ส่วนท้ายของภาพเคลื่อนไหว (I57e22, b/175417675) - ตอนนี้ Fragment ที่มีการเปลี่ยนฉากซึ่งเพิ่มก่อนที่จะแนบลำดับชั้นของ View จะเข้าถึง
RESUMED
ได้อย่างถูกต้อง (I1fc1d, b/177154873)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- ตอนนี้มุมมองของ Fragment
Lifecycle
จะจัดการกรณีที่มุมมองของ Fragment ถูกทำลายก่อนที่Lifecycle
จะไปถึงCREATED
ได้อย่างถูกต้องแล้ว ซึ่งจะหลีกเลี่ยงข้อยกเว้นที่ระบุว่า "ไม่มีเหตุการณ์จาก INITIALIZED" (eda2bd, b/176138645) - ตอนนี้ Fragment ที่ใช้
Animator
จะปรากฏตามลำดับที่ถูกต้องเมื่อใช้FragmentContainerView
(Id9aa3, b/176089197)
เวอร์ชัน 1.3.0-rc01
16 ธันวาคม 2020
androidx.fragment:fragment:1.3.0-rc01
androidx.fragment:fragment-ktx:1.3.0-rc01
และ androidx.fragment:fragment-testing:1.3.0-rc01
ออกอากาศแล้ว เวอร์ชัน 1.3.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
onPrepareOptionsMenu()
จะใช้ตรรกะเดียวกันกับonCreateOptionsMenu()
และจะไม่เรียกใช้เมื่อ Fragment หลัก เรียกใช้setMenuVisibility(false)
อีกต่อไป (Id7de8, b/173203654)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- แก้ไขการรั่วไหลและอาร์ติแฟกต์ภาพเมื่อเพิ่ม
Fragment ที่มี
Animation
ลงในFragmentContainerView
แล้วขัดจังหวะการเพิ่มนั้นด้วยการดำเนินการป๊อป (I952d8) - แก้ไขปัญหาที่มุมมองของ Fragment จะ
ยังคงอยู่ในลำดับชั้นของมุมมองหากมีการแทนที่ในระหว่างเมธอด
onCreate()
หรือonViewCreated()
(I8a7d5) - ตอนนี้ระบบจะคืนค่าโฟกัสไปยังมุมมองรากของ Fragment อย่างถูกต้องเมื่อมีการกลับมาทำงานต่อ (Ifc84b)
- การรวมการดำเนินการป๊อปและการแทนที่ในธุรกรรมของ Fragment เดียวกันจะแสดงภาพเคลื่อนไหวที่เหมาะสม (Ifd4e4, b/170328691)
เวอร์ชัน 1.3.0-beta02
2 ธันวาคม 2020
androidx.fragment:fragment:1.3.0-beta02
androidx.fragment:fragment-ktx:1.3.0-beta02
และ androidx.fragment:fragment-testing:1.3.0-beta02
ออกอากาศแล้ว เวอร์ชัน 1.3.0-beta02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentScenario
ได้รับการแปลงเป็น Kotlin อย่างสมบูรณ์แล้วในขณะที่ยังคงความเข้ากันได้ของแหล่งที่มาและไบนารีผ่านการใช้อินเทอร์เฟซฟังก์ชันของ Kotlin 1.4 สำหรับFragmentAction
(I19d31)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้คุณสามารถใช้ FragmentContainerView ที่ไม่ได้ขยาย Fragment โดยใช้แอตทริบิวต์
class
หรือandroid:name
นอกFragmentActivity
ได้แล้ว (Id4397, b/172266337) - ตอนนี้การพยายามตั้งค่าวงจรสูงสุดของ Fragment เป็น
DESTROYED
จะทำให้เกิดIllegalArgumentException
(Ie7651, b/170765622) - ตอนนี้การเริ่มต้น FragmentScenario ด้วย
DESTROYED
state จะทำให้เกิดIllegalArgumentException
(I73590, b/170765622)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- แก้ไขปัญหาที่มุมมองจะไม่ถึงสถานะสุดท้ายหากคุณขัดจังหวะการเปลี่ยน Fragment ที่ใช้
Animator
หรือตัวเลือกใดตัวเลือกหนึ่งของTRANSIT_FRAGMENT_
(I92426, b/169874632) - แก้ไขปัญหาที่ทำให้ไม่สามารถทำลาย Fragment ที่มี
Animation
ออกอย่างถูกต้อง (I83d65) - ตอนนี้การออกจาก Fragment ที่มีการกลับเอฟเฟกต์จะ ยกเลิกและรีสตาร์ทอย่างถูกต้องด้วยเอฟเฟกต์การเข้าที่เหมาะสม (I62226, b/167092035)
- แก้ไขปัญหาที่การออก
Animator
จากhide()
ไม่ทำงาน (Id7ffe) - ตอนนี้ Fragment จะปรากฏอย่างถูกต้องเมื่อเลื่อนออกไปแล้วเริ่มทันที (Ie713b, b/170022857)
- Fragment ที่นำมุมมองที่โฟกัสออกในระหว่างภาพเคลื่อนไหวจะไม่พยายามกู้คืนโฟกัสในมุมมองที่แยกออกมาอีกต่อไปเมื่อถึง
RESUMED
(I38c65, b/172925703)
การมีส่วนร่วมภายนอก
FragmentFactory
จะแคชคลาสของ Fragment แยกกันสำหรับอินสแตนซ์ClassLoader
ที่แตกต่างกัน ขอขอบคุณ Simon Schiller (#87, b/113886460)
เวอร์ชัน 1.3.0-beta01
1 ตุลาคม 2020
androidx.fragment:fragment:1.3.0-beta01
androidx.fragment:fragment-ktx:1.3.0-beta01
และ androidx.fragment:fragment-testing:1.3.0-beta01
ออกอากาศแล้ว เวอร์ชัน 1.3.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
setMaxLifecycle()
ตอนนี้รองรับการตั้งค่าสถานะLifecycle
เป็นINITIALIZING
ตราบใดที่ยังไม่ได้ย้ายชิ้นส่วนไปยังCREATED
(b/159662173)
การเปลี่ยนแปลง API
- อัปเกรด androidx เพื่อใช้ Kotlin 1.4 (Id6471, b/165307851, b/165300826)
การเปลี่ยนแปลงลักษณะการทำงาน
- ไฟล์ทรัพยากรของ Fragment ได้รับการตั้งค่าเป็นส่วนตัวอย่างถูกต้อง (aosp/1425237)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก
<fragment>
จะรอจนกว่าจะมีการเพิ่มมุมมองลงในคอนเทนเนอร์อย่างถูกต้อง ก่อนที่จะเปลี่ยนเป็น STARTED (I02f4c) - ตอนนี้ Fragment ที่มองเห็นได้และจากนั้น
setMaxLifecycle()
ไปCREATED
จะเรียกใช้เอฟเฟกต์การออกได้อย่างถูกต้องแล้ว (b/165822335) - การนำ Fragment ที่แยกออกมาซึ่งไม่ได้เพิ่มลงใน Back Stack จะไม่ทำให้เกิดหน่วยความจำรั่วอีกต่อไป ขอขอบคุณ Nicklas Ansman Giertz (b/166489383)
- ตอนนี้ Fragment ที่ใช้งานอยู่จะมี
FragmentManager
ที่ไม่ใช่ Null เสมอ และ Fragment ที่มีFragmentManager
ที่ไม่ใช่ Null จะถือว่าใช้งานอยู่เสมอ (aosp/1422346) - ตอนนี้เอฟเฟกต์เริ่มต้นของส่วนย่อย
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
จะใช้Animator
แทนAnimation
(b/166155034)
การแก้ไขข้อบกพร่องใหม่ใน State Manager
- ตอนนี้ Fragment จะคืนค่าสถานะโฟกัสของมุมมองอย่างถูกต้องจาก ก่อนที่จะเริ่มภาพเคลื่อนไหว (Icc256)
- ตอนนี้ Fragment ที่มีการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันเท่านั้นจะ แสดงเอฟเฟกต์พิเศษได้อย่างสมบูรณ์ ซึ่งหมายความว่า Fragment จะย้ายไปยัง สถานะสุดท้ายจริงๆ (Iaebc7, b/166658128)
- ตอนนี้ระบบจะนำมุมมอง Fragment ออกจากคอนเทนเนอร์ ก่อนที่จะทำลายเสมอ (Id5876)
- ตอนนี้ตัวจัดการสถานะใหม่จะนำมุมมอง Fragment ที่ออกไปออกอย่างสม่ำเสมอก่อนที่จะเพิ่มมุมมอง Fragment ที่เข้ามา (I41a6e)
- ตอนนี้ตัวจัดการสถานะใหม่จะพิจารณาการเปลี่ยนแปลงที่ชัดเจนในระดับการเข้าถึงของมุมมอง Fragment ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของ Fragment ที่เข้าเป็น
INVISIBLE
ก่อนที่ภาพเคลื่อนไหวจะเริ่ม มุมมองนั้นจะยังคงมองไม่เห็น (b/164481490) - ตอนนี้ Fragment จะให้ความสำคัญกับ
Animators
มากกว่าAnimations
ซึ่งหมายความว่า Fragment ที่มีทั้ง 2 อย่างจะเรียกใช้เฉพาะAnimator
และไม่สนใจAnimation
(b/167579557) - ตัวจัดการสถานะใหม่จะไม่ทำให้ Fragment กะพริบเมื่อใช้ภาพเคลื่อนไหวตอนเข้าอีกต่อไป (b/163084315)
ปัญหาที่ทราบ
เมื่อใช้เครื่องมือจัดการสถานะใหม่ หากคุณกดกลับขณะที่กำลังป้อนเอฟเฟกต์พิเศษแทนที่จะกลับไปยัง Fragment ก่อนหน้า ระบบจะไม่เพิ่ม Fragment เก่าอีกเลย ซึ่งจะส่งผลให้หน้าจอว่างเปล่า (b/167259187, b/167092035, b/168442830)
เวอร์ชัน 1.3.0-alpha08
19 สิงหาคม 2020
androidx.fragment:fragment:1.3.0-alpha08
androidx.fragment:fragment-ktx:1.3.0-alpha08
และ androidx.fragment:fragment-testing:1.3.0-alpha08
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha08 มีคอมมิตต่อไปนี้
New State Manager
การเผยแพร่นี้รวมถึงการปรับโครงสร้างครั้งใหญ่ของการจัดการสถานะภายในของ FragmentManager
ซึ่งส่งผลต่อการเรียกใช้เมธอดวงจร การเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการธุรกรรมที่เลื่อนออกไป ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่บล็อกโพสต์ "Fragments: Rebuilding the Internals" (b/139536619, b/147749580)
- คุณใช้ API experimental ใน
FragmentManager.enableNewStateManager(boolean)
เพื่อควบคุมว่า FragmentManager จะใช้เครื่องมือจัดการสถานะใหม่หรือไม่ (I7b6ee)
ปัญหาต่อไปนี้จะได้รับการแก้ไขเมื่อใช้เครื่องมือจัดการสถานะใหม่เท่านั้น
- ตอนนี้ระบบจะหยุดส่วนก่อนหน้าของ
replace
การดำเนินการอย่างถูกต้องก่อนที่จะเริ่มส่วนใหม่ (b/161654580) - ตอนนี้ Fragment จะป้องกันไม่ให้แอนิเมชันหลายรายการแข่งขันกันใน Fragment เดียวกัน เพื่อหลีกเลี่ยงกรณีที่
Animation
จะลบล้างเอฟเฟกต์Transition
ทั้งหมด หรือกรณีที่Animator
และTransition
ใน Fragment เดียวจะทำงานพร้อมกัน (b/149569323) - ตอนนี้ระบบจะเรียกใช้
enterTransition
และexitTranstion
ของทุกส่วนที่เข้าและออก แทนที่จะเรียกใช้เฉพาะส่วนที่เข้าล่าสุดและส่วนที่ออกแรก (b/149344150) - ตอนนี้ส่วนย่อยที่เลื่อนออกไปจะไม่ติดอยู่ที่สถานะ
CREATED
อีกต่อไป แต่จะย้ายไปที่STARTED
พร้อมกับส่วนย่อยอื่นๆ แทน (b/129035555) - แก้ไขปัญหาที่
FragmentManager
จะดำเนินการตามลำดับไม่ถูกต้องเมื่อรวมธุรกรรมที่เลื่อนการเรียงลำดับใหม่กับธุรกรรมที่ไม่ได้เรียงลำดับใหม่ (b/147297731) - การป๊อปหลายๆ Fragment พร้อมกันจะไม่ทำให้ Fragment ระดับกลางปรากฏชั่วคราวเมื่อเลื่อน Fragment อีกต่อไป (b/37140383)
FragmentManager
จะแสดงผลข้อมูลที่ถูกต้องเมื่อเรียกใช้findFragmentById()
หรือfindFragmentByTag()
จากภายในแฮนเดิลonAttachFragment()
(b/153082833)- ตอนนี้ Fragment จะไม่เรียกใช้
onCreateView()
ใน Fragment ที่กำลังถูกทำลายเมื่อมีการเลื่อนเวลาการแทนที่ Fragment (b/143915710) - ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อพยายามรวมอินสแตนซ์ของเฟรมเวิร์ก
Transition
และ AndroidXTransition
จะกล่าวถึง Fragment ที่มีการเปลี่ยนที่ไม่ถูกต้อง (b/155574969)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้คุณสามารถโทรหา
launch()
ในActivityResultLauncher
ในเมธอดวงจรonCreate()
ของ Fragment ได้แล้ว (b/161464278) - ตอนนี้การเรียกใช้
registerForActivityResult()
หลังจากonCreate()
จะทำให้เกิดข้อยกเว้นที่ระบุว่าไม่อนุญาตให้ดำเนินการนี้ แทนที่จะไม่แสดงผลลัพธ์อย่างเงียบๆ หลังจากเปลี่ยนการกำหนดค่า (b/162255449) FragmentActivity
ใช้OnContextAvailableListener
API ที่เปิดตัวใน Activity1.2.0-alpha08
เพื่อคืนค่าสถานะของFragmentManager
Listener ที่เพิ่มลงในคลาสย่อยของFragmentActivity
จะทำงานหลังจาก Listener นี้ (I513da)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะพิจารณา
ActivityOptions
ที่ส่งผ่านเมื่อใช้startIntentSenderForResult()
แล้ว (b/162247961)
ปัญหาที่ทราบ
- เมื่อใช้เครื่องมือจัดการสถานะใหม่ การตั้งค่าระดับการมองเห็นของมุมมองรากของ Fragment โดยตรงหลังจาก
onViewCreated()
และก่อนonResume()
จะส่งผลให้FragmentManager
ซึ่งควบคุมระดับการมองเห็นของมุมมองรากจะลบล้างระดับการมองเห็นที่คุณตั้งค่าไว้ วิธีแก้ปัญหาชั่วคราวคือคุณควรใช้การดำเนินการhide()
และshow()
เสมอเพื่อเปลี่ยนระดับการเข้าถึงของ Fragment (b/164481490)
เวอร์ชัน 1.3.0-alpha07
22 กรกฎาคม 2020
androidx.fragment:fragment:1.3.0-alpha07
androidx.fragment:fragment-ktx:1.3.0-alpha07
และ androidx.fragment:fragment-testing:1.3.0-alpha07
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha07 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentScenario
รองรับการตั้งค่าสถานะวงจร เริ่มต้นเป็นCREATED
,STARTED
หรือRESUMED
แทนที่จะย้าย Fragment ไปยังสถานะRESUMED
เสมอ (b/159662750)- เพิ่มทางเลือกแทน
FragmentScenario
API ของonFragment
ในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ KotlinwithFragment
ซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันนี้จะส่งต่อข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุ (b/158697631)
การเปลี่ยนแปลงลักษณะการทำงาน
FragmentScenario
ใช้setMaxLifecycle()
เพื่อใช้moveToState()
ซึ่งช่วยให้มั่นใจได้ถึงลักษณะการทำงานที่สอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐาน (b/156527405)SavedStateRegistryOwner
ที่ViewTreeSavedStateRegistryOwner
แสดงผลจะเชื่อมโยงกับวงจรของมุมมอง Fragment แล้ว ซึ่งช่วยให้มั่นใจได้ว่าระบบจะบันทึกและกู้คืนสถานะของ Fragment พร้อมกับมุมมองของ Fragment (b/158503763)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment จะรอให้มุมมองของ Fragment แนบก่อนที่จะเรียก
ViewCompat.requestApplyInsets()
เพื่อหลีกเลี่ยงกรณีที่คำขอแทรกถูกทิ้ง (b/158095749) - การเรียก
clearFragmentResultListener
จะล้าง เครื่องสังเกตวงจรของออบเจ็กต์ได้อย่างถูกต้องแล้ว (b/159274993)
เวอร์ชัน 1.3.0-alpha06
10 มิถุนายน 2020
androidx.fragment:fragment:1.3.0-alpha06
androidx.fragment:fragment-ktx:1.3.0-alpha06
และ androidx.fragment:fragment-testing:1.3.0-alpha06
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha06 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เราเลิกใช้งาน Callback
onAttachFragment()
ในFragmentActivity
และFragment
แล้ว เราได้เพิ่มFragmentOnAttachListener
ใหม่เพื่อ เป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์ ของonAttachFragment()
ให้กับ Listener ที่แยกต่างหากและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ไปยัง FragmentManager อื่นๆ นอกเหนือจาก FragmentManager ขององค์ประกอบย่อยโดยตรง (I06d3d)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment หลักจะมีการคืนค่าสถานะมุมมองก่อน Fragment ย่อย ซึ่งจะแก้ไขปัญหาการจัดลำดับภาพหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อ
DialogFragment
จะแสดงDialogFragment
อื่นเป็น Fragment ย่อย (b/157195715) - แก้ไขปัญหาที่
UseRequireInsteadOfGet
การตรวจสอบ Lint ไม่จัดการการใช้งานที่เชื่อมโยงของตัวดำเนินการ?.
และ!!
อย่างถูกต้อง (b/157677616)
เวอร์ชัน 1.3.0-alpha05
20 พฤษภาคม 2020
androidx.fragment:fragment:1.3.0-alpha05
androidx.fragment:fragment-ktx:1.3.0-alpha05
และ androidx.fragment:fragment-testing:1.3.0-alpha05
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha05 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ViewTreeViewModelStoreOwner
จาก Lifecycle2.3.0-alpha03
และViewTreeSavedStateRegistryOwner
จาก SavedState1.1.0-alpha01
เมื่อใช้View
ภายในFragment
(aosp/1297993, aosp/1300264)
การเปลี่ยนแปลง API
- ตอนนี้ API
setFragmentResult()
และsetFragmentResultListener()
จะใช้Bundle
และFragmentResultListener
ที่ไม่ใช่ค่าว่างตามลำดับ หากต้องการล้างผลลัพธ์หรือ Listener ที่ตั้งค่าไว้ก่อนหน้านี้อย่างชัดเจน ให้ใช้วิธีการใหม่clearFragmentResult()
และclearFragmentResultListener()
(b/155416778) - ตอนนี้เราได้ทำเครื่องหมายส่วนขยาย
setFragmentResultListener()
Kotlin ที่ใช้ Lambda เป็นinline
แล้ว (b/155323404)
การเปลี่ยนแปลงลักษณะการทำงาน
startActivityForResult()
,startIntentSenderForResult()
และrequestPermissions
ที่เลิกใช้งานไปก่อนหน้านี้ในFragment
จะใช้ActivityResultRegistry
ภายในแล้ว ซึ่งจะช่วยยกเลิกข้อจำกัดในการใช้เฉพาะบิตล่าง (ต่ำกว่า0xFFFF
) สำหรับรหัสคำขอเมื่อใช้ API เหล่านั้น (b/155518741)
การอัปเดตเอกสารประกอบ
- ขยายเอกสารประกอบเกี่ยวกับตัวสร้าง
Fragment(@LayoutRes int)
และDialogFragment(@LayoutRes int)
เพื่อชี้แจงว่าควรเรียกใช้จากตัวสร้างที่ไม่มีอาร์กิวเมนต์ของคลาสย่อยเมื่อใช้FragmentFactory
เริ่มต้น (b/153042497)
เวอร์ชัน 1.3.0-alpha04
29 เมษายน 2020
androidx.fragment:fragment:1.3.0-alpha04
androidx.fragment:fragment-ktx:1.3.0-alpha04
และ androidx.fragment:fragment-testing:1.3.0-alpha04
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha04 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน
FragmentManager
ซึ่งใช้ได้กับส่วนลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ในการนำทาง และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะSTARTED
เป็นอย่างน้อย (b/149787344)
การเปลี่ยนแปลง API
- เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้ว หากต้องการส่งข้อมูลระหว่าง Fragment คุณควรใช้ Fragment Result API ใหม่แทน (b/149787344)
- เราได้เลิกใช้งาน API
startActivityForResult()
/onActivityResult()
และrequestPermissions()
/onRequestPermissionsResult()
ใน Fragment แล้ว โปรดใช้ Activity Result API (aosp/1290887) - การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องจากกิจกรรม
1.2.0-alpha04
: เราได้เปลี่ยนชื่อเมธอดprepareCall()
เป็นregisterForActivityResult()
(aosp/1278717)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะหยุด
getViewLifecycleOwner()
ของ Fragment ก่อนที่จะเรียกใช้onSaveInstanceState()
ซึ่งเป็นการจำลองลักษณะการทำงานของวงจรของ Fragment (b/154645875) - การเรียกใช้
setMenuVisibility(false)
ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุได้อย่างถูกต้องแล้ว (b/153593580) - แก้ไข
illegalStateException
เมื่อเพิ่ม Fragment ลงในลำดับชั้นมุมมองของDialogFragment
ด้วยFragmentContainerView
(b/154366601) getDefaultViewModelProviderFactory()
ใน Fragment จะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์ Fragment นอกกิจกรรม (b/153762914)
เวอร์ชัน 1.3.0-alpha03
1 เมษายน 2020
androidx.fragment:fragment:1.3.0-alpha03
androidx.fragment:fragment-ktx:1.3.0-alpha03
และ androidx.fragment:fragment-testing:1.3.0-alpha03
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้
prepareCall
ในFragment
เป็นfinal
แล้ว (b/152439361)
การแก้ไขข้อบกพร่อง
- แก้ไขการเกิดปัญหาซ้ำที่เกิดขึ้นใน Fragment
1.3.0-alpha02
เมื่อใช้BottomSheetDialogFragment
(b/151652127, aosp/1263328, aosp/1265163) - แก้ไขข้อขัดข้องเมื่อใช้
prepareCall
จาก Fragment หลังจากมีการเปลี่ยนแปลงการกำหนดค่า (b/152137004) - แก้ไขปัญหาที่ระบบไม่สนใจการเปลี่ยนองค์ประกอบที่แชร์และการเปลี่ยนฉากขาออกเมื่อใช้
setTargetFragment()
(b/152023196) - จาก Fragment
1.2.4
: อัปเดตกฎ ProGuard ของ Fragment เพื่ออนุญาตการปกปิดโค้ดของ Fragment ที่เก็บไว้ (b/151605338) - จาก Fragment
1.2.4
: ปิดใช้FragmentLiveDataObserve
กฎ Lint ในคลาสDialogFragment
เนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ จึงทำให้ใช้this
หรือviewLifecycleOwner
ได้อย่างปลอดภัยเมื่อเรียกใช้observe
(b/151765086)
การเปลี่ยนแปลงการขึ้นต่อกัน
- Fragment ขึ้นอยู่กับ Activity
1.2.0-alpha03
ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result API ที่เปิดตัวใน Activity1.2.0-alpha02
เวอร์ชัน 1.3.0-alpha02
18 มีนาคม 2020
androidx.fragment:fragment:1.3.0-alpha02
androidx.fragment:fragment-ktx:1.3.0-alpha02
และ androidx.fragment:fragment-testing:1.3.0-alpha02
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ActivityResultRegistry
API ที่เปิดตัวใน 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
: แก้ไขผลบวกที่ผิดพลาดในการตรวจสอบUseRequireInsteadOfGet
Lint เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163) - จาก Fragment
1.2.3
:FragmentContainerView
จะไม่แสดงUnsupportedOperationException
อีกต่อไปเมื่อใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์ (b/149707833)
ปัญหาที่ทราบ
BottomSheetDialogFragment
ไม่สามารถวางตำแหน่งกล่องโต้ตอบบนหน้าจอได้อย่างถูกต้องอีกต่อไป (b/151652127)
เวอร์ชัน 1.3.0-alpha01
4 มีนาคม 2020
androidx.fragment:fragment:1.3.0-alpha01
androidx.fragment:fragment-ktx:1.3.0-alpha01
และ androidx.fragment:fragment-testing:1.3.0-alpha01
ออกอากาศแล้ว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ViewTreeLifecycleOwner.get(View)
API ที่เพิ่มใน 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
Lint check เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163) FragmentContainerView
จะไม่แสดงUnsupportedOperationException
สำหรับการใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์อีกต่อไป (b/149707833)
เวอร์ชัน 1.2.2
เวอร์ชัน 1.2.2
19 กุมภาพันธ์ 2020
androidx.fragment:fragment:1.2.2
androidx.fragment:fragment-ktx:1.2.2
และ androidx.fragment:fragment-testing:1.2.2
ออกอากาศแล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้
การตรวจสอบ Lint ใหม่
- Lint แนะนำให้ใช้
viewLifecycleOwner
เป็นLifecycleOwner
สำหรับการเรียกใช้ในOnBackPressedDispatcher
ในonCreateView()
,onViewCreated()
และonActivityCreated()
(b/142117657) - เพิ่มการตรวจสอบ Lint ใหม่ที่ยืนยันว่าคุณใช้
debugImplementation
ที่ถูกต้องเมื่อใช้ชิ้นงานfragment-testing
(b/141500106) - ตอนนี้ Fragment จะแนะนำให้ใช้เมธอด
require___()
ที่เชื่อมโยงเพื่อรับข้อความแสดงข้อผิดพลาดที่อธิบายได้ดีกว่าแทนcheckNotNull(get___())
,requireNonNull(get___())
หรือget___()!!
สำหรับ Fragment API ทั้งหมดที่มีทั้งget
และrequire
ที่เทียบเท่า (aosp/1202883)
การแก้ไขข้อบกพร่อง
- แก้ไขไฟล์ ProGuard ของ Fragment เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
- ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนําให้ใช้
viewLifecycleOwner
เมื่อใช้observe
เพื่อจัดการเวอร์ชันเมธอดส่วนขยายlivedata-ktx
ของobserve
ด้วย (b/148996309) - แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint หลายรายการ (aosp/1157012)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Zac Sweers ที่มีส่วนร่วมในการตรวจสอบ Lint ของ
require___()
ในนามของ Slack (aosp/1202883)
เวอร์ชัน 1.2.1
เวอร์ชัน 1.2.1
5 กุมภาพันธ์ 2020
androidx.fragment:fragment:1.2.1
androidx.fragment:fragment-ktx:1.2.1
และ androidx.fragment:fragment-testing:1.2.1
ออกอากาศแล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ ProGuard จะเก็บตัวสร้างเริ่มต้นของ Fragment ที่เพิ่มผ่านเมธอด
add
และreplace
ซึ่งใช้อินสแตนซ์Class
(หรือเวอร์ชัน Kotlin ที่ได้รับการทำให้เป็นจริง) ไว้ (b/148181315) FragmentStatePagerAdapter
และFragmentPagerAdapter
จะไม่ดักจับข้อยกเว้นที่FragmentManager
สร้างขึ้นเมื่อเรียกใช้finishUpdate()
อีกต่อไป (aosp/1208711)- แก้ไขปัญหาที่
FragmentManager.findFragment()
ไม่ทำงานกับส่วนที่เพิ่มผ่านแท็ก<fragment>
(b/147784323) - ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก
<fragment>
จะได้รับการเรียกไปยังonInflate()
ก่อนonCreate()
เสมอเมื่ออยู่ในเลย์เอาต์ (aosp/1215856) - การเรียกใช้
toString()
ในอินสแตนซ์FragmentManager
จะไม่ทำให้เกิดNullPointerException
อีกต่อไปเมื่อมีการทำลายกิจกรรมแล้ว (b/148189412)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Fragment
1.2.1
จะขึ้นอยู่กับ Lifecycle ViewModel SavedState2.2.0
เวอร์ชัน 1.2.0
เวอร์ชัน 1.2.0
22 มกราคม 2020
androidx.fragment:fragment:1.2.0
androidx.fragment:fragment-ktx:1.2.0
และ androidx.fragment:fragment-testing:1.2.0
ออกอากาศแล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.1.0
- FragmentContainerView:
FragmentContainerView
เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก ซึ่งจะแทนที่การใช้FrameLayout
หรือเลย์เอาต์อื่นๆ นอกจากนี้ยังรองรับclass
,android:name
และandroid:tag
(ไม่บังคับ) เดียวกันกับแท็ก<fragment>
แต่ใช้FragmentTransaction
ปกติเพื่อเพิ่มส่วนย่อยเริ่มต้นนี้แทนเส้นทางโค้ดที่กำหนดเองซึ่ง<fragment>
ใช้ onDestroyView()
เวลา: ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวขาออก การเปลี่ยนเฟรมเวิร์กขาออก และการเปลี่ยน AndroidX ขาออก (เมื่อใช้ Transition1.3.0
) เสร็จสมบูรณ์ก่อนที่จะเรียกใช้onDestroyView()
- อิงตามคลาส
add()
และreplace()
: เพิ่มการโอเวอร์โหลดใหม่ของadd()
และreplace()
ในFragmentTransaction
ที่ใช้Class<? extends Fragment>
และอาร์กิวเมนต์Bundle
ที่ไม่บังคับ วิธีการเหล่านี้ใช้FragmentFactory
เพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย - การผสานรวม ViewModel ของ Lifecycle กับ SavedState: ตอนนี้
SavedStateViewModelFactory
เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้by viewModels()
,by activityViewModels()
, ตัวสร้างViewModelProvider
หรือViewModelProviders.of()
กับ Fragment - การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
getFragmentManager()
การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดgetFragmentManager()
และrequireFragmentManager()
ใน Fragment แล้ว และแทนที่ด้วยเมธอดgetParentFragmentManager()
เมธอดเดียว ซึ่งจะแสดงผลFragmentManager
ที่ไม่ใช่ค่าว่างซึ่ง Fragment เพิ่มเข้าไป (คุณใช้isAdded()
เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่)FragmentManager.enableDebugLogging()
การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดแบบคงที่FragmentManager.enableDebugLogging
แล้ว ตอนนี้ FragmentManager จะใช้Log.isLoggable()
สำหรับแท็กFragmentManager
ซึ่งช่วยให้คุณเปิดใช้การบันทึกDEBUG
หรือVERBOSE
ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง
ปัญหาที่ทราบ
- ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์
class
หรือandroid:name
ในFragmentContainerView
โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎการเก็บรักษาสำหรับคลาส Fragment แต่ละคลาสด้วยตนเอง (b/142601969) - เมื่อเพิ่ม
NavHostFragment
โดยใช้class
หรือandroid:name
ใน XML ที่มีFragmentContainerView
คุณจะใช้findNavController()
ในonCreate()
ของกิจกรรมไม่ได้ (b/142847973)
เวอร์ชัน 1.2.0-rc05
8 มกราคม 2020
androidx.fragment:fragment:1.2.0-rc05
androidx.fragment:fragment-ktx:1.2.0-rc05
และ androidx.fragment:fragment-testing:1.2.0-rc05
ออกอากาศแล้ว เวอร์ชัน 1.2.0-rc05 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน Fragment
1.2.0-rc04
เมื่อใช้แท็ก<fragment>
ซึ่งทำให้มีการเรียกใช้onViewCreated()
อย่างไม่ถูกต้องในระหว่างการทำลายกิจกรรม (b/146290333) - ตอนนี้ระบบจะล้างข้อมูลที่ไม่สามารถกำหนดค่าได้ของ Fragment ที่เพิ่มด้วยแท็ก
<fragment>
อย่างถูกต้อง แม้ว่า Fragment จะอยู่ในเลย์เอาต์เป็นบางครั้งเท่านั้น (เช่น อยู่ในเลย์เอาต์แนวนอนเท่านั้น) ด้วยเหตุนี้ ตอนนี้ระบบจึงย้าย Fragment เหล่านี้ไปยังCREATED
อย่างถูกต้องแม้ว่าจะไม่ได้อยู่ในเลย์เอาต์ก็ตาม แทนที่จะสร้างอินสแตนซ์แต่ไม่เคยย้ายผ่านเมธอดวงจรใดๆ (b/145769287)
เวอร์ชัน 1.2.0-rc04
18 ธันวาคม 2019
androidx.fragment:fragment:1.2.0-rc04
androidx.fragment:fragment-ktx:1.2.0-rc04
และ androidx.fragment:fragment-testing:1.2.0-rc04
ออกอากาศแล้ว เวอร์ชัน 1.2.0-rc04 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ปรับภาพเคลื่อนไหวสำหรับ
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
เพื่อหลีกเลี่ยงปัญหาด้านภาพ (b/145468417)
เวอร์ชัน 1.2.0-rc03
4 ธันวาคม 2019
androidx.fragment:fragment:1.2.0-rc03
androidx.fragment:fragment-ktx:1.2.0-rc03
และ androidx.fragment:fragment-testing:1.2.0-rc03
ออกอากาศแล้ว เวอร์ชัน 1.2.0-rc03 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการเปลี่ยนแปลงลักษณะการทำงานโดยไม่ตั้งใจซึ่งทำให้
findFragmentById()
/findFragmentByTag()
ยังคงแสดงผล Fragment ที่ถูกนำออกไปแล้วในขณะที่ภาพเคลื่อนไหว/การเปลี่ยนฉากขาออกทำงานอยู่ (b/143982969, aosp/1167585) - ตอนนี้ระบบจะหยุด Child Fragment อย่างถูกต้องก่อน Parent Fragment เมื่อกิจกรรมที่มีอยู่เรียกใช้
onSaveInstanceState()
(b/144380645) - แก้ไขปัญหาที่ระบบทำเครื่องหมายว่าดูแล้ว
INVISIBLE
อย่างไม่ถูกต้องหลังจากแสดง Fragment ที่ซ่อนอยู่ (b/70793925) - ตอนนี้การเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันของ Fragment จะจัดการ View ที่หมุน ปรับขนาด ฯลฯ ได้แล้ว (b/142835261)
การอัปเดตเอกสารประกอบ
- ปรับปรุงเอกสารประกอบการเลิกใช้งานเกี่ยวกับ
setUserVisibleHint()
(b/143897055) - ปรับปรุงเอกสารประกอบเกี่ยวกับ
setFragmentFactory()
และgetFragmentFactory()
เพื่อระบุให้ดียิ่งขึ้นว่าการตั้งค่าFragmentFactory
จะส่งผลต่อ FragmentManager ของ Fragment ย่อยด้วย (aosp/1170095)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
และ Activity1.1.0-rc03
แล้ว
เวอร์ชัน 1.2.0-rc02
7 พฤศจิกายน 2019
androidx.fragment:fragment:1.2.0-rc02
androidx.fragment:fragment-ktx:1.2.0-rc02
และ androidx.fragment:fragment-testing:1.2.0-rc02
ออกอากาศแล้ว เวอร์ชัน 1.2.0-rc02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เมื่ออยู่ใน Kotlin ตอนนี้ LintFix สำหรับการใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(เปิดตัวใน Fragment1.2.0-rc01
) จะใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ KotlinviewLifecycleOwner
แทนgetViewLifecycleOwner()
(aosp/1143821)
เวอร์ชัน 1.2.0-rc01
23 ตุลาคม 2019
androidx.fragment:fragment:1.2.0-rc01
androidx.fragment:fragment-ktx:1.2.0-rc01
และ androidx.fragment:fragment-testing:1.2.0-rc01
ออกอากาศแล้ว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentContainerView
ตอนนี้รองรับแอตทริบิวต์class
นอกเหนือจากandroid:name
แล้ว ซึ่งเป็นการจำลองฟังก์ชันการทำงานของแท็ก<fragment>
(b/142722242)- เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(b/137122478)
แก้ไขข้อบกพร่อง
- ตอนนี้ Callback
onDismiss
และonCancel
ในDialogFragment
รับประกันว่าDialogInterface
ที่ส่งไปยัง Callback เหล่านี้จะไม่ใช่ค่า Null และgetDialog()
จะแสดงผลค่าที่ไม่ใช่ Null เมื่อมีการเรียกใช้ (b/141974033) FragmentContainerView
จะเพิ่ม Fragment ที่กำหนดโดยclass
หรือandroid:name
เป็นส่วนหนึ่งของการขยาย เพื่อให้มั่นใจว่าfindFragmentById()
และfindFragmentByTag()
จะทำงานได้ทันทีหลังจากนั้น (b/142520327)- แก้ไข
IllegalStateException
ในFragmentContainerView
เนื่องจากมีการบันทึกสถานะ (b/142580713) - แก้ไข
UnsupportedOperationException
ในFragmentContainerView
เมื่อมีการปกปิดโค้ดของคลาสFragmentContainerView
(b/142657034)
ปัญหาที่ทราบแล้ว
- ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์
class
หรือandroid:name
ในFragmentContainerView
โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎการเก็บรักษาสำหรับคลาส Fragment แต่ละคลาสด้วยตนเอง เราได้ปิดใช้กฎ Lint ที่แนะนำให้ย้ายไปใช้FragmentContainerView
จนกว่าปัญหานี้จะได้รับการแก้ไขผ่านaapt2
(b/142601969)
เวอร์ชัน 1.2.0-beta02
11 ตุลาคม 2019
androidx.fragment:fragment:1.2.0-beta02
androidx.fragment:fragment-ktx:1.2.0-beta02
และ androidx.fragment:fragment-testing:1.2.0-beta02
ออกอากาศแล้ว เวอร์ชัน 1.2.0-beta02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
onInflate()
ของ Fragment ไม่ได้รับแอตทริบิวต์ที่เหมาะสมจากFragmentContainerView
ซึ่งทำให้เกิดกรณีที่ใช้งานไม่ได้ เช่นNavHostFragment
(b/142421837)
เวอร์ชัน 1.2.0-beta01
9 ตุลาคม 2019
androidx.fragment:fragment:1.2.0-beta01
androidx.fragment:fragment-ktx:1.2.0-beta01
และ androidx.fragment:fragment-testing:1.2.0-beta01
ออกอากาศแล้ว เวอร์ชัน 1.2.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentContainerView
เพิ่มการรองรับการเพิ่ม Fragment เริ่มต้นพร้อมการรองรับเพิ่มเติมสำหรับแอตทริบิวต์ XMLandroid:name
และandroid:tag
ที่ไม่บังคับFragmentContainerView
ใช้FragmentTransaction
ปกติเบื้องหลังเพื่อเพิ่ม Fragment เริ่มต้น ซึ่งช่วยให้ดำเนินการFragmentTransaction
เพิ่มเติมในFragmentContainerView
ได้ และเปิดใช้การใช้ View Binding สำหรับเลย์เอาต์ ซึ่งแตกต่างจากแท็ก<fragment>
(b/139830628, b/141177981)- ตอนนี้ Fragment มีคำเตือนของ Lint ซึ่งเสนอวิธีแก้ไขด่วนเพื่อแทนที่
<fragment>
ด้วยFragmentContainerView
(b/139830056)
แก้ไขข้อบกพร่อง
- แก้ไข
ClassCastException
เมื่อใช้androidx.transition
(b/140680619) - เมื่อใช้ Transition
1.3.0-beta01
ตอนนี้ Fragment จะรอให้การเปลี่ยนandroidx.transition
เสร็จสิ้น (นอกเหนือจากการเปลี่ยนและภาพเคลื่อนไหวของเฟรมเวิร์ก ซึ่งได้รับการแก้ไขใน Fragment1.2.0-alpha03
และ Fragment1.2.0-alpha02
ตามลำดับ) ก่อนที่จะส่งonDestroyView()
(aosp/1119841) - เมื่อใช้ Transition
1.3.0-beta01
ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากandroidx.transition
อย่างถูกต้องก่อนที่จะเริ่มการเปลี่ยนฉาก / ภาพเคลื่อนไหวใหม่ในคอนเทนเนอร์เดียวกัน (aosp/1119841) - แก้ไขปัญหาใน API 17 และต่ำกว่าเมื่อใช้
androidx.transition
การเปลี่ยนฉากในมุมมองรากของ Fragment เมื่อใช้FragmentContainerView
(b/140361893) - ตอนนี้อาร์ติแฟกต์
fragment-testing
ขึ้นอยู่กับ AndroidX Test1.2.0
แล้ว ซึ่งแก้ไขปัญหาความไม่เข้ากันกับ Espresso 3.2.0 เวอร์ชันล่าสุด (b/139100149) - นำการใช้งาน
Log.w
ใน FragmentManager ออกแล้ว (aosp/1126468)
ปัญหาที่ทราบแล้ว
onInflate()
ของ Fragment ไม่ได้รับแอตทริบิวต์ที่เหมาะสมจากFragmentContainerView
ซึ่งทำให้เกิดกรณีที่ใช้งานไม่ได้ เช่นNavHostFragment
(b/142421837)
เวอร์ชัน 1.2.0-alpha04
18 กันยายน 2019
androidx.fragment:fragment:1.2.0-alpha04
androidx.fragment-ktx:example:1.2.0-alpha04
และ androidx.fragment:fragment-testing:1.2.0-alpha04
ออกอากาศแล้ว เวอร์ชัน 1.2.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เมธอด
getFragmentManager()
และrequireFragmentManager()
ในFragment
ถูกเลิกใช้งานแล้วและแทนที่ด้วยเมธอดgetParentFragmentManager()
เดียว ซึ่งจะแสดงผลFragmentManager
ที่ไม่ใช่ค่าว่างซึ่งมีการเพิ่ม Fragment (คุณใช้isAdded()
เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่) (b/140574496) - เลิกใช้งานเมธอด
FragmentManager.enableDebugLogging
แบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้Log.isLoggable()
สำหรับแท็กFragmentManager
แล้ว ซึ่งช่วยให้คุณเปิดใช้การบันทึกDEBUG
หรือVERBOSE
ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง (aosp/1116591)
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะทำลาย Fragment อย่างถูกต้องในขณะที่ภาพเคลื่อนไหวขาออกใน Fragment อื่นๆ กำลังทำงาน (b/140574199)
- แก้ไขปัญหาที่ Fragment จะเรียกใช้
Activity.findViewById()
ในกรณีที่ก่อนหน้านี้ไม่ได้เรียกใช้ (aosp/1116431)
เวอร์ชัน 1.2.0-alpha03
5 กันยายน 2019
androidx.fragment:fragment:1.2.0-alpha03
androidx.fragment:fragment-ktx:1.2.0-alpha03
และ androidx.fragment:fragment-testing:1.2.0-alpha03
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
FragmentContainerView
เปลี่ยนชื่อเป็นfinal
แล้ว (b/140133091)
แก้ไขข้อบกพร่อง
- ตอนนี้
FragmentContainerView
จะกลับลำดับการวาดอย่างถูกต้องเมื่อนำ Fragment ออกจาก Back Stack (b/139104187) - แก้ไขปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งป๊อป Fragment และเพิ่ม Fragment ใหม่พร้อมกัน (b/111659726)
- ตอนนี้ Fragment จะรอให้การเปลี่ยนผ่านเสร็จสิ้น (นอกเหนือจากภาพเคลื่อนไหว ซึ่งได้รับการแก้ไขใน Fragment
1.2.0-alpha02
) ก่อนที่จะส่งonDestroyView()
(b/138741697)
เวอร์ชัน 1.2.0-alpha02
7 สิงหาคม 2019
androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
และ androidx.fragment:fragment-testing:11.2.0-alpha02
ออกแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้
SavedStateViewModelFactory
เป็นค่าเริ่มต้นที่ใช้เมื่อใช้by viewModels()
,by activityViewModels()
, ตัวสร้างViewModelProvider
หรือViewModelProviders.of()
ที่มีFragment
(b/135716331) - ระบบได้อัปเดตภาพเคลื่อนไหวเริ่มต้นเมื่อใช้
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
,TRANSIT_FRAGMENT_FADE
กับsetTransition
ในFragmentTransaction
ให้ตรงกับภาพเคลื่อนไหวที่กิจกรรมใช้ในอุปกรณ์ Android 10 (aosp/1012812, aosp/1014730)
การเปลี่ยนแปลง API
- เปิดตัว
FragmentContainerView
เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก ซึ่งจะแทนที่การใช้งานFrameLayout
ฯลฯ เนื่องจากจะแก้ไขปัญหาการจัดลำดับ Z ของภาพเคลื่อนไหวและการส่งการแทรกหน้าต่างไปยัง Fragment (b/37036000, aosp/985243, b/136494650) - เพิ่มเมธอด
FragmentManager.findFragment(View)
แบบคงที่เพื่อดึงข้อมูล Fragment ที่มีจากมุมมองที่ Fragment ขยาย นอกจากนี้ ยังมีส่วนขยาย Kotlin ในfragment-ktx
ด้วย (aosp/1090757) - เพิ่มการโอเวอร์โหลดใหม่ของ
add()
และreplace()
ในFragmentTransaction
ที่ใช้Class<? extends Fragment>
และอาร์กิวเมนต์Bundle
ที่ไม่บังคับ วิธีการเหล่านี้ใช้FragmentFactory
เพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย (b/126124987) - เพิ่มคำอธิบายประกอบ
@MainThread
ลงในFragment
การเรียกกลับของวงจรแล้ว (b/127272564) - API ที่เกี่ยวข้องกับชื่อ Breadcrumb ใน
FragmentTransaction
และFragmentManager.BackStackEntry
เลิกใช้งานแล้ว (b/138252944) - เราเลิกใช้เมธอด
setTransitionStyle
ในFragmentTransaction
แล้ว (aosp/1011537) - เมธอดหลายรายการใน
FragmentManager
ไม่abstract
อีกต่อไปFragmentManager
ยังคงเป็นabstract
และไม่ควรสร้างอินสแตนซ์หรือขยายโดยตรง คุณควรรับอินสแตนซ์ที่มีอยู่จากgetSupportFragmentManager()
,getChildFragmentManager()
ฯลฯ ต่อไป
แก้ไขข้อบกพร่อง
- จาก Fragment
1.1.0-rc04
: ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858) - จาก Fragment
1.1.0-rc03
: แก้ปัญหาที่การเรียกใช้postponeEnterTransition()
ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118) - จาก Fragment
1.1.0-rc02
: แก้ไขข้อขัดข้องในFragmentPagerAdapter
และFragmentStatePagerAdapter
เมื่อนำรายการปัจจุบันออก (b/137209870) - ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง
onDestroyView()
(b/136110528) - ตอนนี้ระบบจะจัดการภาพเคลื่อนไหวของ Fragment จาก Fragment ย่อยและ Fragment ที่สืบทอดมาอย่างถูกต้องเมื่อสร้างภาพเคลื่อนไหวของ Fragment หลัก (b/116675313)
- แก้ไข
NullPointerException
เมื่อใช้การเปลี่ยนองค์ประกอบที่แชร์และรวมการดำเนินการป๊อปอัปและการเพิ่ม (b/120507394) - เพิ่มวิธีแก้ปัญหาชั่วคราวสำหรับ
IllegalStateException
เมื่อใช้FragmentPagerAdapter
และFragmentStatePagerAdapter
ในการทดสอบ Robolectric (b/137201343)
เวอร์ชัน 1.2.0-alpha01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.2.0-alpha01
androidx.fragment:fragment-ktx:1.2.0-alpha01
และ androidx.fragment:fragment-testing:1.2.0-alpha01
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้ FragmentManager จะเรียกใช้
requestApplyInsets()
หลังจากแนบมุมมองของ Fragment และก่อนเรียกใช้onViewCreated()
โดยตรง เพื่อให้มั่นใจว่ามุมมองจะมีระยะขอบที่ถูกต้องเสมอ (b/135945162)
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อเปิดFragmentTransaction
ที่ใช้setPrimaryNavigationFragment()
ก่อนreplace()
(b/134673465)
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0
5 กันยายน 2019
androidx.fragment:fragment:1.1.0
androidx.fragment:fragment-ktx:1.1.0
และ androidx.fragment:fragment-testing:1.1.0
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0
- fragment-testing: อาร์ติแฟกต์
fragment-testing
มีคลาสFragmentScenario
สำหรับทดสอบ Fragment แยกกัน ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการทดสอบ Fragment ของแอป - FragmentFactory: ตอนนี้คุณตั้งค่า
FragmentFactory
ในFragmentManager
เพื่อจัดการการสร้างอินสแตนซ์ของ Fragment ได้แล้ว ซึ่งจะช่วยลดข้อกำหนดที่เข้มงวดในการมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ - ตัวแทนพร็อพเพอร์ตี้ Kotlin สำหรับ ViewModel: อาร์ติแฟกต์
fragment-ktx
มีตัวแทนพร็อพเพอร์ตี้ Kotlin 2 รายการ ได้แก่by viewModels()
สำหรับเข้าถึง ViewModel ที่เชื่อมโยงกับ Fragment แต่ละรายการ และby activityViewModels()
สำหรับเข้าถึง ViewModel ที่กำหนดขอบเขตไว้ในกิจกรรม - วงจรสูงสุด: ตอนนี้คุณตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยเรียกใช้
setMaxLifecycle()
ในFragmentTransaction
ซึ่งมาแทนที่setUserVisibleHint()
ที่เลิกใช้งานไปแล้วFragmentPagerAdapter
และFragmentStatePagerAdapter
มีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ - ตัวสร้าง FragmentActivity LayoutId: ตอนนี้คลาสย่อยของ
FragmentActivity
สามารถเรียกตัวสร้างในFragmentActivity
ที่ใช้รหัสR.layout
ได้โดยไม่บังคับ ซึ่งระบุเลย์เอาต์ที่ควรตั้งค่าเป็นมุมมองเนื้อหาแทนการเรียกsetContentView()
ในonCreate()
แต่ไม่ได้เปลี่ยนข้อกำหนดที่ว่าคลาสย่อยต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ - ตัวสร้าง Fragment LayoutId: ตอนนี้คลาสย่อยของ
Fragment
สามารถเรียกตัวสร้างในFragment
ที่ใช้รหัสR.layout
ได้แล้ว ซึ่งจะระบุเลย์เอาต์ที่ควรใช้สำหรับ Fragment นี้แทนการลบล้างonCreateView()
คุณกำหนดค่าเลย์เอาต์ที่ขยายได้ในonViewCreated()
- เลื่อนเวลาด้วยการหมดเวลา: มีการเพิ่มการโอเวอร์โหลดใหม่ของ
postponeEnterTransition()
ซึ่งใช้การหมดเวลา
เวอร์ชัน 1.1.0-rc04
7 สิงหาคม 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
และ androidx.fragment:fragment-testing:1.1.0-rc04
ออกแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858)
เวอร์ชัน 1.1.0-rc03
19 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
และ androidx.fragment:fragment-testing:1.1.0-rc03
ออกแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเรียก
postponeEnterTransition()
ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)
เวอร์ชัน 1.1.0-rc02
17 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc02
androidx.fragment:fragment-ktx:1.1.0-rc02
และ androidx.fragment-testing:fragment:1.1.0-rc02
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องใน
FragmentPagerAdapter
และFragmentStatePagerAdapter
เมื่อนำรายการปัจจุบันออก (b/137209870)
เวอร์ชัน 1.1.0-rc01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc01
androidx.fragment:fragment-ktx:1.1.0-rc01
และ androidx.fragment:fragment-testing:1.1.0-rc01
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ฟรอนต์เอนด์จะอัปเดตระดับการมองเห็นอย่างถูกต้องเมื่อใช้การดำเนินการ
show()
หรือhide()
ขณะที่การเปลี่ยนฉากกำลังทำงานอยู่ (b/133385058) - แก้ไข
NullPointerException
เมื่อเปิดFragmentTransaction
ที่ใช้setPrimaryNavigationFragment()
ก่อนreplace()
(b/134673465)
เวอร์ชัน 1.1.0-beta01
5 มิถุนายน 2019
androidx.fragment:fragment:1.1.0-beta01
androidx.fragment:fragment-ktx:1.1.0-beta01
และ androidx.fragment:fragment-testing:1.1.0-beta01
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้
androidx.lifecycle.Lifecycle
การเรียกกลับ (ที่เกี่ยวข้องกับSTARTED
,RESUMED
,PAUSED
,STOPPED
และDESTROYED
โดยเฉพาะ) สำหรับ Fragment ที่ซ้อนกันจะซ้อนกันอย่างถูกต้องแล้ว (b/133497591) - ตอนนี้อินสแตนซ์
OnBackPressedCallback
ที่ลงทะเบียนในonCreate()
ของ Fragment จะมีความสำคัญสูงกว่า FragmentManager ของ Fragment ย่อยอย่างเหมาะสม (b/133175997) - ระบบจะไม่แสดงภาพเคลื่อนไหวของ Fragment ย่อยอีกต่อไปเมื่อมีการแทนที่ Fragment หลัก (b/121017790)
- ตอนนี้ระบบจะไม่สนใจภาพเคลื่อนไหวและการเปลี่ยนฉากของ Fragment เมื่อใช้
animateLayoutChanges="true"
ซึ่งจะช่วยแก้ไขปัญหาที่ Fragment ไม่ถูกทำลายอย่างถูกต้อง (b/116257087)
เวอร์ชัน 1.1.0-alpha09
16 พฤษภาคม 2019
androidx.fragment:fragment:1.1.0-alpha09
androidx.fragment:fragment-ktx:1.1.0-alpha09
และ androidx.fragment:fragment-testing:1.1.0-alpha09
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- ตอนนี้ Fragment จะได้รับการเรียกกลับไปยัง
onPrimaryNavigationFragmentChanged(boolean)
เมธอดใหม่เมื่อ Fragment การนำทางหลักมีการเปลี่ยนแปลง aosp/960857
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะนำรายการเมนูที่ Fragment ย่อยขยายออกไปออกอย่างถูกต้องเมื่อนำ Fragment หลักออก b/131581013
เวอร์ชัน 1.1.0-alpha08
7 พฤษภาคม 2019
androidx.fragment:fragment:1.1.0-alpha08
androidx.fragment:fragment-ktx:1.1.0-alpha08
และ androidx.fragment:fragment-testing:1.1.0-alpha08
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
รุ่นนี้ใช้ร่วมกับ Preferences 1.1.0-alpha01 ถึง 1.1.0-alpha04 ไม่ได้ โปรดอัปเกรดเป็น Preferences 1.1.0-alpha05 เมื่อใช้ Fragment เวอร์ชันนี้
ฟีเจอร์ใหม่
- เพิ่มการโอเวอร์โหลดใหม่ของ
postponeEnterTransition()
ที่ใช้การหมดเวลา หลังจากนั้น Fragment จะเรียกใช้startPostponedEnterTransition()
โดยอัตโนมัติ b/120803208
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ระบบได้นำเมธอด
FragmentFactory
instantiate
ที่เลิกใช้งานไปก่อนหน้านี้ซึ่งรับBundle
ออกแล้ว aosp/953856 - การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: เปลี่ยนชื่อค่าคงที่
RESUME_ONLY_CURRENT_FRAGMENT
และUSE_SET_USER_VISIBLE_HINT
ในFragmentPagerAdapter
และFragmentStatePagerAdapter
เป็นBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
และBEHAVIOR_SET_USER_VISIBLE_HINT
ตามลำดับ aosp/954782
แก้ไขข้อบกพร่อง
- Fragment ที่มีวงจรจำกัดผ่าน
setMaxLifecycle()
จะไม่กลับมาทำงานต่อก่อนที่จะถึงสถานะสุดท้ายอีกต่อไป b/131557151 - เมื่อใช้
setMaxLifecycle(Lifecycle.State.CREATED)
ระบบจะทำลายมุมมองของ Fragment อย่างถูกต้อง aosp/954180
เวอร์ชัน 1.1.0-alpha07
25 เมษายน 2019
androidx.fragment:fragment:1.1.0-alpha07
androidx.fragment:fragment-ktx:1.1.0-alpha07
และ androidx.fragment:fragment-testing:1.1.0-alpha07
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้คุณตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้แล้วโดยเรียกใช้
setMaxLifecycle()
ในFragmentTransaction
ซึ่งมาแทนที่setUserVisibleHint()
ที่เลิกใช้งานไปแล้วFragmentPagerAdapter
และFragmentStatePagerAdapter
มีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ (b/129780800)
การเปลี่ยนแปลง API
- ตอนนี้จะเรียกใช้
moveToState(STARTED)
ในFragmentScenario
ได้ในอุปกรณ์ที่ใช้ API 24 ขึ้นไปเท่านั้น (b/129880016)
การเปลี่ยนแปลงลักษณะการทำงาน
- จาก (b/129907905) เศษใน Back Stack จะไม่ได้รับการเรียกกลับไปยัง
onCreateView()
เมื่อกิจกรรมโฮสติ้งถูกสร้างขึ้นใหม่ ตอนนี้ระบบจะเรียกใช้onCreateView()
เมื่อ Fragment ปรากฏเท่านั้น (กล่าวคือ เมื่อมีการป๊อป Back Stack)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้แท็ก
<fragment>
ใน XML และตัวสร้างcontentLayoutId
ของFragmentActivity
หรือAppCompatActivity
(b/129907905) - แก้ไขปัญหาที่ระบบจะไม่ย้าย Fragment ใน Back Stack ไปยัง
CREATED
อย่างน้อยหลังจากเปลี่ยนการกำหนดค่า ซึ่งทำให้ ViewModel และ Fragment ที่เก็บไว้ของลูกไม่ได้รับการกำจัดอย่างถูกต้อง (b/129593351) - แก้ไขข้อขัดข้องใน
restoreSaveState
ซึ่งเกิดจากการซิงค์ข้อมูลที่ไม่ตรงกันของ Fragment ที่เก็บไว้หลังจากบันทึกสถานะอินสแตนซ์แล้ว (b/130433793) (aosp/947824) - แก้ไขปัญหาที่ระบบจะไม่เรียกใช้
OnBackPressedCallback
ที่เพิ่มด้วยวงจร Fragment หากFragmentManager
มี Back Stack ดูรายละเอียดเพิ่มเติมได้ที่ androidx.activity 1.0.0-alpha07 (aosp/948209) - Fragment ไม่บังคับใช้
LAYER_TYPE_HARDWARE
สำหรับภาพเคลื่อนไหวอีกต่อไป หากต้องการภาพเคลื่อนไหวเลเยอร์ฮาร์ดแวร์โดยเฉพาะ โปรดตั้งค่าเป็นส่วนหนึ่งของภาพเคลื่อนไหว (b/129486478)
เวอร์ชัน 1.1.0-alpha06
3 เมษายน 2019
androidx.fragment:fragment:1.1.0-alpha06
androidx.fragment:fragment-ktx:1.1.0-alpha06
และ androidx.fragment:fragment-testing:1.1.0-alpha06
ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้ข้อยกเว้นที่ FragmentManager สร้างขึ้นจะมีชื่อของ Fragment ในข้อความด้วย (b/67759402)
การเปลี่ยนแปลง API
Fragment
และFragmentActivity
มีตัวสร้างที่ 2 ซึ่งใช้@LayoutRes int
แทนลักษณะการทำงานก่อนหน้านี้ในการใส่คำอธิบายประกอบในคลาสด้วย@ContentView
แนวทางนี้ใช้ได้ทั้งในโมดูลแอปและโมดูลไลบรารี (b/128352521)- ตอนนี้
onActivityResult()
ของ FragmentActivity มีการทำเครื่องหมายเป็น@CallSuper
อย่างถูกต้องแล้ว (b/127971684) - เลิกใช้งานเมธอด
instantiate
ของ FragmentFactory ที่รับอาร์กิวเมนต์ Bundle แล้ว และแอปควรใช้โอเวอร์โหลดinstantiate
ใหม่ที่ไม่รับ Bundle (b/128836103) - ตอนนี้มีการใส่คำอธิบายประกอบเมธอด
FragmentScenario
ด้วย@StyleRes
อย่างถูกต้องแล้ว (aosp/924193) FragmentTabHost
เลิกใช้งานแล้ว (b/127971835)- นำ
getThemedContext()
ของ FragmentActivity ออกแล้ว (aosp/934078)
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน 1.1.0-alpha05 ที่ทำให้ Fragment ขาเข้ากะพริบบนหน้าจอ (b/129405432)
- แก้ไขปัญหาที่ทำให้ 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) แล้ว- แก้ไขปัญหาที่อาจมีการเรียกใช้
DialogFragment
onDismiss()
2 ครั้งเมื่อใช้getDialog().dismiss()
หรือgetDialog().cancel()
(b/126563750)
เวอร์ชัน 1.1.0-alpha04
7 กุมภาพันธ์ 2019
androidx.fragment:fragment 1.1.0-alpha04
androidx.fragment:fragment-ktx 1.1.0-alpha04
และ androidx.fragment:fragment-testing 1.1.0-alpha04
ออกอากาศแล้ว
ฟีเจอร์ใหม่
- เพิ่มการรองรับคำอธิบายประกอบคลาส
@ContentView
ที่ช่วยให้คุณระบุได้ว่าควรขยายไฟล์ XML ของเลย์เอาต์ใดเพื่อเป็นทางเลือกแทนการลบล้างonCreateView()
เราขอแนะนำให้ดูงานที่เกี่ยวข้องในonViewCreated()
(aosp/837619) fragment-testing
ตอนนี้ขึ้นอยู่กับandroidx.test:core-ktx
1.1.0 แบบเสถียร (b/121209673)- ตอนนี้คุณใช้
openActionBarOverflowOrOptionsMenu
กับFragmentScenario
เพื่อทดสอบเมนูตัวเลือกที่โฮสต์ Fragment (b/121126668) ได้แล้ว
การเปลี่ยนแปลง API
- เพิ่มเมธอด
requireArguments()
ซึ่งจะแสดงผล@NonNull Bundle
หรือส่งIllegalStateException
(b/121196360) - เพิ่มหมายเหตุว่าไม่ควรลบล้าง
getLifecycle()
,getViewLifecycleOwner()
และgetViewLifecycleOwnerLiveData()
และจะมีการกำหนดค่าสุดท้ายในรุ่นต่อๆ ไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างเมธอดนี้ (aosp/880714) - เพิ่มหมายเหตุว่าไม่ควรลบล้าง
getViewModelStore()
และจะถือเป็นค่าสุดท้ายในรุ่นต่อๆ ไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างเมธอดนี้ (aosp/880713) - แก้ไขปัญหาความเข้ากันได้แบบไบนารีกับ Fragment รุ่นก่อนหน้า (aosp/887877) (aosp/889834)
แก้ไขข้อบกพร่อง
- ระบบจะล้างข้อมูลส่วนเป้าหมายอย่างถูกต้องเมื่อคุณส่ง
null
ไปยังsetTargetFragment()
(aosp/849969) - แก้ไขปัญหาที่บางครั้ง Fragment เป้าหมายไม่พร้อมใช้งานในหรือหลังจาก
onDestroy()
(b/122312935) - ตอนนี้ระบบจะเรียกใช้ onDismiss() ของ DialogFragment ก่อน
onDestroy()
(aosp/874133) (aosp/890734)
เวอร์ชัน 1.1.0-alpha03
17 ธันวาคม 2018
ฟีเจอร์ใหม่
- ตอนนี้ Fragment ใช้
BundleSavedStateRegistryOwner
และขึ้นอยู่กับไลบรารี SavedState ที่เพิ่งเปิดตัว [aosp/824380] - เพิ่ม
by activityViewModels
ตัวแทนพร็อพเพอร์ตี้ Kotlin เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับ Activity ที่มี [b/119050253] by viewModels
ตัวแทนพร็อพเพอร์ตี้ Kotlin ได้รับการขยายให้ใช้วิธีแลมบ์ดาที่ไม่บังคับเพื่อรับViewModelStoreOwner
ซึ่งช่วยให้คุณส่ง Fragment หลักหรือViewModelStoreOwner
ที่กำหนดเองอื่นๆ ด้วยโค้ด เช่นval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
การเปลี่ยนแปลง API
FragmentScenario
ตอนนี้คุณระบุธีมได้แล้ว เช่นTheme.AppCompat
[b/119054431] นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ- เพิ่มเมธอด
requireView()
ซึ่งจะแสดงผล@NonNull View
หรือส่งIllegalStateException
[b/120241368] - เพิ่ม
requireParentFragment()
เมธอดที่ส่งคืน@NonNull Fragment
หรือส่งIllegalStateException
[b/112103783]
แก้ไขข้อบกพร่อง
- แก้ไข IllegalStateException: บันทึกสถานะไม่สำเร็จ b/120814739
- ตอนนี้ Fragment ที่กู้คืนจากสถานะอินสแตนซ์ที่บันทึกไว้จะได้รับ
Bundle
[b/119794496] ที่ไม่ใช่ค่าว่างเสมอ - Fragment ที่นำออกจะไม่นำออบเจ็กต์
Lifecycle
กลับมาใช้ซ้ำหากมีการเพิ่มอีกครั้ง [b/118880674]
เวอร์ชัน 1.1.0-alpha02
3 ธันวาคม 2018
ฟีเจอร์ใหม่
- ตอนนี้ส่วนขยาย Kotlin ของ FragmentScenario ช่วยให้คุณใช้ Lambda ในการสร้าง Fragment แทนการส่งอินสแตนซ์
FragmentFactory
ได้แล้ว (aosp/812913)
แก้ไขข้อบกพร่อง
- แก้ไข IllegalStateException เมื่อใช้ Fragment ที่ซ้อนกันใน Back Stack (b/119256498)
- แก้ไขการขัดข้องเมื่อใช้
FragmentScenario.recreate()
กับFragmentFactory
(aosp/820540) - แก้ไขปัญหาที่เข้าถึง Fragment เป้าหมายไม่ได้หลังจากนำ Fragment ออกแล้ว (aosp/807634)
เวอร์ชัน 1.1.0-alpha01
5 พฤศจิกายน 2018
นี่คือรุ่นแรกของ
fragment-testing
อาร์ติแฟกต์และFragmentScenario
ซึ่งสร้างขึ้นจาก
androidx.test:core APIs ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการทดสอบ Fragment
ฟีเจอร์ใหม่
- คลาส FragmentScenario ใหม่สำหรับการทดสอบ Fragment แบบแยก
- ตอนนี้คุณตั้งค่า
FragmentFactory
ในFragmentManager
ใดก็ได้เพื่อควบคุมวิธี สร้างอินสแตนซ์ Fragment ใหม่ - เพิ่ม
by viewModels()
Kotlin property delegate ใหม่สําหรับการดึงข้อมูล ViewModel จาก Fragment - ตอนนี้ระบบจะยกเลิกเหตุการณ์อินพุตที่รอดำเนินการ (เช่น การคลิก) ใน
onStop()
ของ Fragment
การเปลี่ยนแปลง API
- ขยายคำอธิบายประกอบการยอมรับค่า Null ได้อย่างมากใน Fragment API Surface
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้การดำเนินการ Fragment ล้มเหลวจากภายใน LiveData (b/77944637)
ปัญหาที่ทราบแล้ว
- คุณจะเข้าถึง Target Fragment ไม่ได้หลังจากที่นำ Fragment ออกจาก FragmentManager แล้ว
fragment-testing
ขึ้นอยู่กับandroidx.test:core:1.0.0-beta01
แทนที่จะเป็นandroidx.test:core:1.0.0
ที่ถูกต้อง