ส่วนย่อย
อัปเดตล่าสุด | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
4 กันยายน 2024 | 1.8.3 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Fragment คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับ
ในแอปหรือโมดูล
ดึงดูด
dependencies { def fragment_version = "1.8.3" // 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.3" // 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") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม
เวอร์ชัน 1.8
เวอร์ชัน 1.8.3
4 กันยายน 2024
ปล่อย androidx.fragment:fragment-*:1.8.3
แล้ว เวอร์ชัน 1.8.3 มีสัญญาผูกมัดเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้
FragmentManager
จะคำนึงถึงการดำเนินการที่รอดำเนินการอย่างถูกต้องเมื่อจัดการท่าทางสัมผัสการย้อนกลับที่คาดการณ์ การดำเนินการนี้ควรตรวจสอบว่าการทำระบบย้อนกลับจะไม่ทำให้เกิดIndexOutOfBoundsException
อีกต่อไป (I9ba32, b/342316801) AndroidFragment
จะไม่ขัดข้องอีกต่อไปหากมีการเพิ่มไปยังการเรียบเรียงในขณะที่บันทึกสถานะของกิจกรรม/ส่วนย่อยที่มีกิจกรรม/ส่วนย่อยไว้แล้ว (I985e9, b/356643968)
เวอร์ชัน 1.8.2
24 กรกฎาคม 2024
ปล่อย androidx.fragment:fragment-*:1.8.2
แล้ว เวอร์ชัน 1.8.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้
AndroidFragment
จัดการกรณีที่วาง Fragment หลักไว้ในสแต็กย้อนกลับของ 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
ที่อนุญาตให้เพิ่มส่วนย่อยในลำดับชั้น Compose ผ่านชื่อคลาสของ Fragment ได้ โดยจะจัดการการบันทึกและกู้คืนสถานะของ Fragment โดยอัตโนมัติ ควรใช้วิธีนี้แทนการใช้AndroidViewBinding
ในการเพิ่ม Fragment ที่เราแนะนำไว้ก่อนหน้านี้โดยตรง - ตอนนี้ Callback
onBackStackChangeCancelled
ในอินเทอร์เฟซOnBackStackChangedListener
ของFragmentManager
เริ่มทำงานแล้วโดยเป็นส่วนหนึ่งของการดำเนินการในFragmentManager
โดยจะย้ายให้ใกล้เคียงกับช่วงเวลาของ Callback ของonBackStackChangeCommitted
เวอร์ชัน 1.8.0-rc01
29 พฤษภาคม 2024
ปล่อย androidx.fragment:fragment-*:1.8.0-rc01
แล้ว เวอร์ชัน 1.8.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ Callback
onBackStackChangeCancelled
ในอินเทอร์เฟซFragmentManagers OnBackStackChangedListener
จะเริ่มทำงานโดยเป็นส่วนหนึ่งของการดำเนินการในFragmentManager
โดยจะย้ายให้เข้าไปใกล้ขึ้นสอดคล้องกับระยะเวลาของ Callback ของ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
: ตอนนี้การย้อนกลับที่คาดการณ์ได้จะทำงานสำหรับธุรกรรมที่ส่วนย่อยทั้งหมดมี Animator หรือ Seekable 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) - จากส่วนย่อย
1.7.0-rc02
: แก้ไขข้อบกพร่องในกรณีที่มีการเพิ่มองค์ประกอบที่แชร์ซึ่งค้นหาไม่ได้ลงในธุรกรรมที่สามารถค้นหาการเปลี่ยนอื่นๆ ทั้งหมดได้แสดงว่ามีข้อขัดข้อง แต่ตอนนี้ระบบจะถือว่าเป็นธุรกรรมที่ค้นหาไม่ได้อย่างถูกต้อง (I18ccd)
เวอร์ชัน 1.8.0-alpha01
3 เมษายน 2024
ปล่อย androidx.fragment:fragment-*:1.8.0-alpha01
แล้ว เวอร์ชัน 1.8.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
AndroidFragment
Composable
ใหม่อนุญาตให้เพิ่มส่วนย่อยลงในลำดับชั้น Compose ได้ผ่านทางชื่อคลาสของ Fragment โดยจะจัดการการบันทึกและกู้คืนสถานะของ Fragment โดยอัตโนมัติ โดยสามารถใช้แทน AndroidViewBindingComposable
ได้โดยตรง (b/312895363, Icf841)
การเปลี่ยนแปลงเอกสารประกอบ
- อัปเดตเอกสารประกอบสำหรับ API ของ
OnBackStackChangedListener
เพื่อระบุเวลาเรียกใช้และวิธีใช้ API (I0bfd9)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment จะขึ้นอยู่กับโปรแกรมติดตั้งโปรไฟล์ 1.3.1
เวอร์ชัน 1.7
เวอร์ชัน 1.7.1
14 พฤษภาคม 2024
ปล่อย androidx.fragment:fragment-*:1.7.1
แล้ว เวอร์ชัน 1.7.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การย้อนกลับที่คาดการณ์ได้จะทำงานสำหรับธุรกรรมที่ส่วนย่อยทั้งหมดมี Animator หรือ Seekable Androidx Transition เท่านั้น วิธีนี้แก้ปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนอาจทำให้หน้าจอว่างเปล่า (I43037, b/339169168)
เวอร์ชัน 1.7.0
1 พฤษภาคม 2024
ปล่อย androidx.fragment:fragment-*:1.7.0
แล้ว เวอร์ชัน 1.7.0 มีคอมมิตเหล่านี้
รองรับท่าทางสัมผัสการย้อนกลับที่คาดการณ์
- ตอนนี้ Fragment จะรองรับการกลับมาในแอปตามการคาดการณ์เมื่อใช้
Animator
หรือเมื่อใช้การเปลี่ยนเป็น AndroidX 1.5.0 วิธีนี้จะช่วยให้ผู้ใช้สามารถใช้ท่าทางสัมผัสย้อนกลับเพื่อดูส่วนย่อยก่อนหน้าโดยการมองหา Animator/การเปลี่ยน ก่อนตัดสินใจทำธุรกรรมผ่านการดำเนินการท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบทรานซิชัน | ทรัพยากร XML | รองรับการย้อนกลับที่คาดการณ์ได้ |
---|---|---|
Animation |
R.anim |
ไม่ |
Animator |
R.animator |
ใช่ |
เฟรมเวิร์ก Transition |
R.transition |
ไม่ |
AndroidX Transition ที่มีการเปลี่ยนรุ่น 1.4.1 หรือน้อยกว่า |
R.transition |
ไม่ |
AndroidX Transition ที่มีการเปลี่ยนรุ่น 1.5.0 |
R.transition |
ใช่ |
หากคุณพบปัญหากับการสนับสนุนการย้อนกลับที่คาดการณ์ใน Fragment หลังจากที่คุณเลือกใช้ท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ โปรดแจ้งปัญหากับ Fragment พร้อมกับโปรเจ็กต์ตัวอย่างที่ทำให้เกิดปัญหาซ้ำ คุณสามารถปิดใช้การย้อนกลับที่คาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false)
ใน onCreate()
ของกิจกรรม
ตอนนี้ FragmentManager.OnBackStackChangedListener()
จะระบุ onBackStackChangeProgressed()
และ onBackStackChangeCancelled()
สําหรับการรับความคืบหน้าย้อนกลับที่คาดการณ์ไว้และกิจกรรมที่ยกเลิกตามลำดับ
อาร์ติแฟกต์ Compose ไม่ได้
เราได้สร้างอาร์ติแฟกต์ 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 จะขึ้นอยู่กับโปรแกรมติดตั้งโปรไฟล์ 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 ไปยังสถานะสุดท้ายทันที (Ida0d9)
- แก้ไขปัญหาใน Fragments ที่การรบกวนการเปลี่ยนขาเข้าด้วยท่าทางสัมผัสการย้อนกลับแบบคาดการณ์จะทำลายมุมมองการเข้าออกและปล่อยให้หน้าจอว่างเปล่า (Id3f22, b/319531491)
เวอร์ชัน 1.7.0-alpha10
7 กุมภาพันธ์ 2024
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha10
แล้ว เวอร์ชัน 1.7.0-alpha10 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทราบในรุ่น Fragment ก่อนหน้าซึ่งการใช้การสนับสนุนการย้อนกลับที่คาดการณ์ของ Fragment สำหรับการเปลี่ยน
Animator
หรือ AndroidX จะทำให้ Fragment แสดงผลNullPointerException
จากhandleOnBackProgressed
หากไม่เคยมีการเพิ่มFragmentManager.OnBackStackChangedListener
ผ่านaddOnBackStackChangedListener
(I7c835)
เวอร์ชัน 1.7.0-alpha09
24 มกราคม 2024
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha09
แล้ว เวอร์ชัน 1.7.0-alpha09 มีคอมมิตเหล่านี้
อาร์ติแฟกต์ Compose ไม่ได้
เราได้สร้างอาร์ติแฟกต์ 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 Fragments จะส่งNullPointerException
จากhandleOnBackProgressed
หากไม่เคยมีการเพิ่มFragmentManager.OnBackStackChangedListener
ผ่านaddOnBackStackChangedListener
การเพิ่ม Listener ด้วยตนเองจะช่วยแก้ไขข้อขัดข้องได้ โดยจะมีการแก้ไขสำหรับเรื่องนี้ใน Fragments รุ่นถัดไป
เวอร์ชัน 1.7.0-alpha08
10 มกราคม 2024
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha08
แล้ว เวอร์ชัน 1.7.0-alpha08 มีคอมมิตเหล่านี้
ล้างข้อมูล
- นำวิธีแก้ปัญหาสำหรับไลบรารีการเปลี่ยนที่ได้รับการแก้ไขแล้วในการเปลี่ยน
1.5.0-alpha06
(I04356)
เวอร์ชัน 1.7.0-alpha07
29 พฤศจิกายน 2023
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha07
แล้ว เวอร์ชัน 1.7.0-alpha07 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
ที่เกิดจากการตั้งค่าการเปลี่ยนองค์ประกอบที่แชร์และไม่ได้ตั้งค่า Enter/exitTransion ไม่สำเร็จ (I8472B) - จาก Fragment
1.6.2
: เมื่อส่วนย่อยของFragmentContainerView
สูงเกินจริง ตอนนี้คุณจะสามารถเข้าถึงสถานะต่างๆ เช่นFragmentManager
, โฮสต์ และรหัสได้ใน Callback ของ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 ใหม่ที่เพิ่มเข้ามาในการเปลี่ยน1.5.0-alpha04
เวอร์ชัน 1.7.0-alpha05
20 กันยายน 2023
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha05
แล้ว เวอร์ชัน 1.7.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Fragment จะรองรับการย้อนกลับที่คาดการณ์เมื่อใช้การเปลี่ยน Androidx วิธีนี้ช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อค้นหาส่วนก่อนหน้าด้วยการเปลี่ยน Androidx ที่กำหนดเองได้ ก่อนตัดสินใจว่าจะยืนยันหรือยกเลิกธุรกรรมผ่านท่าทางสัมผัสที่ทำเสร็จแล้ว คุณต้องใช้รุ่นการเปลี่ยน
1.5.0-alpha03
เพื่อเปิดใช้ฟีเจอร์นี้ (Ib49b4, b/285175724)
ปัญหาที่ทราบ
- ปัจจุบันมีปัญหาเกิดขึ้นหลังจากที่ยกเลิกท่าทางสัมผัสการย้อนกลับด้วยการเปลี่ยนครั้งหนึ่งแล้ว ครั้งต่อไปที่คุณเริ่มท่าทางสัมผัสย้อนกลับ ท่าทางสัมผัสดังกล่าวจะไม่สามารถเรียกใช้การเปลี่ยนได้ ซึ่งทำให้หน้าจอว่างเปล่า ซึ่งอาจเกิดจากปัญหาในคลังการเปลี่ยน (b/300157785) หากพบปัญหานี้ โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมแสดงตัวอย่างโปรเจ็กต์ที่ทำให้ปัญหาเกิดขึ้นอีกครั้ง คุณสามารถปิดใช้การย้อนกลับที่คาดการณ์ได้โดยใช้
FragmentManager.enabledPredictiveBack(false)
ในonCreate()
ของกิจกรรม
เวอร์ชัน 1.7.0-alpha04
6 กันยายน 2023
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha04
แล้ว เวอร์ชัน 1.7.0-alpha04 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อยกเลิกท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ที่ส่วนย่อยไม่สามารถทำให้เป็นสถานะอายุการใช้งานที่ถูกต้อง (I7cffe, b/297379023)
- แก้ไขการถดถอยที่ภาพเคลื่อนไหวได้รับอนุญาตให้ทำงานกับทรานซิชัน (I59f36)
- แก้ไขปัญหาเมื่อใช้การย้อนกลับที่คาดการณ์กับส่วนย่อย ซึ่งการพยายามย้อนกลับ 2 ครั้งติดต่อกันอย่างรวดเร็วบนส่วนย่อยที่ 2 ถึงส่วนย่อยสุดท้ายในสแต็กด้านหลังอาจทำให้เกิดการขัดข้อง (Ifa1a4)
เวอร์ชัน 1.7.0-alpha03
23 สิงหาคม 2023
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha03
แล้ว เวอร์ชัน 1.7.0-alpha03 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ Fragments เมื่อใช้การย้อนกลับแบบคาดการณ์ที่ทำให้ส่วนย่อยแรกในสแต็กหลังของตัวจัดการส่วนย่อยถูกข้ามและกิจกรรมที่จะเสร็จสิ้นเมื่อใช้ระบบกลับผ่านการนำทางแบบ 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
) หรือไม่มีการเปลี่ยนเลย Fragments จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการการย้อนกลับ (I8100C)
เวอร์ชัน 1.7.0-alpha01
7 มิถุนายน 2023
ปล่อย androidx.fragment:fragment-*:1.7.0-alpha01
แล้ว เวอร์ชันนี้ได้รับการพัฒนาใน Branch ภายใน
ฟีเจอร์ใหม่
- ตอนนี้ Fragment จะรองรับการกลับมาในแอปตามการคาดการณ์เมื่อใช้
Animator
วิธีนี้ช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูส่วนย่อยก่อนหน้าด้วยโปรแกรมภาพเคลื่อนไหวที่กำหนดเองได้ ก่อนตัดสินใจทำธุรกรรมผ่านท่าทางสัมผัสที่ทำเสร็จแล้วหรือยกเลิก คุณยังปิดใช้ลักษณะการทำงานใหม่นี้ได้โดยใช้enablePredictiveBack()
แบบทดลองและการส่งในfalse
เวอร์ชัน 1.6
เวอร์ชัน 1.6.2
1 พฤศจิกายน 2023
ปล่อย androidx.fragment:fragment-*:1.6.2
แล้ว เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เมื่อส่วนย่อยของ
FragmentContainerView
สูงเกินจริง คุณจะเข้าถึงสถานะต่างๆ เช่นFragmentManager
, โฮสต์ และรหัสได้ใน CallbackonInflate
(I1e44c, b/307427423) - เมื่อใช้
clearBackStack
เพื่อนำชุดของส่วนย่อยออก ระบบจะล้างViewModel
ของส่วนย่อยที่ฝังอยู่เมื่อล้างViewModels
ของส่วนย่อยระดับบนสุด (I6d83c, b/296173018)
เวอร์ชัน 1.6.1
26 กรกฎาคม 2023
ปล่อย androidx.fragment:fragment-*:1.6.1
แล้ว เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจัดเก็บสถานะที่บันทึกไว้เมื่อกิจกรรมหยุดลงแต่ไม่ได้ถูกทำลายอย่างไม่ถูกต้อง แม้ว่าอินสแตนซ์ของส่วนย่อยจะถูกย้ายกลับไปยังสถานะ
RESUMED
แล้วก็ตาม ซึ่งจะทำให้ระบบนำสถานะที่แคชไว้ดังกล่าวมาใช้ซ้ำหากอินสแตนซ์ของ Fragment นั้นอยู่บนสแต็กด้านหลังเมื่อใช้ API ของ Back Stacks หลายรายการเพื่อบันทึกและกู้คืน Fragment นั้น (I71288, b/246289075)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับกิจกรรม 1.7.2 วิธีนี้แก้ปัญหาที่ผู้ใช้ Kotlin ขยาย
ComponentDialog
ไม่ได้หากไม่มีทรัพยากร Dependency อย่างชัดเจน (b/287509323)
เวอร์ชัน 1.6.0
7 มิถุนายน 2023
ปล่อย androidx.fragment:fragment-*:1.6.0
แล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.5.0
- สถานะที่บันทึกไว้ของ
Fragment
จะแยกออกเป็นสถานะไลบรารีส่วนตัว (คลาสParcelable
ที่กำหนดเอง) กับสถานะที่นักพัฒนาแอประบุไว้ ซึ่งตอนนี้จะจัดเก็บในBundle
เสมอ ซึ่งช่วยให้ระบุได้ว่าสถานะของส่วนย่อยเกิดขึ้นที่ใด - เราได้ขยายอินเทอร์เฟซ
FragmentManager.OnBackStackChangedListener
ให้มี Callback เพิ่มเติม 2 รายการของonBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งเรียกใช้ด้วยFragment
แต่ละรายการก่อนที่จะมีการเพิ่ม/นำออกจาก Fragment Back Stack และทันทีหลังจากที่ทำธุรกรรมตามลำดับ FragmentStrictMode
เพิ่มWrongNestedHierarchyViolation
ใหม่ที่ตรวจจับเมื่อส่วนย่อยย่อยฝังอยู่ในลำดับชั้นการแสดงผลของระดับบนสุด แต่ไม่ได้เพิ่มลงในchildFragmentManager
ของระดับบนสุด- ตอนนี้ API
Fragment
และFragmentManager
ที่ใช้Intent
หรือIntentSender
มีคำอธิบายประกอบอย่างถูกต้องด้วย@NonNull
แล้วเพื่อป้องกันการส่งผ่านค่า Null ที่เป็นค่าว่าง จะทำให้ API เฟรมเวิร์ก Android ที่เกี่ยวข้องขัดข้องในทันทีที่เมธอดเหล่านี้เรียกใช้ - ตอนนี้
DialogFragment
ให้สิทธิ์เข้าถึงComponentDialog
ที่สำคัญผ่านrequireComponentDialog()
API - ตอนนี้ Fragment จะขึ้นอยู่กับวงจร
2.6.1
- ตอนนี้ Fragment จะขึ้นอยู่กับ SavedState
1.2.1
- ขณะนี้ Fragment ขึ้นอยู่กับ ProfileInstaller
1.3.0
อาร์ติแฟกต์
fragment-testing-manifest
จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบส่วนย่อยที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้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) - แก้ไขปัญหาที่มีการส่ง Callback
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
ใหม่จะส่งส่วนย่อยเพียงครั้งเดียวเท่านั้น แม้ว่าธุรกรรมหลายรายการจะมีส่วนย่อยเดียวกันก็ตาม (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) - แฟรกเมนต์
commitNow()
,executePendingTransactions()
และ API ของpopBackStackImmediate()
มีการใส่คำอธิบายประกอบด้วย@MainThread
ซึ่งหมายความว่า API เหล่านี้จะแสดงข้อผิดพลาดของบิลด์เมื่อไม่ได้เรียกใช้จากเทรดหลัก แทนที่จะรอให้ล้มเหลวขณะรันไทม์ (Ic9665, b/236538905)
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องใน
FragmentManager
ที่การบันทึกและการคืนค่าในเฟรมเดียวกันอาจทำให้เกิดข้อขัดข้อง (Ib36af, b/246519668) - ขณะนี้ Callback
onBackStackChangeStarted
และonBackStackChangeCommitted
ของOnBackStackChangedListener
จะทำงานเมื่อมีการเปลี่ยนแปลงสแต็กแบ็กFragmentManager
เท่านั้น (I66055, b/274788957)
เวอร์ชัน 1.6.0-alpha08
22 มีนาคม 2023
ปล่อย androidx.fragment:fragment-*:1.6.0-alpha08
แล้ว เวอร์ชัน 1.6.0-alpha08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- มีการปรับช่วงเวลาของ Callback
OnBackStackChangedListener.onBackStackChangeCommited
ให้ทำงานก่อนการดำเนินการ Fragment จะทำงาน การดำเนินการนี้จะทำให้ไม่มีการส่งผ่านส่วนย่อยที่ถูกปลดออก (I66a76, b/273568280)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.5.6
: แก้ไขปัญหาที่การเรียกใช้clearFragmentResultListener
ในsetFragmentResultListener
ไม่ทำงานหากLifecycle
เป็นSTARTED
อยู่แล้วและมีผลลัพธ์พร้อมให้ดูแล้ว (If7458)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment จะขึ้นอยู่กับวงจร
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
ใหม่ในonBackStackChangedListener
ของFragmentManager
จะดำเนินการก่อนที่ส่วนย่อยจะเริ่มย้ายไปยังสถานะเป้าหมาย (I34726)
เวอร์ชัน 1.6.0-alpha05
8 กุมภาพันธ์ 2023
ปล่อย androidx.fragment:fragment-*:1.6.0-alpha05
แล้ว เวอร์ชัน 1.6.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้อินเทอร์เฟซ
FragmentManager.OnBackStackChagnedListener
มี Callback เพิ่มเติมอีก 2 รายการ คือonBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งอนุญาตให้มีข้อมูลเพิ่มเติมและการควบคุมเมื่อมีการเปลี่ยนแปลง Back Stack ในFragmentManager
(Ib7ce5, b/238686802)
การเปลี่ยนแปลง API
- ตอนนี้ API
Fragment
และFragmentManager
ที่ใช้Intent
หรือIntentSender
มีคำอธิบายประกอบอย่างถูกต้องด้วย@NonNull
แล้วเพื่อป้องกันการส่งผ่านค่า Null ที่เป็นค่าว่าง จะทำให้ API เฟรมเวิร์ก Android ที่เกี่ยวข้องขัดข้องในทันทีที่เมธอดเหล่านี้เรียกใช้ (I06fd4)
เวอร์ชัน 1.6.0-alpha04
7 ธันวาคม 2022
ปล่อย androidx.fragment:fragment-*:1.6.0-alpha04
แล้ว เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentStrictMode
เพิ่มWrongNestedHierarchyViolation
ใหม่ที่ตรวจจับเมื่อส่วนย่อยย่อยฝังอยู่ในลำดับชั้นการแสดงผลของระดับบนสุด แต่ไม่ได้เพิ่มลงในchildFragmentManager
ของระดับบนสุด (I72521, b/249299268)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ Fragment จะกู้คืนสถานะ
SavedStateRegistry
ก่อนวันที่onAttach()
เพื่อให้ใช้งานได้จากวิธีอายุการใช้งานขึ้นทั้งหมด (I1e2b1)
การเปลี่ยนแปลง API
- อาร์ติแฟกต์
fragment-testing-manifest
จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบส่วนย่อยที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
เพื่อหลีกเลี่ยงข้อขัดแย้งเนื่องจากเวอร์ชันความคลาดเคลื่อนระหว่าง fragment-testing
และ androidx.test
(I8e534, b/128612536)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.5.5
: Fragment จะไม่บันทึกสถานะViewModel
อย่างไม่ถูกต้องเป็นส่วนหนึ่งของสถานะมุมมองที่บันทึกไว้ของรีจิสทรีอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.6.0-alpha03
5 ตุลาคม 2022
ปล่อย androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
และ androidx.fragment:fragment-testing:1.6.0-alpha03
แล้ว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ชั้นเรียนที่ขยายเวลา
DialogFragment
จะต้องเรียกใช้ Super ในการลบล้างonDismiss()
(I14798, b/238928865)
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซ Callback ของผู้ให้บริการใหม่ (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) เพื่อดูแลให้ Fragment ได้รับ Callback ที่เหมาะสมเสมอ (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
เสมอ ซึ่งช่วยให้ระบุได้ว่าสถานะของส่วนย่อยเกิดขึ้นที่ใด (b/207158202)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.5.1
: แก้ไขการถดถอยในDialogFragmentCallbacksDetector
ซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.5.1
: ตอนนี้ไลบรารี Fragment จะขึ้นอยู่กับวงจร2.5.1
(Id204c) - จาก Fragment
1.5.1
: ตอนนี้ไลบรารี Fragment จะขึ้นอยู่กับกิจกรรม1.5.1
(I10F07)
รุ่น 1.5
เวอร์ชัน 1.5.7
19 เมษายน 2023
ปล่อย androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
และ androidx.fragment:fragment-testing:1.5.7
แล้ว เวอร์ชัน 1.5.7 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- การใช้
postponeEnterTransition
ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปอีกต่อไป (I2ec7d, b/276375110)
เวอร์ชัน 1.5.6
22 มีนาคม 2023
ปล่อย androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
และ androidx.fragment:fragment-testing:1.5.6
แล้ว เวอร์ชัน 1.5.6 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การนำ Fragment ออก ไม่ว่าจะเพิ่มรายการในเมนูไว้หรือไม่ จะทำให้เมนูของกิจกรรมเป็นโมฆะ (50f098, b/244336571)
- แก้ไขปัญหาการเรียกใช้
clearFragmentResultListener
ภายในsetFragmentResultListener
ไม่ทำงานหากLifecycle
เป็นSTARTED
อยู่แล้ว และมีผลลัพธ์ให้อยู่แล้ว (If7458)
เวอร์ชัน 1.5.5
7 ธันวาคม 2022
ปล่อย androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
และ androidx.fragment:fragment-testing:1.5.5
แล้ว เวอร์ชัน 1.5.5 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- Fragment จะไม่บันทึกสถานะ
ViewModel
อย่างไม่ถูกต้องเป็นส่วนหนึ่งของสถานะดูที่บันทึกไว้ของรีจิสทรีอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.5.4
24 ตุลาคม 2022
ปล่อย androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
และ androidx.fragment:fragment-testing:1.5.4
แล้ว เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในกรณีที่การใช้
FragmentController
ที่กำหนดเองกับโฮสต์ที่ไม่ได้ใช้อินเทอร์เฟซ Callback ของผู้ให้บริการ (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) และการเรียกใช้ฟังก์ชันมอบหมายที่เลิกใช้งานแล้วจะเผยแพร่ไปยัง Fragment ย่อยไม่สำเร็จ (I9B380)
เวอร์ชัน 1.5.3
21 กันยายน 2022
ปล่อย androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
และ androidx.fragment:fragment-testing:1.5.3
แล้ว เวอร์ชัน 1.5.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดที่ทำให้ Fragment ในสแต็กด้านหลังได้รับ Callback
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
และonConfigurationChanged()
(I34581, I8dfe6, b/242570955) - Fragment ย่อยที่ซ้อนกันจะไม่ได้รับ Callback ของ
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 จะขึ้นอยู่กับวงจร
2.5.1
(Id204c) - ตอนนี้ไลบรารี Fragment จะขึ้นอยู่กับกิจกรรม
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 Integration -
Fragment
สามารถให้บริการViewModelProvider.Factory
แบบไม่เก็บสถานะผ่านCreationExtras
ของ Lifecycle2.5.0
ได้แล้ว - การผสานรวมกล่องโต้ตอบคอมโพเนนต์ -
DialogFragment
ใช้ComponentDialog
ผ่านกิจกรรม1.5.0
เป็นกล่องโต้ตอบเริ่มต้นที่แสดงผลโดยonCreateDialog()
- การเปลี่ยนโครงสร้างอินสแตนซ์ที่บันทึกไว้ - ส่วนย่อยเริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์แล้ว ซึ่งเป็นความพยายามที่จะช่วยระบุสถานะที่มีการบันทึกไว้ในส่วนย่อยและแหล่งที่มาของรัฐให้ชัดเจน การเปลี่ยนแปลงปัจจุบันมีดังต่อไปนี้
- ตอนนี้
FragmentManager
จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงในBundle
แทนที่จะบันทึกในParcelable
ที่กำหนดเองโดยตรง - ตอนนี้ผลลัพธ์ที่ตั้งค่าผ่าน
Fragment Result APIs
ที่ยังไม่ได้นำส่งจะบันทึกไว้แยกต่างหากจากสถานะภายในของFragmentManager
- ตอนนี้สถานะที่เชื่อมโยงกับแต่ละส่วนย่อยจะบันทึกแยกต่างหากจากสถานะภายในของ
FragmentManager
ซึ่งจะช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับส่วนย่อยกับรหัสที่ไม่ซ้ำกันซึ่งอยู่ในการบันทึกการแก้ไขข้อบกพร่องของFragment
ได้
- ตอนนี้
การเปลี่ยนแปลงอื่นๆ
- ตอนนี้
FragmentStrictMode
ช่วยให้ Fragment ส่วนตัวของบุคคลที่สามในการข้ามบทลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้allowViolation()
กับชื่อคลาส - เราเลิกใช้งาน Fragment API สำหรับการระบุเมนูให้กับ
ActionBar
ของกิจกรรมแล้ว APIMenuHost
และMenuProvider
ที่เพิ่มลงในกิจกรรม1.4.0
จะมี API ที่เทียบเท่าตามวงจรที่ทดสอบได้ซึ่งทดสอบได้ ซึ่ง Fragment ควรใช้
เวอร์ชัน 1.5.0-rc01
11 พฤษภาคม 2022
ปล่อย androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
และ androidx.fragment:fragment-testing:1.5.0-rc01
แล้ว เวอร์ชัน 1.5.0-rc01 มีคอมมิตเหล่านี้
การเปลี่ยนโครงสร้างอินสแตนซ์ที่บันทึกไว้
- ตอนนี้สถานะที่เชื่อมโยงกับแต่ละส่วนจะได้รับการบันทึกแยกต่างหากจากสถานะภายในของ
FragmentManager
ซึ่งจะช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับส่วนย่อยกับรหัสที่ไม่ซ้ำกันซึ่งอยู่ในการบันทึกการแก้ไขข้อบกพร่องของ 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 API ที่ยังไม่ได้นำส่งจะได้รับการบันทึกแยกจากสถานะภายในของ
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
เลิกใช้งานแล้ว หากต้องการจัดการเมนูและรายการในเมนู คุณควรใช้ 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
ของกิจกรรมแล้ว เนื่องจากมีการเชื่อมโยง Fragment API กับกิจกรรมอย่างแน่นหนาและไม่สามารถทดสอบแยกกันได้ APIMenuHost
และMenuProvider
ที่เพิ่มลงในกิจกรรม1.4.0-alpha01
จะมี API ที่เทียบเท่าตามวงจรที่ทดสอบได้ซึ่งทดสอบได้ ซึ่ง Fragment ควรใช้ (I50a59, I20758)
แก้ไขข้อบกพร่อง
- ตอนนี้
SavedStateViewFactory
รองรับการใช้CreationExtras
แล้ว แม้ว่าจะเริ่มต้นด้วยSavedStateRegistryOwner
ก็ตาม หากมีการระบุค่าเพิ่มเติม ระบบจะไม่สนใจอาร์กิวเมนต์เริ่มต้น (I6c43b, b/224844583)
เวอร์ชัน 1.5.0-alpha03
23 กุมภาพันธ์ 2022
ปล่อย androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
และ androidx.fragment:fragment-testing:1.5.0-alpha03
แล้ว เวอร์ชัน 1.5.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้คุณสามารถส่ง
CreationExtras
ไปยังby viewModels()
และby activityViewModels()
ฟังก์ชัน (Ibefe7, b/217601110)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
DialogFragment
ใช้ComponentDialog
เป็นค่าเริ่มต้น แสดงกล่องโต้ตอบโดยonCreateDialog()
(If3784, b/217618170)
เวอร์ชัน 1.5.0-alpha02
9 กุมภาพันธ์ 2022
ปล่อย androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
และ androidx.fragment:fragment-testing:1.5.0-alpha02
แล้ว เวอร์ชัน 1.5.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
FragmentStrictMode
ช่วยให้ Fragment ส่วนตัวของบุคคลที่สามในการข้ามบทลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้allowViolation()
กับชื่อคลาส (I8f678)
เวอร์ชัน 1.5.0-alpha01
26 มกราคม 2022
ปล่อย androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
และ androidx.fragment:fragment-testing:1.5.0-alpha01
แล้ว เวอร์ชัน 1.5.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
Fragment
ได้ผสานรวมกับ ViewModel CreationExtras ซึ่งเป็นส่วนหนึ่งของ Lifecycle2.5.0-alpha01
แล้ว (I3060b, b/207012585)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.4.1
:FragmentContainerView
จะไม่สร้างสถานะที่ผิดกฎหมายอีกต่อไป ข้อยกเว้นเมื่อรหัสข้อมูลพร็อพเพอร์ตี้ที่สร้างจาก XML มีค่าลบ (Ic185b, b/213086140) - จาก Fragment
1.4.1
: เมื่อใช้ lambda แบบownerProducer
ที่กำหนดเองกับฟังก์ชัน Lazy ของby viewModels()
ตอนนี้โมเดลจะใช้defaultViewModelProviderFactory
จากเจ้าของนั้นหากไม่มีการระบุViewModelProvider.Factory
ที่กำหนดเองแทนที่จะใช้จากโรงงานของ Fragment ทุกครั้ง (I56170, b/214106513) - แก้ไขข้อขัดข้องเมื่อเข้าถึง
ViewModel
เป็นครั้งแรกจาก CallbackregisterForActivityResult()
ของ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)- เมื่อใช้ lambda แบบกำหนดเอง
ownerProducer
กับฟังก์ชันby viewModels()
แบบ Lazy Loading จะใช้defaultViewModelProviderFactory
จากเจ้าของคนดังกล่าวหาก ไม่ได้ใส่ViewModelProvider.Factory
แทนที่จะใช้ส่วนย่อยเสมอ โรงงาน (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
- API ของ
FragmentStrictMode
มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกพิมพ์ข้อความบันทึก เรียก Listener ที่กำหนดเองของคุณเอง หรือทำให้แอปขัดข้องได้ คุณสามารถตั้งค่าFragmentStrictMode.Policy
ที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่ทริกเกอร์ในFragmentManager
ผ่านเมธอดsetStrictModePolicy()
ใหม่ได้ นโยบายดังกล่าวมีผลกับFragmentManager
นั้นและส่งผลกับผู้จัดการส่วนย่อยย่อยที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดู StrictMode สำหรับ Fragment ตอนนี้
FragmentContainerView
มีเมธอดgetFragment()
ซึ่งแสดงผลส่วนย่อยที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งจะใช้ตรรกะเดียวกับfindFragmentById()
ที่มีรหัสFragmentContainerView
แต่อนุญาตให้ทำเชนการโทรได้val navController = binding.container.getFragment<NavHostFragment>().navController
ตอนนี้
FragmentScenario
นําCloseable
ไปใช้แล้ว ซึ่งช่วยให้คุณใช้กับเมธอดuse
ของ Kotlin หรือลองใช้ด้วยทรัพยากรได้เพิ่มเมื่อ
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมแบบมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragments ไหมAPI เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)
ถูกนำออกและตอนนี้มีเฉพาะตัวจัดการสถานะใหม่เป็นตัวเลือกเดียว
แบ็กสแต็กหลายรายการ
FragmentManager
จะเก็บสแต็ก Back Stack ที่ประกอบด้วยธุรกรรม Fragment ที่ใช้ addToBackStack()
วิธีนี้ช่วยให้คุณเติมข้อมูลธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วยส่วนย่อย เพื่อให้ส่วนย่อยของคุณคืนค่าสถานะได้อย่างเหมาะสม
รุ่นนี้ต่อยอดจากกลไกเหล่านี้ด้วยการให้บริการ API ของ FragmentManager
ใหม่ 3 รายการ ได้แก่ saveBackStack(String name)
, restoreBackStack(String name)
และ clearBackStack(String name)
API เหล่านี้ใช้ name
เดียวกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของส่วนย่อยทั้งหมดที่เพิ่มลงในธุรกรรมเหล่านั้น และให้คุณกู้คืนธุรกรรมและส่วนย่อยเหล่านั้นในภายหลังได้ด้วยสถานะเดิม ซึ่งจะช่วยให้คุณ "สลับ" ระหว่างสแต็ก Back หลายๆ สแต็กได้อย่างมีประสิทธิภาพโดยการบันทึก Back Stack ปัจจุบันและกู้คืน Back Stack ที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่ข้อมูลไม่พร้อมกันและส่งผลให้ธุรกรรม Fragment ทั้งหมดกลับไปเป็นชื่อเฉพาะนั้นถูกย้อนกลับ ("ปรากฏการณ์") และส่วนย่อยที่เพิ่มเข้ามาใดๆ จะถูกทำลายและนำออก แต่มีความแตกต่างกันอยู่บางประการที่สำคัญดังนี้
saveBackStack()
เป็นราคาที่ครอบคลุมเสมอ- ซึ่งต่างจาก
popBackStack()
ซึ่งจะแสดงธุรกรรมทั้งหมดในกลุ่มแบ็กสแต็กหากไม่พบชื่อที่ระบุในแบ็กสแต็กหรือหากมีการระบุชื่อค่าว่างsaveBackStack()
จะไม่ดำเนินการใดๆ หากคุณยังไม่เคยทำธุรกรรม Fragment ด้วยaddToBackStack()
ด้วยชื่อที่ตรงกันทุกประการและไม่ใช่ค่าว่างนั้น - ระบบจะบันทึกสถานะของส่วนย่อยทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ "ดู" ของทุกแฟรกเมนต์ โดยจะมีการเรียกใช้
onSaveInstanceState()
ของทุกส่วนย่อย รวมถึงคืนค่าสถานะนั้น และเก็บอินสแตนซ์ViewModel
ใดๆ ที่เชื่อมโยงกับส่วนย่อยเหล่านั้นไว้ (และ ไม่ เรียกใช้onCleared()
กับส่วนย่อยนั้น)
ธุรกรรมส่วนย่อยที่สามารถใช้กับ saveBackStack()
ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมแบบแยกส่วนทุกรายการต้องใช้
setReorderingAllowed(true)
เพื่อให้แน่ใจว่าจะกู้คืนธุรกรรมเป็นการดำเนินการระดับอะตอมรายการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีทุกอย่างในตัวเอง (กล่าวคือ ต้องไม่อ้างอิงส่วนย่อยใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดแจ้ง) เพื่อให้สามารถกู้คืนชุดรายการธุรกรรมดังกล่าวในภายหลังได้ ไม่ว่าจะมีการเปลี่ยนแปลงใดๆ กับแบ็กสแต็กในช่วงเวลาหรือการเปลี่ยนแปลงใดก็ตาม
- แฟรกเมนต์ที่บันทึกไว้ทั้งหมดอาจเป็นส่วนย่อยที่เก็บไว้หรือมีส่วนย่อยที่เก็บรักษาไว้ในชุดการส่งต่อย่อยของแฟรกเมนต์ เพื่อให้มั่นใจว่า
FragmentManager
ไม่ส่งกลับการอ้างอิงใดๆ ไปยังส่วนย่อยที่บันทึกไว้หลังจากที่บันทึกแฟรกเมนต์สำรอง
คล้ายกับ saveBackStack()
, restoreBackStack()
และ clearBackStack()
ซึ่งจะคืนค่าสแต็กแบ็กที่บันทึกไว้ก่อนหน้านี้หรือล้างสแต็กด้านหลังที่บันทึกไว้ก่อนหน้านี้ ทั้งสองจะไม่ดำเนินการใดๆ หากก่อนหน้านี้คุณยังไม่เคยเรียก 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()
ลง ทั้งลำดับชั้นก่อนที่จะเปิดตัว Callback ของตนเอง (Iedc20, b/77504618) - ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อออกจาก ส่วนย่อยที่มีแป้นพิมพ์ที่เปิดอยู่ไปยังส่วนย่อยที่มีมุมมองนักรีไซเคิล (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) - เพิ่มข้อผิดพลาด Lint
FragmentAddMenuProvider
สำหรับการแก้ไขการใช้งาน Fragment Lifecycle ในวงจรของมุมมอง Fragment เมื่อใช้ API ของaddMenuProvider
ของMenuHost
(aosp/1830457, b/200326272)
การอัปเดตเอกสารประกอบ
- ตอนนี้ข้อความการเลิกใช้งานสำหรับ API ได้รับการจัดการโดย API ผลลัพธ์ของกิจกรรม ซึ่งได้แก่
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
และonRequestPermissionsResult
ให้ขยายพร้อมรายละเอียดเพิ่มเติมแล้ว (cce80f) - เราได้ขยายข้อความการเลิกใช้งานของ
onActivityCreated()
ทั้งFragment
และDialogFragment
พร้อมรายละเอียดเพิ่มเติมแล้ว (224db4)
เวอร์ชัน 1.4.0-alpha09
15 กันยายน 2021
ปล่อย androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
และ androidx.fragment:fragment-testing:1.4.0-alpha09
แล้ว เวอร์ชัน 1.4.0-alpha09 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถโทรหา
clearBackStack(name)
เพื่อ ล้างสถานะที่บันทึกไว้ก่อนหน้านี้กับsaveBackStack(name)
(I70cd7)
การเปลี่ยนแปลง API
- เขียนชั้นเรียน
FragmentContainerView
ใหม่ใน Kotlin แล้ว ตรวจสอบว่าฟังก์ชันgetFragment
ทำงานตาม ความสามารถในการเว้นว่าง (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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ปรับปรุงการตรวจสอบ Lint ของ
UseRequireInsteadOfGet
เพื่อจัดการวงเล็บที่ซ้ำซ้อนได้ดียิ่งขึ้น (I2d865) - ปรับปรุงการตรวจสอบ Lint ของ
UseGetLayoutInflater
เพื่อจัดการกับกรณีปัญหา Edge อื่นๆ เพิ่มเติม (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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการย้อนกลับหลายหน้า
ซ้อนกันเมื่อสลับระหว่างสแต็กด้านหลังอย่างรวดเร็ว
ที่จะปรากฏเป็น
IllegalStateException
ขณะคืนค่าFragmentTransaction
หรือ สำเนาที่สองของส่วนย่อยที่ปรากฏขึ้น (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
จะปลดล็อกทุกครั้งได้แล้ว สถานะที่บันทึกไว้เป็นการดำเนินการแรกในวงจร Callback ที่จะลบล้าง (I6db7a)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.3.6
: ตอนนี้ Fragment จะขึ้นอยู่กับกิจกรรม1.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
ที่ จะเกิดขึ้นหลังจากคืนค่า Back Stack ที่มีธุรกรรมหลายรายการ เมื่อใช้restoreBackStack()
API สำหรับ รองรับสแต็กแบ็กสแต็กได้หลายรายการ ยังแก้ไขได้ ปัญหาที่setReorderingAllowed(true)
ไม่ได้รับการตรวจสอบสำหรับธุรกรรมทั้งหมด (I8c593) - แก้ไขปัญหาที่
FragmentManager
จะ ดำเนินการคืนค่าสถานะที่บันทึกไว้ก่อนหน้านี้ไม่ถูกต้อง ของส่วนย่อยแม้ว่าส่วนย่อยนั้นจะถูกนำออกไปแล้ว จาก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
มีเพลงใหม่แล้ว แบบละเอียดที่ระบุคอนเทนเนอร์ที่ กำลังเพิ่มส่วนย่อยเข้าไป (Ib55f8) - คลาสกรณีการใช้งานสำหรับ
TargetFragmentUsageViolation
มีข้อความแสดงข้อผิดพลาดโดยละเอียดมากขึ้นที่จะรวมส่วนย่อย ที่ก่อให้เกิดการละเมิดและข้อมูลอื่นๆ ที่มีอยู่ (Icc6ac) - ชั้นเรียนที่ขยายเวลา
RetainInstanceUsageViolation
มีข้อความแสดงข้อผิดพลาดโดยละเอียดที่มีส่วนย่อย ที่ก่อให้เกิดการละเมิด (I6Bd55) - ตอนนี้
FragmentReuseViolation
มีเพลงใหม่แล้ว รายละเอียดที่มี รหัสของส่วนย่อย (I28ce2) - ตอนนี้
SetUserVisibleHintViolation
มีเพลงใหม่แล้ว รายละเอียดข้อความแสดงข้อผิดพลาดที่ระบุสิ่งที่ผู้ใช้ คำแนะนำที่ปรากฏถูกตั้งค่าเป็น (Ib2d5f)
การเปลี่ยนแปลงลักษณะการทำงาน
- เปลี่ยนกลับข้อจำกัดในการเรียกใช้
fitsSystemWindows
ในFragmentContainerView
แล้ว การดำเนินการนี้จะไม่ทำให้แอปของคุณขัดข้องอีกต่อไป (6b8ddd, b/190622202)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.3.5
: แก้ไขการถดถอยในการเปลี่ยนองค์ประกอบที่แชร์ซึ่งนำมาใช้ใน Fragment1.3.4
โดย aosp/1679887 ตอนนี้ Fragment จะจัดการกลุ่มการเปลี่ยนได้อย่างถูกต้อง (ทั้งตั้งค่าผ่านtransitionGroup="true"
โดยตรงหรือโดยอ้อมผ่านtransitionName
หรือbackground
) และ องค์ประกอบที่แชร์จะไม่ใช้IndexOutOfBoundsException
วินาทีอีกต่อไป (I16484, b/188679569, b/188969304) FragmentManager
จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนส่วนการนำออก (I573dd, b/183634730)- การตรวจสอบ Lint ของ
OnCreateDialogIncorrectCallback
จะไม่ นานขึ้นเมื่อประเมินตัวแปรระดับบนสุด (0a9efa, b/189967522)
เวอร์ชัน 1.4.0-alpha02
2 มิถุนายน 2021
ปล่อย androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
และ androidx.fragment:fragment-testing:1.4.0-alpha02
แล้ว เวอร์ชัน 1.4.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
FragmentStrictMode
จะบันทึกการละเมิดเสมอเมื่อเปิดใช้การบันทึกผ่านFragmentManager
ไม่ว่าจะมีการใช้นโยบายโหมดเข้มงวดในปัจจุบันหรือไม่ก็ตาม (I02df6, b/187872638) ตอนนี้
FragmentStrictMode
รองรับการยกเว้นคลาสFragment
บางคลาสจากโหมดเข้มงวดViolation
ซึ่งช่วยให้คลาสนั้นข้ามการลงโทษใดๆ ได้ (Ib4e5d, b/184786736)เราได้ขยายคลาส
FragmentStrictMode
Violation
เพื่อเพิ่มข้อมูลโครงสร้างตามการละเมิดแต่ละรายการ วิธีนี้ช่วยให้คุณยืนยันสิ่งที่ทำให้เกิดการละเมิดได้ รวมถึงส่วนย่อยของการละเมิด (If5118, b/187871150)Violation
แต่ละรายการจะมีข้อมูลต่อไปนี้- ขณะนี้
WrongFragmentContainerViolation
มีViewGroup
ที่Fragment
พยายามเพิ่ม (I83c75, b/187871150) TargetFragmentUsageViolation
ได้ขยายไปยังSetTargetFragmentUsageViolation
GetTargetFragmentUsageViolation
และGetTargetFragmentRequestCodeUsageViolation
โดยมีSetTargetFragmentUsageViolation
ที่มีส่วนย่อยเป้าหมายและโค้ดคำขอ (I741b4, b/187871150)- ตอนนี้
SetUserVisibleHintViolation
มีค่าบูลีนที่ส่งผ่านไปยังsetUserVisibleHint()
แล้ว (I00585, b/187871150) - ขณะนี้
FragmentTagUsageViolation
มี ViewGroup ที่แท็ก<fragment>
พยายามขยายส่วนย่อยเข้าไป (I5dbbc, b/187871150) - ขณะนี้
FragmentReuseViolation
มีฟังก์ชัน รหัสที่ไม่ซ้ำกันของอินสแตนซ์ก่อนหน้าของFragment
ที่ทำให้เกิดการละเมิด (I0544d, b/187871150) RetainInstanceUsageViolation
ในขณะนี้ แอบสแตรกต์และมีคลาสย่อย 2 คลาสSetRetainInstanceUsageViolation
และGetRetainInstanceUsageViolation
โดยเป็นตัวแทนของ สำหรับประเภทการละเมิดได้ (Ic81e5, b/187871150)
- ขณะนี้
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
FragmentContainerView
มีการส่งข้อยกเว้นเมื่อพยายามเปลี่ยนแอตทริบิวต์fitsSystemWindow
แบบเป็นโปรแกรมหรือผ่าน XML ควรจัดการส่วนแทรกตามมุมมองของแต่ละส่วนย่อย (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()
ซึ่งแสดงผลส่วนย่อยที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งจะใช้ตรรกะเดียวกับfindFragmentById()
ที่มีรหัสFragmentContainerView
แต่อนุญาตให้ทำเชนการโทรได้ (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
เพิ่มเมื่อ
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมแบบมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragments ไหม (I46652)
แบ็กสแต็กหลายรายการ
FragmentManager
จะเก็บสแต็ก Back Stack ที่ประกอบด้วยธุรกรรม Fragment ที่ใช้ addToBackStack()
วิธีนี้ช่วยให้คุณเติมข้อมูลธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วยส่วนย่อย เพื่อให้ส่วนย่อยของคุณคืนค่าสถานะได้อย่างเหมาะสม
รุ่นนี้ต่อยอดจากกลไกเหล่านี้ด้วยการให้บริการ API ของ FragmentManager
ใหม่ 2 รายการ ได้แก่ saveBackStack(String name)
และ restoreBackStack(String name)
API เหล่านี้ใช้ name
เดียวกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของส่วนย่อยทั้งหมดที่เพิ่มลงในธุรกรรมเหล่านั้น และให้คุณกู้คืนธุรกรรมและส่วนย่อยเหล่านั้นในภายหลังได้ด้วยสถานะเดิม ซึ่งจะช่วยให้คุณ "สลับ" ระหว่างสแต็ก Back หลายๆ สแต็กได้อย่างมีประสิทธิภาพโดยการบันทึก Back Stack ปัจจุบันและกู้คืน Back Stack ที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่ข้อมูลไม่พร้อมกันและส่งผลให้ธุรกรรม Fragment ทั้งหมดกลับไปเป็นชื่อเฉพาะนั้นถูกย้อนกลับ ("ปรากฏการณ์") และส่วนย่อยที่เพิ่มเข้ามาใดๆ จะถูกทำลายและนำออก แต่มีความแตกต่างกันอยู่บางประการที่สำคัญดังนี้
saveBackStack()
เป็นราคาที่ครอบคลุมเสมอ- ซึ่งต่างจาก
popBackStack()
ซึ่งจะแสดงธุรกรรมทั้งหมดในกลุ่มแบ็กสแต็กหากไม่พบชื่อที่ระบุในแบ็กสแต็กหรือหากมีการระบุชื่อค่าว่างsaveBackStack()
จะไม่ดำเนินการใดๆ หากคุณยังไม่เคยทำธุรกรรม Fragment ด้วยaddToBackStack()
ด้วยชื่อที่ตรงกันทุกประการและไม่ใช่ค่าว่างนั้น - ระบบจะบันทึกสถานะของส่วนย่อยทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ "ดู" ของทุกแฟรกเมนต์ โดยจะมีการเรียกใช้
onSaveInstanceState()
ของทุกส่วนย่อย รวมถึงคืนค่าสถานะนั้น และเก็บอินสแตนซ์ViewModel
ใดๆ ที่เชื่อมโยงกับส่วนย่อยเหล่านั้นไว้ (และ ไม่ เรียกใช้onCleared()
กับส่วนย่อยนั้น)
ธุรกรรมส่วนย่อยที่สามารถใช้กับ saveBackStack()
ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมแบบแยกส่วนทุกรายการต้องใช้
setReorderingAllowed(true)
เพื่อให้แน่ใจว่าจะกู้คืนธุรกรรมเป็นการดำเนินการระดับอะตอมรายการเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีทุกอย่างในตัวเอง (กล่าวคือ ต้องไม่อ้างอิงส่วนย่อยใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดแจ้ง) เพื่อให้สามารถกู้คืนชุดรายการธุรกรรมดังกล่าวในภายหลังได้ ไม่ว่าจะมีการเปลี่ยนแปลงใดๆ กับแบ็กสแต็กในช่วงเวลาหรือการเปลี่ยนแปลงใดก็ตาม
- แฟรกเมนต์ที่บันทึกไว้ทั้งหมดอาจเป็นส่วนย่อยที่เก็บไว้หรือมีส่วนย่อยที่เก็บรักษาไว้ในชุดการส่งต่อย่อยของแฟรกเมนต์ เพื่อให้มั่นใจว่า
FragmentManager
ไม่ส่งกลับการอ้างอิงใดๆ ไปยังส่วนย่อยที่บันทึกไว้หลังจากที่บันทึกแฟรกเมนต์สำรอง
เช่นเดียวกับ saveBackStack()
restoreBackStack()
ไม่ดำเนินการใดๆ หากก่อนหน้านี้คุณไม่เคยเรียก saveBackStack()
ด้วยชื่อเดียวกัน (b/80029773)
Fragment StrictMode
API ของ FragmentStrictMode
มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกพิมพ์ข้อความบันทึก เรียก Listener ที่กำหนดเองของคุณเอง หรือทำให้แอปขัดข้องได้ คุณสามารถตั้งค่า FragmentStrictMode.Policy
ที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่ทริกเกอร์ใน FragmentManager
ผ่านเมธอด setStrictModePolicy()
ใหม่ได้ นโยบายดังกล่าวมีผลกับ FragmentManager
นั้นและส่งผลกับผู้จัดการส่วนย่อยย่อยที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง (#123, #131, #150, b/143774122)
detectFragmentReuse()
ตรวจพบว่ามีการเพิ่มอินสแตนซ์Fragment
ที่นำออกไปก่อนหน้านี้อีกครั้งลงในFragmentManager
หรือไม่ คุณไม่ควรโต้ตอบหรือเก็บการอ้างอิงไปยังอินสแตนซ์Fragment
หลังจากที่ทำลายและนำออกจากFragmentManager
แล้ว (#142, b/153738653)detectFragmentTagUsage()
จะตรวจพบเมื่อคุณใช้แท็ก<fragment>
ใน XML การออกแบบ คุณควรใช้FragmentContainerView
เสมอเมื่อขยาย Fragment ให้เป็นส่วนหนึ่งของเลย์เอาต์ (#141, b/153738235)detectWrongFragmentContainer()
จะตรวจจับเมื่อคุณเพิ่ม Fragment ลงในคอนเทนเนอร์ที่ไม่ใช่FragmentContainerView
คุณควรใช้FragmentContainerView
เป็นคอนเทนเนอร์สำหรับ Fragment ในเลย์เอาต์เสมอ (#146, b/181137036)detectRetainInstanceUsage()
จะตรวจจับเมื่อคุณใช้ API ของsetRetainInstance()
หรือgetRetainInstance()
ที่เลิกใช้งานแล้ว (#140, b/153737954)detectSetUserVisibleHint()
จะตรวจจับเมื่อคุณใช้setUserVisibleHint()
API ที่เลิกใช้งานแล้ว (#136, b/153738974)detectTargetFragmentUsage()
จะตรวจจับเมื่อคุณใช้ API ของsetTargetFragment()
,getTargetFragment()
หรือgetTargetRequestCode()
ที่เลิกใช้งานแล้ว (#139, b/153737745)
การเปลี่ยนแปลง API
- API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)
ถูกนำออกและตอนนี้มีเฉพาะตัวจัดการสถานะใหม่เป็นตัวเลือกเดียว (I90036, b/162776418) - ตอนนี้
FragmentScenario
นําCloseable
ไปใช้แล้ว ซึ่งช่วยให้คุณใช้กับเมธอดuse
ของ Kotlin หรือลองใช้ด้วยทรัพยากรได้ (#121, b/143774122)
การตรวจสอบ Lint ใหม่
- ตอนนี้การตรวจสอบ Lint ของ
UseGetLayoutInflater
จะเตือนเมื่อใช้LayoutInflater.from(Context)
ภายในDialogFragment
คุณควรใช้เมธอดgetLayoutInflater()
ของส่วนย่อยกล่องโต้ตอบเสมอเพื่อรับค่าที่เหมาะสมสำหรับLayoutInflater
(#156, b/170781346) - ขณะนี้การตรวจสอบ Lint ของ
DialogFragmentCallbacksDetector
จะเตือนเมื่อเรียกsetOnCancelListener
หรือsetOnDismissListener
ในเมธอดonCreateDialog()
ของDialogFragment
- ผู้ฟังเหล่านี้เป็นของDialogFragment
เอง และคุณควรลบล้างonCancel()
และonDismiss()
เพื่อให้ได้รับ Callback เหล่านี้ (#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()
(ดังที่ Fragments ที่มีคำอธิบายประกอบ@AndroidEntryPoint
ใช้เมื่อใช้ Hilt) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้างSavedStateViewModelFactory
ที่บันทึกและคืนค่าสถานะควบคู่ไปกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368) - จาก Fragment 1.3.4: เมื่อใช้
FragmentContainerView
ใน API 29 องค์ประกอบจะไม่มีข้อมูล ส่งเรื่องอื่นๆ ไปเรื่อยๆ โดยไม่มีกำหนด แก้ไขปัญหาเกี่ยวกับอินสแตนซ์BottomNavigationBar
และFloatingActionButton
(I1bb78, b/186012452) - จาก Fragment 1.3.4: ตอนนี้คุณดึงข้อมูล Parcelable จากผลลัพธ์ Fragment ได้แล้ว กลุ่มหลังเสร็จสิ้นกระบวนการ (I65932, b/187443158)
- จาก Fragment 1.3.4: เมื่อเปลี่ยนองค์ประกอบที่แชร์ใน ViewGroup หาก
ViewGroup ตั้งค่า
transitionGroup
เป็น "เท็จ" ตอนนี้จะทําให้ การเปลี่ยนแปลง (I99675)
การสนับสนุนภายนอก
- ขอบคุณ simonschiller ให้
FragmentScenario
ติดตั้งใช้งานCloseable
(#121, b/143774122) - ขอขอบคุณ simonschiller ที่เพิ่ม
FragmentStrictMode
API ทั้งหมดสําหรับรุ่นนี้ - ขอขอบคุณ tatocaster ที่เพิ่มการตรวจสอบ Lint
UseGetLayoutInflater
(#156, b/170781346) - ขอขอบคุณ tatocaster ที่เพิ่มการตรวจสอบ Lint
DialogFragmentCallbacksDetector
(#171, b/181780047)
เวอร์ชัน 1.3
เวอร์ชัน 1.3.6
21 กรกฎาคม 2021
ปล่อย androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
และ androidx.fragment:fragment-testing:1.3.6
แล้ว เวอร์ชัน 1.3.6 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- จาก Fragment
1.4.0-alpha03
:FragmentManager
จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนส่วนการนำออก (I573dd, b/183634730) - ตอนนี้มุมมองของ Fragment ได้รับการตั้งค่าเป็น
GONE
อย่างถูกต้องเมื่อใช้hide()
เมื่อมุมมองรูทมีการตั้งค่าtransitionGroup=”true”
(aosp/1766655, b/193603427) FragmentActivity
ปลดล็อกเสมอแล้ว สถานะที่บันทึกไว้เป็นการดำเนินการแรกในวงจร Callback ที่จะลบล้าง (I6db7a)
การอัปเดตการขึ้นต่อกัน
- จาก Fragment
1.3.6
: ตอนนี้ Fragment จะขึ้นอยู่กับกิจกรรม1.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 ได้แล้ว กลุ่มหลังเสร็จสิ้นกระบวนการ (I65932, b/187443158)
- เมื่อทำการเปลี่ยนองค์ประกอบที่แชร์ใน ViewGroup หาก
ViewGroup ตั้งค่า
transitionGroup
เป็น "เท็จ" ตอนนี้จะทําให้ การเปลี่ยนแปลง (I99675)
เวอร์ชัน 1.3.3
21 เมษายน 2021
ปล่อย androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
และ androidx.fragment:fragment-testing:1.3.3
แล้ว เวอร์ชัน 1.3.3 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ใช้
SavedStateViewModelFactory
ได้แล้ว เมื่อใช้กับSavedStateRegistryOwner
ซึ่งแสดงผลโดย โดยใช้ViewTreeSavedStateRegistryOwner.get()
ด้วย มุมมองของ Fragment (I21acf, b/181577191)
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่พบใน Fragment
1.3.2
ซึ่งจะทำให้ภาพเคลื่อนไหวpopEnter
ไม่ทำงานเมื่อเรียกFragmentTransaction
ที่มีการดำเนินการsetPrimaryNavFragment
เช่นคำสั่งที่NavHostFragment
ใช้ (I38c87, b/183877426) - ตอนนี้
FragmentContainerView
จะดูแลให้มีการจัดส่งFragment
ชุดใหม่WindowInsets
เพื่อให้มั่นใจได้ว่าแต่ละ Fragment สามารถใช้ส่วนแทรกได้อย่างอิสระ (I63f68, b/172153900) - ตอนนี้
DialogFragment
จะจัดการกรณีที่มีการเพิ่มส่วนย่อยย่อยลงในคอนเทนเนอร์ที่มีรหัสเดียวกันกับคอนเทนเนอร์ในคลาสDialog
ที่กำหนดเองของคุณเรียบร้อยแล้ว เพื่อแก้ไขปัญหาเกี่ยวกับลำดับชั้นการแสดงผลเมื่อใช้รหัสที่ใช้ภายในโดยกล่องโต้ตอบ เช่นBottomSheetDialog
(Ie6279, b/180021387) - ตอนนี้
FragmentManager.dump()
เยื้องส่วนย่อยแรกในรายการของส่วนย่อยที่ใช้งานอยู่ได้อย่างเหมาะสมแล้ว (If5c33, b/183705451)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- ตอนนี้ตัวจัดการสถานะ 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- เมื่อเรียกใช้ทั้งการดำเนินการ
popBackStack()
และcommit()
การดำเนินการครั้งสุดท้ายจะกำหนดทิศทาง ภาพเคลื่อนไหวแบบไดนามิก แทนการใช้ภาพเคลื่อนไหวแบบป๊อป ภาพเคลื่อนไหว (I7072e, b/181142246) - การดูภายในลำดับชั้นขององค์ประกอบที่แชร์จะไม่มีอีกต่อไป ล้างชื่อการเปลี่ยนแล้วเมื่อเปลี่ยนองค์ประกอบที่แชร์ (I4d4a6, b/179934757)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Fragment จะขึ้นอยู่กับกิจกรรม 1.2.2 ซึ่งจะแก้ไขปัญหาด้วยการตรวจสอบ Lint ของ
InvalidFragmentVersionForActivityResult
ของกิจกรรมเมื่อใช้ Fragment 1.3.1 ขึ้นไป - ตอนนี้ Fragment จะขึ้นอยู่กับวงจร 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 แล้ว เจ้าของผ่าน DecorView เพื่อให้มั่นใจว่าสามารถใช้DialogFragment
กับComposeView
ได้ (Ib9290, b/180691023)
แก้ไขข้อบกพร่อง
- ส่วนย่อยที่พองขึ้นเป็นกิจกรรม
RESUMED
อยู่แล้วโดยใช้ ตอนนี้ FragmentContainerView แสดงได้อย่างถูกต้องหลังการกำหนดค่าแล้ว เปลี่ยน (Ie14c8, b/180538371) - ไม่มี
}
เกินมาในส่วนท้ายของส่วนย่อยแล้วtoString()
(I54705, b/177761088) - ตอนนี้เมธอดที่ถูกลบล้างใน FragmentActivity จะรับค่าของ เมธอดฐาน javaDoc (I736ce, b/139548782)
- เอกสารสำหรับ
setFragmentResult
และsetFragmentResultListener
อัปเดต เอกสาร พารามิเตอร์เพื่อให้แสดงว่าไม่ยอมรับ Nullables (I990ba, b/178348386)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- แก้ไขการรั่วไหลของหน่วยความจำในส่วนย่อยที่เกิดจาก
mFocusedView
(Ib4e9e, b/179925887) - ตอนนี้ Fragment จะเรียก
onCreateOptionsMenu
อย่างถูกต้องเมื่อใช้ แสดง/ซ่อนธุรกรรม (I8bce8, b/180255554) - ตอนนี้ส่วนย่อยย่อยที่มีการเปลี่ยนภาพที่เริ่มต้นก่อนที่จะมีการวางส่วนย่อยจะได้รับการติดต่ออย่างเหมาะสมแล้วในตอนนี้
RESUMED
(Ic11e6, b/180825150) - ส่วนย่อยที่พองขึ้นโดยใช้แท็ก
<fragment>
จะใช้เป็น ไปที่RESUMED
(I452ac, (I9fa49)
การอัปเดตการขึ้นต่อกัน
- ส่วนย่อย 1.3.1 ขึ้นอยู่กับกิจกรรม
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
- ผู้จัดการสถานะใหม่: การเขียนโครงสร้างภายในใหม่ที่สำคัญของ
FragmentManager
ช่วยแก้ไขปัญหาต่างๆ มากมายเกี่ยวกับการจัดการเหตุการณ์ในวงจร ภาพเคลื่อนไหว และการเปลี่ยนภาพ รวมถึงวิธีจัดการส่วนย่อยที่มีการเลื่อนเวลา การผสานการทำงาน API ของกิจกรรม: เพิ่มการสนับสนุนสำหรับ
ActivityResultRegistry
API ที่เปิดตัวใน Activity1.2.0
เพื่อจัดการกับขั้นตอนstartActivityForResult()
+onActivityResult()
รวมถึงขั้นตอนrequestPermissions()
+onRequestPermissionsResult()
โดยไม่ลบล้างเมธอดใน Fragment นอกเหนือไปจากการให้ Hook สำหรับทดสอบขั้นตอนเหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว- รุ่นนี้แก้ปัญหาเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ API ผลของกิจกรรมทำงานใน
FragmentActivity
เวอร์ชันก่อนหน้าไม่ได้ คุณต้องอัปเกรดเป็น Fragment 1.3.0 เพื่อใช้ API ของผลลัพธ์กิจกรรมในFragmentActivity
หรือAppCompatActivity
- รุ่นนี้แก้ปัญหาเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ API ผลของกิจกรรมทำงานใน
Fragment Result API: เพิ่มการสนับสนุนสำหรับการแสดงผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่บน
FragmentManager
วิธีนี้เหมาะสำหรับส่วนย่อยของลำดับชั้น (หลัก/ย่อย), DialogFragments และส่วนย่อยในการนำทาง และดูแลให้มีการส่งผลลัพธ์ไปยัง Fragment ของคุณในขณะที่มีขนาดอย่างน้อยSTARTED
เราเลิกใช้งาน API ส่วนย่อยเป้าหมายแล้วเพื่อเปลี่ยนไปใช้ API ใหม่เหล่านี้ โปรดดูรับผลลัพธ์โดยใช้ Fragment Result APIFragmentOnAttachListener
: เลิกใช้งาน CallbackonAttachFragment()
เมื่อวันที่FragmentActivity
และFragment
แล้ว มีการเพิ่มFragmentOnAttachListener
ใหม่เพื่อมอบทางเลือกที่ยืดหยุ่นมากขึ้นซึ่งจะทำให้การมอบสิทธิ์onAttachFragment()
สามารถแยกผู้ฟังที่ทดสอบได้และรองรับการเพิ่ม Listener ลงใน FragmentManagers นอกเหนือจาก FragmentManager ย่อยโดยตรงของคุณการปรับปรุง
FragmentScenario
: คลาสFragmentScenario
จากอาร์ติแฟกต์fragment-testing
ได้รับการเขียนใหม่ใน Kotlin และได้รับการปรับปรุงหลายส่วนดังนี้- ตอนนี้
FragmentScenario
ใช้setMaxLifecycle()
เพื่อนำmoveToState()
ไปใช้ เพื่อให้แน่ใจว่ามีลักษณะการทำงานที่สอดคล้องกันในทุกระดับ API และแยกสถานะของ Fragment ออกจากกิจกรรมที่สำคัญ - ตอนนี้
FragmentScenario
รองรับการตั้งค่าLifecycle.State
เริ่มต้นเพื่อรองรับการยืนยันสถานะของส่วนย่อยแล้ว ก่อนที่จะย้ายไปที่Lifecycle.State
แต่ละรายการเป็นครั้งแรก - ตอนนี้มีทางเลือกอื่นสำหรับ
FragmentScenario
API ของonFragment
ในรูปแบบของเมธอดส่วนขยายที่แก้ไขของ KotlinwithFragment
ซึ่งให้คุณแสดงผลค่าได้ ที่เห็นเด่นชัดคือมีการแสดงข้อผิดพลาดที่ยกขึ้นมาในบล็อกที่กำหนด
- ตอนนี้
การสนับสนุนของ
ViewTree
: ตอนนี้Fragment
รองรับ API ของViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
และViewTreeSavedStateRegistryOwner
ที่เพิ่มลงใน Lifecycle2.3.0
และ SavedState1.1.0
ซึ่งจะทำให้ Fragment แสดงผลเป็นViewModelStoreOwner
และSavedStateRegistryOwner
และLifecycleOwner
ที่เชื่อมโยงกับ view Lifecycle ของ view Lifecycle ภายในFragment
View
การเปลี่ยนแปลงภาพเคลื่อนไหว
TRANSIT_
รายการ: ตอนนี้เอฟเฟกต์เริ่มต้นของส่วนย่อยTRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
ใช้Animator
แทนAnimation
ตอนนี้ทรัพยากรที่ใช้สร้างผู้สร้างแอนิเมชันเหล่านี้เป็นแบบส่วนตัวแล้วการเลิกใช้งาน
setRetainInstance()
: เลิกใช้งานเมธอดsetRetainInstance()
ใน Fragments แล้ว ในการเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการเก็บรักษาสถานะที่สามารถเชื่อมโยงกับกราฟกิจกรรม ส่วนย่อย และการนำทาง วิธีนี้ช่วยให้นักพัฒนาแอปใช้ Fragment ปกติ (ไม่ใช่เก็บรักษา) และเก็บสถานะที่ต้องการแยกไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาของการรั่วไหลที่พบได้บ่อยในขณะที่ยังคงคุณสมบัติที่เป็นประโยชน์ของการสร้างเดี่ยวและการทำลายสถานะที่เก็บรักษาไว้ (เช่น เครื่องมือสร้างViewModel
และ CallbackonCleared()
ที่แอปได้รับ)การเลิกใช้งานอะแดปเตอร์ ViewPager 1: การเปิดตัว ViewPager2
1.0.0
ทำให้คลาสFragmentPagerAdapter
และFragmentStatePagerAdapter
สำหรับการโต้ตอบกับViewPager
ถูกเลิกใช้งาน ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2
เวอร์ชัน 1.3.0-rc02
27 มกราคม 2021
ปล่อย androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
และ androidx.fragment:fragment-testing:1.3.0-rc02
แล้ว เวอร์ชัน 1.3.0-rc02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
DialogFragment
ระดับบนสุดจะปรากฏเหนือDialogFragment
ย่อยหลังจากการเปลี่ยนแปลงการกำหนดค่า ตอนนี้ส่วนย่อยของกล่องโต้ตอบย่อยจะปรากฏเหนือส่วนย่อยของกล่องโต้ตอบระดับบนสุดเสมอ (I30806, b/177439520) - แก้ปัญหาที่มีการดำเนินการ
hide
ด้วยAnimation
จะทำให้ส่วนที่ซ่อนอยู่กะพริบในตอนท้ายของภาพเคลื่อนไหว (I57e22, b/175417675) - ส่วนย่อยที่มีการเปลี่ยนภาพเพิ่มก่อนลำดับชั้นของมุมมองคือ
ตอนนี้ที่แนบมามีการเข้าถึง
RESUMED
อย่างถูกต้อง (I1fc1d, b/177154873)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- ตอนนี้มุมมองของ Fragment
Lifecycle
จะจัดการกรณีที่มุมมองของ Fragment ถูกทำลายก่อนที่Lifecycle
จะไปถึงCREATED
เพื่อหลีกเลี่ยงข้อยกเว้นที่ระบุว่า "ไม่มีเหตุการณ์จาก INITIALIZED" (eda2bd, b/176138645) - ตอนนี้ส่วนย่อยที่ใช้
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()
และจะไม่ถูกเรียกอีกเมื่อส่วนย่อยระดับบนสุด โทรหาsetMenuVisibility(false)
(Id7de8, b/173203654)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- แก้ไขการรั่วไหลและอาร์ติแฟกต์ภาพเมื่อเพิ่ม
ส่วนย่อยที่มี
Animation
ไปยังFragmentContainerView
แล้วขัดจังหวะการสนทนานั้น ด้วยการดำเนินการแบบป๊อป (I952d8) - แก้ปัญหาที่มุมมองของส่วนย่อย
ยังคงอยู่ในลำดับชั้นการดูหากถูกแทนที่ระหว่าง
onCreate()
หรือonViewCreated()
ของเมธอดนั้น (I8a7d5) - คืนค่าโฟกัสไปยังมุมมองรูทของ Fragment อย่างเหมาะสมแล้วเมื่อ กลับมาทำงานอีกครั้ง (Ifc84b)
- การรวมการดำเนินการป๊อปและแทนที่ไว้ในส่วนย่อยเดียวกัน ตอนนี้ธุรกรรมจะแสดงภาพเคลื่อนไหวที่เหมาะสม (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)
การเปลี่ยนแปลงลักษณะการทำงาน
- FragmentContainerViews ที่ไม่ทำให้ส่วนย่อยพองขึ้นโดยใช้แอตทริบิวต์
class
หรือandroid:name
สามารถนำมาใช้นอกFragmentActivity
ได้แล้ว (Id4397, b/172266337) - ตอนนี้การพยายามตั้งค่าอายุการใช้งานสูงสุดของส่วนย่อยเป็น
DESTROYED
จะแสดงIllegalArgumentException
(Ie7651, b/170765622) - ตอนนี้การเริ่มต้น FragmentActivity ด้วยสถานะ
DESTROYED
จะส่งIllegalArgumentException
(I73590, b/170765622)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- แก้ไขปัญหาที่มุมมองไปไม่ถึงสถานะสุดท้ายถ้าคุณขัดจังหวะการเปลี่ยนส่วนย่อยที่ใช้
Animator
หรือหนึ่งในตัวเลือกTRANSIT_FRAGMENT_
(I92426, b/169874632) - แก้ไขปัญหาที่ป้องกันไม่ให้ระบบทำลายส่วนย่อยที่มี
Animation
ออกอย่างถูกต้อง (I83d65) - การออกจากส่วนย่อยที่มีการเปลี่ยนกลับเอฟเฟ็กต์ ยกเลิกอย่างถูกต้อง และรีสตาร์ทด้วยเอฟเฟ็กต์การป้อนที่เหมาะสม (I62226, b/167092035)
- แก้ไขปัญหาที่การออกจาก
Animator
ของhide()
ไม่ทำงาน (Id7ffe) - ตอนนี้ Fragment ปรากฏอย่างถูกต้องแล้วเมื่อเลื่อนเวลาออกไป จากนั้นจะเริ่มต้นทันที (Ie713b, b/170022857)
- ส่วนย่อยที่นำมุมมองที่โฟกัสออกระหว่างที่ภาพเคลื่อนไหวจะไม่พยายามคืนค่าโฟกัสในมุมมองที่แยกออกมาอีกเมื่อไปถึง
RESUMED
(I38c65, b/172925703)
การสนับสนุนภายนอก
- ตอนนี้
FragmentFactory
แคชคลาสของส่วนย่อยแยกกันสำหรับอินสแตนซ์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>
จะประมวลผลได้อย่างเหมาะสมแล้ว รอจนกว่าจะเพิ่มมุมมองลงในคอนเทนเนอร์ก่อนที่จะย้ายไปยัง STARTED (I02f4c) - ส่วนย่อยที่มองเห็นได้ จากนั้น
setMaxLifecycle()
ไปยังCREATED
เรียกใช้เอฟเฟกต์การออกอย่างถูกต้อง (b/165822335) - การนำชิ้นส่วนที่ถอดออกซึ่งไม่ได้เพิ่มไว้ในสแต็กด้านหลังออกจะไม่ทำให้หน่วยความจำรั่วไหลอีกต่อไป ขอแสดงความนับถือ จาก Nicklas Ansman Giertz! (b/166489383)
- ตอนนี้ส่วนย่อยที่มีการใช้งานจะมี
FragmentManager
ที่ไม่เป็นค่าว่างเสมอ และส่วนย่อยที่มีFragmentManager
ที่ไม่เป็นค่าว่างจะถือว่าใช้งานอยู่เสมอ (aosp/1422346) - ตอนนี้เอฟเฟกต์เริ่มต้นของส่วนย่อย
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
ใช้Animator
แทนAnimation
แล้ว (b/166155034)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- ตอนนี้ Fragment คืนค่าสถานะโฟกัสมุมมองอย่างถูกต้องจาก ก่อนที่จะเริ่มภาพเคลื่อนไหว (Icc256)
- ส่วนย่อยที่มีการเปลี่ยนองค์ประกอบที่แชร์เท่านั้นในขณะนี้ เติมเอฟเฟ็กต์พิเศษอย่างถูกต้อง หมายความว่า สถานะสุดท้าย (Iaebc7, b/166658128)
- ตอนนี้ระบบนำมุมมอง Fragment ออกจากคอนเทนเนอร์เสมอ ก่อนที่จะถูกทำลาย (รหัส 5876)
- ขณะนี้ตัวจัดการสถานะใหม่ลบการออกอย่างต่อเนื่อง ส่วนย่อยก่อนเพิ่มการป้อนมุมมอง (I41a6e)
- ตอนนี้ตัวจัดการสถานะใหม่จะยึดตามการเปลี่ยนแปลงระดับการเข้าถึงของมุมมองส่วนย่อยอย่างชัดเจน ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของการป้อน Fragment เป็น
INVISIBLE
ก่อนที่ภาพเคลื่อนไหวจะเริ่มเล่น จริงๆ แล้วองค์ประกอบนั้นจะยังคงไม่ปรากฏให้เห็น (b/164481490) - ตอนนี้ Fragment จะให้ความสำคัญกับ
Animators
มากกว่าAnimations
ซึ่งหมายความว่า Fragment ที่มีทั้ง 2 ส่วนจะเรียกใช้Animator
เท่านั้นและจะไม่สนใจAnimation
(b/167579557) - ตัวจัดการสถานะใหม่จะไม่ทำให้ Fragment กะพริบอีกต่อไปเมื่อใช้การป้อนภาพเคลื่อนไหว (b/163084315)
ปัญหาที่ทราบ
เมื่อใช้ตัวจัดการสถานะใหม่ หากคุณกดกลับระหว่างการป้อนเอฟเฟกต์พิเศษแทนการกลับไปยังส่วนย่อยก่อนหน้า ระบบจะไม่เพิ่มส่วนย่อยเก่าอีกครั้ง ซึ่งทำให้หน้าจอว่างเปล่า (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 มีคอมมิตเหล่านี้
ผู้จัดการสถานะคนใหม่
รุ่นนี้มีการปรับโครงสร้างภายในโครงสร้างของการจัดการสถานะภายในของ FragmentManager
ซึ่งส่งผลต่อการจัดการเมธอด ภาพเคลื่อนไหว และการเปลี่ยนภาพ ตลอดจนวิธีจัดการธุรกรรมที่มีการเลื่อนเวลา ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่ส่วนย่อย: การสร้างบล็อกโพสต์ภายในใหม่ (b/139536619, b/147749580)
- API เวอร์ชันทดลองใน
FragmentManager.enableNewStateManager(boolean)
สามารถใช้เพื่อควบคุมว่า FragmentManager ใช้ตัวจัดการสถานะใหม่หรือไม่ (I7b6ee)
ปัญหาต่อไปนี้จะได้รับการแก้ไขเฉพาะเมื่อใช้ State Manager ใหม่เท่านั้น
- ส่วนย่อยก่อนหน้าของการดำเนินการ
replace
ถูกหยุดอย่างถูกต้องก่อนที่แฟรกเมนต์ใหม่จะเริ่มต้น (b/161654580) - ตอนนี้ Fragment จะป้องกันไม่ให้เกิดภาพเคลื่อนไหวที่แข่งขันกันหลายรายการบน Fragment เดียวกัน เพื่อหลีกเลี่ยงกรณีที่
Animation
จะลบล้างเอฟเฟกต์Transition
หรือAnimator
ทั้งหมด และTransition
ใน Fragment เดียวจะทำงานทั้งคู่ (b/149569323) - ตอนนี้ส่วนย่อย
enterTransition
และexitTranstion
ของส่วนย่อยที่เข้าและออกทั้งหมดถูกเรียกใช้ แทนที่จะทำงานเฉพาะส่วนย่อยการป้อนสุดท้ายและส่วนย่อยแรกสุด (b/149344150) - ส่วนย่อยที่เลื่อนแล้วจะไม่ติดอยู่ที่สถานะ
CREATED
อีกต่อไป แต่จะย้ายไปที่STARTED
ที่มีส่วนย่อยอื่นๆ แทน (b/129035555) - แก้ไขปัญหาที่
FragmentManager
จะดำเนินการตามคำสั่งซื้อเมื่อทำธุรกรรมที่มีการเลื่อนเวลากับธุรกรรมที่ไม่ได้จัดเรียงใหม่ผสมกัน (b/147297731) - การทำให้ส่วนย่อยหลายๆ ส่วนปรากฏพร้อมกันจะไม่ทำให้ส่วนตรงกลางปรากฏให้เห็นชั่วคราวอีกต่อไปเมื่อเลื่อนส่วนย่อย (b/37140383)
- ตอนนี้
FragmentManager
แสดงผลส่วนย่อยที่ถูกต้องเมื่อเรียกใช้findFragmentById()
หรือfindFragmentByTag()
จากภายใน CallbackonAttachFragment()
(b/153082833) - ส่วนย่อยจะไม่เรียกใช้
onCreateView()
ในส่วนย่อยที่ถูกทำลายอีกต่อไปเมื่อส่วนย่อยการแทนที่ถูกเลื่อนออกไป (b/143915710) - ข้อความแสดงข้อผิดพลาดเมื่อพยายามรวมอินสแตนซ์ของเฟรมเวิร์ก
Transition
และ AndroidXTransition
จะระบุส่วนย่อยที่มีการเปลี่ยนที่ไม่ถูกต้อง (b/155574969)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้คุณสามารถเรียกใช้
launch()
บนActivityResultLauncher
ในเมธอดวงจรonCreate()
ของส่วนย่อยได้แล้ว (b/161464278) - การเรียกใช้
registerForActivityResult()
หลังonCreate()
จะมีข้อยกเว้นที่ระบุว่าไม่อนุญาตนี้แทนการส่งผลลัพธ์โดยไม่มีการแจ้งเตือนหลังจากการเปลี่ยนแปลงการกำหนดค่า (b/162255449) - ตอนนี้
FragmentActivity
ใช้OnContextAvailableListener
API ที่เปิดตัวในกิจกรรม1.2.0-alpha08
เพื่อคืนค่าสถานะของFragmentManager
ผู้ฟังทั้งหมดที่เพิ่มลงในคลาสย่อยของFragmentActivity
จะทำงานหลังจาก Listener นี้ (I513da)
แก้ไขข้อบกพร่อง
- ข้ามผ่าน
ActivityOptions
เมื่อใช้startIntentSenderForResult()
แล้ว เป็นไปตามลำดับ (b/162247961)
ปัญหาที่ทราบ
- เมื่อใช้ตัวจัดการสถานะใหม่ การตั้งค่าการเปิดเผยมุมมองรูทของส่วนย่อยหลังจาก
onViewCreated()
โดยตรง และก่อนonResume()
จะส่งผลให้FragmentManager
ลบล้างการเปิดเผยที่คุณตั้งค่า ซึ่งควบคุมระดับการเข้าถึงของมุมมองรูท ในการแก้ปัญหา คุณควรใช้การดำเนินการhide()
และshow()
เสมอเพื่อเปลี่ยนการเปิดเผยส่วนย่อย (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 ออกจากกิจกรรมที่สำคัญ (b/156527405) - ตอนนี้
SavedStateRegistryOwner
ที่แสดงผลโดยViewTreeSavedStateRegistryOwner
เชื่อมโยงกับวงจรของมุมมองส่วนย่อยแล้ว ซึ่งจะทำให้มีการบันทึกสถานะและคืนค่าพร้อมกับมุมมองของส่วนย่อย (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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การติดต่อกลับของ
onAttachFragment()
เปิดอยู่FragmentActivity
และFragment
เลิกใช้งานแล้ว เพิ่มFragmentOnAttachListener
ใหม่ไปยัง เป็นทางเลือกที่ยืดหยุ่นกว่า ซึ่งช่วยให้การมอบสิทธิ์ ของonAttachFragment()
เพื่อแยกผู้ฟังที่ทดสอบได้ และรองรับการเพิ่ม Listener ลงใน FragmentManagers นอกเหนือจาก FragmentManager ย่อยโดยตรงของคุณ (I06d3d)
แก้ไขข้อบกพร่อง
- ตอนนี้ส่วนย่อยระดับบนสุดได้รับการคืนค่าสถานะมุมมองก่อนส่วนย่อยของส่วนย่อยแล้ว ซึ่งเป็นการแก้ไขปัญหาการจัดลำดับภาพหลังจากการเปลี่ยนแปลงการกำหนดค่า เมื่อ
DialogFragment
จะแสดงDialogFragment
อีกรายการเป็นส่วนย่อยย่อย (b/157195715) - แก้ไขปัญหาที่การตรวจสอบ Lint ของ
UseRequireInsteadOfGet
ไม่จัดการการใช้งานแบบเชนของโอเปอเรเตอร์?.
และ!!
อย่างถูกต้อง (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) - ส่วนขยาย Kotlin
setFragmentResultListener()
ที่ใช้ 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
วิธีนี้เหมาะสำหรับส่วนย่อยของลำดับชั้น (หลัก/ย่อย), DialogFragments และส่วนย่อยในการนำทาง และดูแลให้มีการส่งผลลัพธ์ไปยัง Fragment ของคุณในขณะที่มีขนาดอย่างน้อยSTARTED
(b/149787344)
การเปลี่ยนแปลง API
- เลิกใช้งาน API ส่วนย่อยเป้าหมายแล้ว ควรใช้ API ของผลลัพธ์ Fragment ใหม่แทนเพื่อส่งข้อมูลระหว่างส่วนย่อย (b/149787344)
- เลิกใช้งาน API
startActivityForResult()
/onActivityResult()
และrequestPermissions()
/onRequestPermissionsResult()
ใน Fragment แล้ว โปรดใช้ API ของผลลัพธ์กิจกรรม (aosp/1290887) - การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบจากกิจกรรม
1.2.0-alpha04
: เมธอดprepareCall()
เปลี่ยนชื่อเป็นregisterForActivityResult()
(aosp/1278717)
แก้ไขข้อบกพร่อง
- ตอนนี้
getViewLifecycleOwner()
ของส่วนย่อยหยุดทำงานก่อนที่จะเรียกonSaveInstanceState()
ซึ่งจะมิเรอร์พฤติกรรมในวงจรของส่วนย่อย (b/154645875) - ตอนนี้การเรียกใช้
setMenuVisibility(false)
ในส่วนย่อยจะเปลี่ยนการแสดงเมนูที่ระบุโดยส่วนย่อยของส่วนย่อยได้อย่างถูกต้อง (b/153593580) - แก้ไข
illegalStateException
เมื่อเพิ่มส่วนย่อยลงในลำดับชั้นการแสดงผลของ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
จากส่วนย่อยหลังการเปลี่ยนแปลงการกำหนดค่า (b/152137004) - แก้ไขปัญหาที่ระบบไม่สนใจการเปลี่ยนองค์ประกอบที่แชร์และออกจากการใช้
setTargetFragment()
(b/152023196) - จาก Fragment
1.2.4
: อัปเดตกฎ Fragment ProGuard เพื่อเปิดใช้ความสับสนของ Fragment ที่เก็บไว้ (b/151605338) - จาก Fragment
1.2.4
: ปิดใช้กฎ Lint ของFragmentLiveDataObserve
ในคลาสDialogFragment
เนื่องจากวงจรและวงจรการดูจะซิงค์กันเสมอ จึงใช้งานthis
หรือviewLifecycleOwner
ได้อย่างปลอดภัยเมื่อเรียกใช้observe
(b/151765086)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ส่วนย่อยขึ้นอยู่กับกิจกรรม
1.2.0-alpha03
ซึ่งมีการปรับปรุงที่สำคัญกับ API ผลลัพธ์ของกิจกรรมซึ่งนำมาใช้ในกิจกรรม1.2.0-alpha02
เวอร์ชัน 1.3.0-alpha02
18 มีนาคม 2020
ปล่อย androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
และ androidx.fragment:fragment-testing:1.3.0-alpha02
แล้ว เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ActivityResultRegistry
API ที่เปิดตัวในกิจกรรม1.2.0-alpha02
เพื่อจัดการขั้นตอนstartActivityForResult()
+onActivityResult()
และrequestPermissions()
+onRequestPermissionsResult()
โดยไม่ลบล้างเมธอดใน Fragment ของคุณ นอกเหนือจากการให้ hook สำหรับการทดสอบขั้นตอนเหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว (b/125158199)
การเปลี่ยนแปลง API
- ตอนนี้
DialogFragment
มีตัวสร้างที่ใช้@LayoutRes
ซึ่งระบุเลย์เอาต์ที่onCreateView()
ควรขยายสูงโดยค่าเริ่มต้น (b/150327080) - เมธอด
onActivityCreated()
เลิกใช้งานแล้ว โค้ดที่แตะมุมมองของแฟรกเมนต์ควรทำในonViewCreated()
(ซึ่งจะเรียกใช้ทันทีก่อนonActivityCreated()
) และรหัสการเริ่มต้นอื่นๆ ควรอยู่ในonCreate()
หากต้องการรับการติดต่อกลับโดยเฉพาะเมื่อonCreate()
ของกิจกรรมเสร็จสมบูรณ์ จะต้องมีการลงทะเบียนLifeCycleObserver
ในLifecycle
ของกิจกรรมในonAttach()
และถูกนำออกเมื่อได้รับการ Callback ของonCreate()
แล้ว (b/144309266)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.2.3
: แก้ไขข้อบกพร่องในDialogFragment
ที่ทำให้เกิดStackOverflowError
เมื่อเรียกใช้getLayoutInflater()
จากภายในonCreateDialog()
(b/117894767, aosp/1258664) - จาก Fragment
1.2.3
: ลดขอบเขตของกฎ ProGuard ที่รวมอยู่ใน Fragment เพื่อให้แน่ใจว่าสามารถตัดคลาส Fragment ที่ไม่ได้ใช้ออกได้ (b/149665169) - จาก Fragment
1.2.3
: แก้ไขผลบวกลวงในการตรวจสอบ Lint ของUseRequireInsteadOfGet
เมื่อใช้ชื่อตัวแปรในเครื่องซึ่งจะปกปิดชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163) - จาก Fragment
1.2.3
:FragmentContainerView
จะไม่ส่งUnsupportedOperationException
สำหรับการใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์อีกต่อไป (b/149707833)
ปัญหาที่ทราบ
BottomSheetDialogFragment
วางตำแหน่งกล่องโต้ตอบบนหน้าจอไม่ถูกต้องแล้ว (b/151652127)
เวอร์ชัน 1.3.0-alpha01
4 มีนาคม 2020
ปล่อย androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
และ androidx.fragment:fragment-testing:1.3.0-alpha01
แล้ว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ViewTreeLifecycleOwner.get(View)
API ที่เพิ่มเข้ามาในวงจร2.3.0-alpha01
เพื่อให้แสดงผลviewLifecycleOwner
ของ Fragment เป็นLifecycleOwner
สำหรับยอดดูใดๆ ที่แสดงโดยonCreateView()
(aosp/1182955)
การเปลี่ยนแปลง API
- เมธอด
setRetainInstance()
ใน Fragments เลิกใช้งานแล้ว ในการเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการเก็บรักษาสถานะที่สามารถเชื่อมโยงกับกราฟกิจกรรม ส่วนย่อย และการนำทาง วิธีนี้ช่วยให้นักพัฒนาแอปใช้ Fragment ปกติ (ไม่ใช่เก็บรักษา) และเก็บสถานะที่ต้องการแยกไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาของการรั่วไหลที่พบได้บ่อยในขณะที่ยังคงคุณสมบัติที่เป็นประโยชน์ของการสร้างเดี่ยวและการทำลายสถานะที่เก็บรักษาไว้ (เช่น เครื่องมือสร้างViewModel
และ CallbackonCleared()
ที่แอปได้รับ) (b/143911815) - การเปิดตัว ViewPager2
1.0.0
ทำให้คลาสFragmentPagerAdapter
และFragmentStatePagerAdapter
สำหรับโต้ตอบกับViewPager
เลิกใช้งานแล้ว ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2 (b/145132715)
แก้ไขข้อบกพร่อง
- ตอนนี้กฎของ Fragment ProGuard จะเก็บเฉพาะคลาส
Fragment
ของตัวสร้างเริ่มต้นที่ใช้ แทนที่จะเป็นอินสแตนซ์Fragment
ทั้งหมด ซึ่งเป็นการแก้ไขการถดถอยที่ใช้ใน Fragment1.2.1
(b/149665169 - กฎ Lint
require___()
ที่เพิ่มลงใน 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()
ของส่วนย่อยหยุดทำงานก่อนที่จะเรียกonSaveInstanceState()
ซึ่งจะมิเรอร์พฤติกรรมในวงจรของส่วนย่อย ซึ่งเคยเปิดตัวไปแล้วใน Fragment1.3.0-alpha04
(b/154645875) - ตอนนี้การเรียกใช้
setMenuVisibility(false)
ในส่วนย่อยจะเปลี่ยนการแสดงเมนูที่ระบุโดยส่วนย่อยของส่วนย่อยได้อย่างถูกต้อง ซึ่งเคยเปิดตัวไปแล้วใน 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- อัปเดตกฎของ Fragment ProGuard เพื่ออนุญาตการสร้างความสับสนของ Fragment ที่เก็บไว้ (b/151605338)
- ปิดใช้กฎ Lint
FragmentLiveDataObserve
ในชั้นเรียน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)
- แก้ไขข้อสันนิษฐานที่ผิดพลาดในการตรวจสอบ Lint ของ
UseRequireInsteadOfGet
เมื่อใช้ชื่อตัวแปรในเครื่องซึ่งบดบังชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163) FragmentContainerView
ไม่ใช้UnsupportedOperationException
อีกต่อไปเนื่องจากใช้ตัวสร้างที่ไม่ถูกต้องในตัวอย่างเลย์เอาต์ (b/149707833)
เวอร์ชัน 1.2.2
เวอร์ชัน 1.2.2
19 กุมภาพันธ์ 2020
ปล่อย androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
และ androidx.fragment:fragment-testing:1.2.2
แล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้
การตรวจสอบ Lint ใหม่
- 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)
แก้ไขข้อบกพร่อง
- แก้ไขไฟล์ Fragment ProGuard เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
- ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนำให้ใช้
viewLifecycleOwner
เมื่อใช้observe
เพื่อจัดการเวอร์ชันเมธอดส่วนขยายlivedata-ktx
ของobserve
ด้วย (b/148996309) - แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint จำนวนมาก (aosp/1157012)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Zac Sweers ที่ร่วมตรวจสอบ
require___()
Lint ในนามของ 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragment ที่เพิ่มผ่านเมธอด
add
และreplace
ที่ใช้อินสแตนซ์Class
(หรือเวอร์ชันที่ปรับแก้แล้ว Kotlin) มีตัวสร้างเริ่มต้นที่เก็บโดย ProGuard (b/148181315) FragmentStatePagerAdapter
และFragmentPagerAdapter
ตรวจไม่พบข้อยกเว้นที่FragmentManager
ส่งเมื่อเรียกใช้finishUpdate()
อีกต่อไป (aosp/1208711)- แก้ไขปัญหาที่
FragmentManager.findFragment()
ไม่ทำงานกับส่วนย่อยที่เพิ่มผ่านแท็ก<fragment>
(b/147784323) - ตอนนี้ส่วนย่อยที่พองขึ้นโดยใช้แท็ก
<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 (เมื่อใช้การเปลี่ยน1.3.0
) เพื่อดำเนินการให้เสร็จสมบูรณ์ก่อนเรียกใช้onDestroyView()
add()
และreplace()
ตามคลาส: เพิ่มโอเวอร์โหลดใหม่ของadd()
และreplace()
ในFragmentTransaction
ที่ใช้Class<? extends Fragment>
และอาร์กิวเมนต์Bundle
ซึ่งไม่บังคับ วิธีการเหล่านี้ใช้FragmentFactory
ของคุณในการสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม ระบบได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ปรับแล้ว (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย- การผสานรวม Lifecycle ViewModel savedState:
SavedStateViewModelFactory
เป็นค่าเริ่มต้นจากโรงงานเมื่อใช้by viewModels()
,by activityViewModels()
, ตัวสร้างViewModelProvider
หรือViewModelProviders.of()
กับ Fragment - การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่ที่ช่วยให้มั่นใจว่าคุณกำลังใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
- การเลิกใช้งาน
getFragmentManager()
: เราได้เลิกใช้งานเมธอดgetFragmentManager()
และrequireFragmentManager()
ใน Fragment แล้ว และแทนที่ด้วยเมธอดgetParentFragmentManager()
เดียว ซึ่งจะแสดงผลFragmentManager
ที่ไม่ใช่ค่า Null จาก Fragment ที่เพิ่มเข้ามา (คุณสามารถใช้isAdded()
เพื่อกำหนดว่าการเรียกนั้นปลอดภัยหรือไม่) - การเลิกใช้งาน
FragmentManager.enableDebugLogging()
: เลิกใช้งานเมธอดFragmentManager.enableDebugLogging
แบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้Log.isLoggable()
สำหรับแท็กFragmentManager
ซึ่งจะช่วยให้คุณเปิดใช้การบันทึกDEBUG
หรือVERBOSE
ได้โดยไม่ต้องคอมไพล์แอปซ้ำ
ปัญหาที่ทราบ
- ProGuard ไม่ได้เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์
class
หรือandroid:name
ในFragmentContainerView
โดยอัตโนมัติ ซึ่งกำหนดให้คุณต้องเพิ่มกฎ Keep สำหรับแต่ละคลาสของ Fragment ด้วยตนเอง (b/142601969) - เมื่อเพิ่ม
NavHostFragment
โดยใช้class
หรือandroid:name
ใน XML ด้วยFragmentContainerView
คุณจะใช้findNavController()
ในonCreate()
ของกิจกรรมไม่ได้ (b/142847973)
เวอร์ชัน 1.2.0-rc05
8 มกราคม 2020
ปล่อย androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
และ androidx.fragment:fragment-testing:1.2.0-rc05
แล้ว เวอร์ชัน 1.2.0-rc05 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน Fragment
1.2.0-rc04
เมื่อใช้แท็ก<fragment>
ที่ทำให้เรียกonViewCreated()
ไม่ถูกต้องระหว่างการทำลายกิจกรรม (b/146290333) - ตอนนี้ Fragment ที่เพิ่มด้วยแท็ก
<fragment>
จะล้างแบบไม่ได้กำหนดค่าอย่างถูกต้องแม้ว่าจะอยู่ในเลย์เอาต์เป็นบางครั้งเท่านั้น (เช่น เฉพาะในเลย์เอาต์แนวนอน) ด้วยเหตุนี้ ตอนนี้ 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) - ขณะนี้ส่วนย่อยย่อยถูกหยุดอย่างถูกต้องก่อนตำแหน่งหลักเมื่อกิจกรรมที่มีการเรียก
onSaveInstanceState()
(b/144380645) - แก้ไขปัญหาที่การทำเครื่องหมายมุมมองไม่ถูกต้องเป็น
INVISIBLE
หลังจากเปิด Fragment ที่ซ่อนอยู่ (b/70793925) - ตอนนี้การเปลี่ยนองค์ประกอบที่แชร์แบบ Fragment จะจัดการมุมมองที่มีการหมุน ปรับขนาด ฯลฯ แล้ว (b/142835261)
การอัปเดตเอกสารประกอบ
- ชี้แจงเกี่ยวกับเอกสารประกอบการเลิกใช้งานเมื่อประมาณ
setUserVisibleHint()
(b/143897055) - ปรับปรุงเอกสารประกอบใน
setFragmentFactory()
และgetFragmentFactory()
เพื่อให้ระบุได้ดีขึ้นว่าการตั้งค่าFragmentFactory
จะมีผลกับ FragmentManagers ย่อยด้วย (aosp/1170095)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Fragment จะขึ้นอยู่กับอายุการใช้งาน
2.2.0-rc03
, Lifecycle ViewModel savedState1.0.0-rc03
และกิจกรรม1.1.0-rc03
เวอร์ชัน 1.2.0-rc02
7 พฤศจิกายน 2019
ปล่อย androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
และ androidx.fragment:fragment-testing:1.2.0-rc02
แล้ว เวอร์ชัน 1.2.0-rc02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เมื่ออยู่ใน Kotlin ตอนนี้ LintFix สำหรับการใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(เปิดตัวใน 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
ที่ส่งไปยังโดเมนดังกล่าวจะไม่มีค่าว่าง และgetDialog()
จะแสดงผลค่าที่ไม่ใช่ Null เมื่อมีการเรียกใช้ (b/141974033) - ตอนนี้
FragmentContainerView
ได้เพิ่ม Fragment ที่กำหนดโดยclass
หรือandroid:name
เป็นส่วนหนึ่งของเงินเฟ้อแล้ว เพื่อให้มั่นใจว่าfindFragmentById()
และfindFragmentByTag()
จะทำงานทันทีหลังจากนั้น (b/142520327) - แก้ไข
IllegalStateException
ในFragmentContainerView
เนื่องจากมีการบันทึกสถานะไว้ (b/142580713) - แก้ไข
UnsupportedOperationException
ในFragmentContainerView
เมื่อคลาสFragmentContainerView
มีการปรับให้ยากต่อการอ่าน (Obfuscate) (b/142657034)
ปัญหาที่ทราบ
- ProGuard ไม่ได้เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์
class
หรือandroid:name
ในFragmentContainerView
โดยอัตโนมัติ ซึ่งกำหนดให้คุณต้องเพิ่มกฎ Keep สำหรับแต่ละคลาสของ Fragment ด้วยตนเอง เราได้ปิดใช้กฎ Lint ที่แนะนำให้ย้ายไปที่FragmentContainerView
จนกว่าจะมีการแก้ไขปัญหานี้ผ่านaapt2
(b/142601969)
เวอร์ชัน 1.2.0-beta02
11 ตุลาคม 2019
ปล่อย androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
และ androidx.fragment:fragment-testing:1.2.0-beta02
แล้ว เวอร์ชัน 1.2.0-beta02 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
onInflate()
ของ Fragment ไม่ได้รับแอตทริบิวต์ที่ถูกต้องจากFragmentContainerView
ซึ่งส่งผลต่อกรณีปัญหา เช่นNavHostFragment
(b/142421837)
เวอร์ชัน 1.2.0-beta01
9 ตุลาคม 2019
ปล่อย androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
และ androidx.fragment:fragment-testing:1.2.0-beta01
แล้ว เวอร์ชัน 1.2.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
FragmentContainerView
เพิ่มการรองรับการเพิ่มส่วนย่อยเริ่มต้นด้วยการรองรับเพิ่มเติมสำหรับแอตทริบิวต์ XML ของandroid:name
และแอตทริบิวต์ XML ของandroid:tag
ที่ไม่บังคับFragmentContainerView
จะใช้FragmentTransaction
ปกติในส่วนฮู้ดเพื่อเพิ่มส่วนย่อยเริ่มต้น ซึ่งต่างจากแท็ก<fragment>
ซึ่งทำให้ดำเนินการFragmentTransaction
ต่อไปได้ในFragmentContainerView
และทำให้ใช้ View Binding สำหรับเลย์เอาต์ได้ (b/139830628, b/141177981)- ตอนนี้ Fragment มีคำเตือนของ Lint ที่เสนอวิธีแก้ไขด่วนในการแทนที่
<fragment>
ด้วยFragmentContainerView
(b/139830056)
แก้ไขข้อบกพร่อง
- แก้ไข
ClassCastException
เมื่อใช้androidx.transition
(b/140680619) - เมื่อใช้การเปลี่ยน
1.3.0-beta01
ตอนนี้ Fragment จะรอให้มีการเปลี่ยนandroidx.transition
ครั้ง (นอกเหนือจากการเปลี่ยนและภาพเคลื่อนไหวในเฟรมเวิร์ก ซึ่งได้รับการแก้ไขใน Fragment1.2.0-alpha03
และ Fragment1.2.0-alpha02
ตามลำดับ) ให้เสร็จสิ้นก่อนที่จะส่งงานonDestroyView()
(aosp/1119841) - เมื่อใช้การเปลี่ยน
1.3.0-beta01
ตอนนี้ Fragments จะยกเลิกการเปลี่ยนandroidx.transition
ได้อย่างถูกต้องก่อนที่จะเริ่มการเปลี่ยน / ภาพเคลื่อนไหวใหม่ในคอนเทนเนอร์เดียวกัน (aosp/1119841) - แก้ไขปัญหาเกี่ยวกับ API 17 และต่ำกว่าเมื่อใช้การเปลี่ยน
androidx.transition
ในมุมมองรูทของ Fragment เมื่อใช้FragmentContainerView
(b/140361893) - ตอนนี้อาร์ติแฟกต์
fragment-testing
ต้องใช้ AndroidX Test1.2.0
ซึ่งแก้ไขความไม่เข้ากันกับ Espresso 3.2.0 เวอร์ชันล่าสุด (b/139100149) - นำการใช้งาน
Log.w
ใน FragmentManager ออกแล้ว (aosp/1126468)
ปัญหาที่ทราบ
onInflate()
ของ Fragment ไม่ได้รับแอตทริบิวต์ที่ถูกต้องจากFragmentContainerView
เช่นNavHostFragment
(b/142421837)
เวอร์ชัน 1.2.0-alpha04
18 กันยายน 2019
ปล่อย androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
และ androidx.fragment:fragment-testing:1.2.0-alpha04
แล้ว เวอร์ชัน 1.2.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เมธอด
getFragmentManager()
และrequireFragmentManager()
ในFragment
เลิกใช้งานแล้วและแทนที่ด้วยเมธอดgetParentFragmentManager()
เดียว ซึ่งจะแสดงFragmentManager
ที่ไม่ใช่ Null และเพิ่ม Fragment ลงไป (คุณสามารถใช้isAdded()
เพื่อพิจารณาว่าจะเรียกได้อย่างปลอดภัยหรือไม่) (b/140574496) - เลิกใช้งานเมธอด
FragmentManager.enableDebugLogging
แบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้Log.isLoggable()
สำหรับแท็กFragmentManager
ซึ่งจะช่วยให้คุณเปิดใช้การบันทึกDEBUG
หรือVERBOSE
ได้โดยไม่ต้องคอมไพล์แอปซ้ำ (aosp/1116591)
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragment จะถูกทำลายอย่างถูกต้องขณะที่ภาพเคลื่อนไหวออกจาก Fragment อื่นๆ ทำงานอยู่ (b/140574199)
- แก้ไขปัญหาที่ Fragments จะเรียก
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 ออกจากกองซ้อนด้านหลัง (b/139104187) - แก้ปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งเปิดส่วนย่อยและเพิ่มส่วนย่อยใหม่พร้อมกัน (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 ของภาพเคลื่อนไหวและการแทรกหน้าต่างไปยัง Fragments (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
รายการใน Callback วงจรชีวิตแล้วFragment
รายการ (b/127272564) - เลิกใช้งาน API ที่เกี่ยวข้องกับชื่อเบรดครัมบ์ใน
FragmentTransaction
และFragmentManager.BackStackEntry
แล้ว (b/138252944) - เมธอด
setTransitionStyle
ในFragmentTransaction
เลิกใช้งานแล้ว (aosp/1011537) - หลายวิธีใน
FragmentManager
ไม่ได้ใช้abstract
อีกต่อไปFragmentManager
เองก็ยังคงเป็นabstract
และไม่ควรสร้างอินสแตนซ์หรือขยายเวลาโดยตรง คุณควรรับเฉพาะอินสแตนซ์ที่มีอยู่จากgetSupportFragmentManager()
,getChildFragmentManager()
ฯลฯ ต่อไป
แก้ไขข้อบกพร่อง
- จาก Fragment
1.1.0-rc04
: ตอนนี้ Fragment จะยกเลิกการเปลี่ยนของ Fragments ที่เลื่อนออกไปอย่างถูกต้องแล้ว (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 ระดับบนสุดเคลื่อนไหว (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
มีคลาสFragmentScenario
สำหรับการทดสอบส่วนย่อยแบบแยกส่วน ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ Fragment ของแอป - Fragmentfactor: ตอนนี้คุณตั้งค่า
FragmentFactory
ในFragmentManager
เพื่อจัดการการสร้างอินสแตนซ์ Fragment ได้แล้ว ซึ่งจะนำข้อกำหนดที่เข้มงวดที่ต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ออก - การมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin สำหรับ ViewModels: ตอนนี้อาร์ติแฟกต์
fragment-ktx
มีผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin 2 ราย ได้แก่by viewModels()
สำหรับการเข้าถึง ViewModels ที่เชื่อมโยงกับส่วนย่อยแต่ละรายการ และby activityViewModels()
สำหรับเข้าถึง ViewModels ที่กำหนดขอบเขตไปยังกิจกรรม - Max Lifecycle: ตอนนี้คุณสามารถตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยเรียกใช้
setMaxLifecycle()
ในFragmentTransaction
ตัวเลือกนี้ใช้แทนsetUserVisibleHint()
ที่เลิกใช้งานแล้วFragmentPagerAdapter
และFragmentStatePagerAdapter
มีตัวสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ - ตัวสร้าง LayoutId ของFragmentActivity: ตอนนี้คลาสย่อยของ
FragmentActivity
จะเลือกเรียกใช้เครื่องมือสร้างในFragmentActivity
ที่จะใช้รหัสR.layout
ได้ ซึ่งจะแสดงเลย์เอาต์ที่ควรตั้งเป็นการดูเนื้อหาแทนการเรียกใช้setContentView()
ในonCreate()
การดําเนินการนี้จะไม่เปลี่ยนแปลงข้อกําหนดว่าคลาสย่อยของคุณต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ - ตัวสร้าง LayoutId สำหรับแฟรกเมนต์: ตอนนี้คลาสย่อยของ
Fragment
สามารถเรียกใช้ผู้สร้างในFragment
ที่ใช้รหัสR.layout
ซึ่งระบุเลย์เอาต์ที่ควรใช้สำหรับส่วนย่อยนี้เป็นทางเลือกในการลบล้าง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
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragments ยกเลิกการเปลี่ยนใน Fragments ที่ถูกเลื่อนออกไปอย่างถูกต้องแล้ว (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
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragment จะอัปเดตการเปิดเผยอย่างเหมาะสมเมื่อใช้การดำเนินการ
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
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- Callback
androidx.lifecycle.Lifecycle
รายการ (โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับSTARTED
,RESUMED
,PAUSED
,STOPPED
และDESTROYED
) สำหรับ Fragment ที่ซ้อนกันได้รับการซ้อนอย่างถูกต้อง (b/133497591) - ตอนนี้อินสแตนซ์
OnBackPressedCallback
รายการที่ลงทะเบียนในonCreate()
ของ Fragment จะมีลำดับความสำคัญเหนือกว่า FragmentManager ย่อยอย่างเหมาะสม (b/133175997) - Fragment ย่อยจะไม่เคลื่อนไหวอีกต่อไปเมื่อแทนที่ Fragment หลัก (b/121017790)
- ตอนนี้ระบบจะไม่สนใจภาพเคลื่อนไหวและการเปลี่ยนภาพของ Fragment เมื่อใช้
animateLayoutChanges="true"
ซึ่งเป็นการแก้ไขปัญหาที่ Fragments ไม่ได้รับการทำลายอย่างถูกต้อง (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)
ใหม่เมื่อส่วนการนำทางหลักมีการเปลี่ยนแปลง 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
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
รุ่นนี้ไม่สามารถใช้ร่วมกับค่ากำหนด 1.1.0-alpha01 ถึง 1.1.0-alpha04 โปรดอัปเกรดเป็นค่ากำหนด 1.1.0-alpha05 เมื่อใช้ Fragments เวอร์ชันนี้
ฟีเจอร์ใหม่
- เพิ่มโอเวอร์โหลดใหม่ของ
postponeEnterTransition()
ที่ทำให้หมดเวลา จากนั้น Fragment จะเรียกstartPostponedEnterTransition()
b/120803208 โดยอัตโนมัติ
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: มีการนำเมธอด
instantiate
ของFragmentFactory
ที่เลิกใช้งานซึ่งนำ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) ส่วนย่อยในสแต็กด้านหลังจะไม่ได้รับการติดต่อกลับไปยัง
onCreateView()
เมื่อมีการสร้างกิจกรรมโฮสติ้งใหม่ ตอนนี้จะมีการเรียกonCreateView()
เฉพาะเมื่อมองเห็นส่วนย่อย (เช่น ป๊อปสแต็กด้านหลัง)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้แท็ก
<fragment>
ใน XML และตัวสร้างcontentLayoutId
ของFragmentActivity
หรือAppCompatActivity
(b/129907905) - แก้ไขปัญหาที่ส่วนย่อยในสแต็กด้านหลังไม่ย้ายไปอยู่ที่
CREATED
เป็นอย่างน้อยหลังจากการเปลี่ยนแปลงการกำหนดค่า ซึ่งทำให้ ViewModels และ Fragment ย่อยที่เก็บรักษาไม่ถูกต้อง (b/129593351) - แก้ไขข้อขัดข้องใน
restoreSaveState
ที่เกิดจากการยกเลิกการซิงค์ของส่วนย่อยที่เก็บรักษาไว้หลังจากที่บันทึกสถานะอินสแตนซ์แล้ว (b/130433793) (aosp/947824) - แก้ปัญหาที่ระบบไม่เรียกใช้
OnBackPressedCallback
ด้วยวงจรของส่วนย่อย หากFragmentManager
มีสแต็กด้านหลัง ดูรายละเอียดเพิ่มเติมได้ที่ 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
ของ Fragmentfactor ที่ใช้ Bundle อาร์กิวเมนต์ถูกเลิกใช้งานแล้ว และแอปควรใช้โอเวอร์โหลดinstantiate
ใหม่ที่ไม่ใช้ Bundle (b/128836103) - ตอนนี้เมธอด
FragmentScenario
มีคำอธิบายประกอบ@StyleRes
อย่างถูกต้องแล้ว (aosp/924193) FragmentTabHost
เลิกใช้งานแล้ว (b/127971835)- นำ
getThemedContext()
ของ FragmentActivity ออกแล้ว (aosp/934078)
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน 1.1.0-alpha05 ที่ทำให้ Fragment ขาเข้ากะพริบบนหน้าจอ (b/129405432)
- แก้ไขปัญหาส่วนที่ส่วนย่อยการไปยังส่วนต่างๆ หลักสูญหายไปหลังจากชุดการดำเนินการแบบ popBackStack+replace+popBackStack (b/124332597)
- แก้ไขปัญหาเมื่อใช้ตัวสร้าง
@ContentView
ในกิจกรรมเมื่อคืนค่าสถานะ Fragment (b/127313094) - แก้ไขตรรกะของ
setTargetFragment()
เมื่อแทนที่ Fragment เป้าหมายที่มีอยู่ด้วย Fragment ที่ยังไม่ได้แนบกับ FragmentManager (aosp/932156)
เวอร์ชัน 1.1.0-alpha05
13 มีนาคม 2019
ปล่อย androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
และ androidx.fragment:fragment-testing:1.1.0-alpha05
แล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- แคชการค้นหาคำอธิบายประกอบ
@ContentView
รายการแล้ว (b/123709449)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การเรียกใช้
remove()
,hide()
,show()
,detach()
และsetPrimaryNavigationFragment()
โดยมี Fragment ที่เชื่อมต่อกับ FragmentManager อื่นจะส่งIllegalStateException
แทนที่จะล้มเหลวแบบเงียบ (aosp/904301)
แก้ไขข้อบกพร่อง
- ทำเครื่องหมาย
onNewIntent
สำหรับFragmentActivity
ว่า@CallSuper
อย่างถูกต้อง (b/124120586) - แก้ไขปัญหาที่ระบบสามารถเรียก
onDismiss()
ของDialogFragment
2 ครั้งเมื่อใช้getDialog().dismiss()
หรือgetDialog().cancel()
(b/126563750)
เวอร์ชัน 1.1.0-alpha04
7 กุมภาพันธ์ 2019
ปล่อย androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
และ androidx.fragment:fragment-testing 1.1.0-alpha04
แล้ว
ฟีเจอร์ใหม่
- เพิ่มการรองรับคำอธิบายประกอบคลาส
@ContentView
ที่ให้คุณระบุว่าไฟล์ XML เลย์เอาต์ใดควรสูงเกินจริงเพื่อเป็นทางเลือกในการลบล้างonCreateView()
เราขอแนะนำให้คุณดูงานที่เกี่ยวข้องในonViewCreated()
(aosp/837619) fragment-testing
ตอนนี้ใช้androidx.test:core-ktx
1.1.0 เวอร์ชันเสถียร (b/121209673)- ตอนนี้คุณสามารถใช้
openActionBarOverflowOrOptionsMenu
กับFragmentScenario
เพื่อทดสอบเมนูตัวเลือกที่โฮสต์ของ Fragment (b/121126668)
การเปลี่ยนแปลง API
- เพิ่มเมธอด
requireArguments()
ซึ่งแสดงผล@NonNull Bundle
หรือส่งIllegalStateException
(b/121196360) - เพิ่มหมายเหตุว่า
getLifecycle()
,getViewLifecycleOwner()
และgetViewLifecycleOwnerLiveData()
ไม่ควรลบล้างและจะดำเนินการขั้นสุดท้ายในรุ่นถัดไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างวิธีการนี้ (aosp/880714) - เพิ่มหมายเหตุว่า
getViewModelStore()
ไม่ควรลบล้างและจะทำให้เป็นจริงในรุ่นถัดไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างวิธีการนี้ (aosp/880713) - แก้ปัญหาความเข้ากันได้แบบไบนารีกับ Fragments รุ่นก่อนหน้า (aosp/887877) (aosp/889834)
แก้ไขข้อบกพร่อง
- ระบบจะล้างส่วนย่อยของเป้าหมายอย่างถูกต้องเมื่อผ่าน
null
ไปยังsetTargetFragment()
(aosp/849969) - แก้ไขปัญหาที่ในบางครั้งเป้าหมาย Fragment ไม่พร้อมใช้งานใน
onDestroy()
หรือหลังจากนั้น (b/122312935) - ตอนนี้มีการเรียกใช้ onClose() ของ DialogFragment ก่อน
onDestroy()
(aosp/874133) (aosp/890734)
เวอร์ชัน 1.1.0-alpha03
17 ธันวาคม 2018
ฟีเจอร์ใหม่
- ตอนนี้ Fragment จะใช้
BundleSavedStateRegistryOwner
แล้ว และจะขึ้นอยู่กับไลบรารี savedState ที่เพิ่งเผยแพร่ [aosp/824380] - เพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin ของ
by activityViewModels
เพื่อเรียกข้อมูล ViewModels ที่เชื่อมโยงกับกิจกรรมที่มีแล้ว [b/119050253] - มีการขยายการให้บริการผู้รับมอบอำนาจพร็อพเพอร์ตี้ Kotlin ของ
by viewModels
เพื่อใช้เมธอด lambda ที่ไม่บังคับในการรับViewModelStoreOwner
ซึ่งจะช่วยให้คุณส่งต่อใน Fragment หลักหรือViewModelStoreOwner
ที่กำหนดเองอื่นๆ ได้ด้วยโค้ด เช่นval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
การเปลี่ยนแปลง API
FragmentScenario
ให้คุณระบุธีมได้แล้ว เช่นTheme.AppCompat
[b/119054431] การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ- เพิ่มเมธอด
requireView()
ซึ่งแสดงผล@NonNull View
หรือส่งIllegalStateException
[b/120241368] - เพิ่มเมธอด
requireParentFragment()
ซึ่งแสดงผล@NonNull Fragment
หรือส่งIllegalStateException
[b/112103783]
แก้ไขข้อบกพร่อง
- แก้ไข IllegalStateException: บันทึกสถานะ b/120814739 ไม่สำเร็จ
- ตอนนี้ส่วนย่อยที่กู้คืนจากสถานะอินสแตนซ์ที่บันทึกไว้จะได้รับ
Bundle
ที่ไม่เป็นนัลเสมอ [b/119794496] - Fragment ที่นำออกไปแล้วจะไม่ใช้ออบเจ็กต์
Lifecycle
ซ้ำอีกหากเพิ่มอีกครั้ง [b/118880674]
เวอร์ชัน 1.1.0-alpha02
3 ธันวาคม 2018
ฟีเจอร์ใหม่
- ตอนนี้ส่วนขยาย Kotlin ของ FragmentActivity ให้คุณใช้ lambda สําหรับการสร้าง Fragment แทนการส่งในอินสแตนซ์
FragmentFactory
ได้แล้ว (aosp/812913)
แก้ไขข้อบกพร่อง
- แก้ไข IllegalStateException เมื่อใช้ Fragments ที่ซ้อนกันในแบ็กสแต็ก (b/119256498)
- แก้ไขข้อขัดข้องเมื่อใช้
FragmentScenario.recreate()
กับFragmentFactory
(aosp/820540) - แก้ไขปัญหาที่ไม่สามารถเข้าถึง Fragment เป้าหมายหลังจากที่นำ Fragment ออกแล้ว (aosp/807634)
เวอร์ชัน 1.1.0-alpha01
5 พฤศจิกายน 2018
นี่เป็นรุ่นแรกของ
อาร์ติแฟกต์ fragment-testing
รายการและ FragmentScenario
ซึ่งสร้างขึ้นจาก
androidx.test:core API ดูรายละเอียดเพิ่มเติมในเอกสารการทดสอบส่วนย่อย
ฟีเจอร์ใหม่
- คลาส Fragmentสถานการณ์ใหม่สำหรับการทดสอบ Fragment แยกต่างหาก
- ตอนนี้คุณสามารถตั้งค่า
FragmentFactory
ในFragmentManager
รายการใดก็ได้เพื่อควบคุมวิธีการ มีการสร้างอินสแตนซ์ Fragment ใหม่ - เพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin ของ
by viewModels()
ใหม่สำหรับการเรียกข้อมูลแล้ว ดูโมเดลจากส่วนย่อย - ตอนนี้กิจกรรมการป้อนข้อมูลที่รอดำเนินการ (เช่น การคลิก) จะถูกยกเลิกใน Fragment
onStop()
การเปลี่ยนแปลง API
- ขยายคำอธิบายประกอบของความสามารถในการเว้นว่างทั่วทั้ง Fragment API อย่างมาก แพลตฟอร์ม
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้การดำเนินการ Fragment ล้มเหลวจากภายใน LiveData (b/77944637)
ปัญหาที่ทราบ
- ไม่สามารถเข้าถึงส่วนย่อยเป้าหมายได้หลังจากนำส่วนย่อยออกจากส่วน FragmentManager
fragment-testing
อิงตามandroidx.test:core:1.0.0-beta01
แทนที่จะเป็น ถูกต้องandroidx.test:core:1.0.0