อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
30 ตุลาคม 2024 | 1.8.5 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ Fragment คุณต้องเพิ่มที่เก็บ Google Maven ไปยังโปรเจ็กต์ของคุณ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ 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") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพิงบิวด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา
เวอร์ชัน 1.8
เวอร์ชัน 1.8.5
30 ตุลาคม 2024
androidx.fragment:fragment-*:1.8.5
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.5 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
IllegalStateException
ที่ทริกเกอร์โดยsaveBackStack
หลังจากที่มีการยกเลิกหรือขัดจังหวะท่าทางสัมผัสการกลับโดยประมาณเท่านั้น (I3387d, b/342419080)
เวอร์ชัน 1.8.4
2 ตุลาคม 2024
androidx.fragment:fragment-*:1.8.4
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.4 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการกดปุ่มย้อนกลับของระบบหรือใช้ท่าทางสัมผัสย้อนกลับอย่างรวดเร็วจะทำให้ Fragments ขัดข้องเมื่อใช้ Androidx Transitions (Ibc038, b/364804225)
- แก้ไขปัญหาในรายการที่การขัดจังหวะท่าทางสัมผัสเพื่อกลับแบบคาดการณ์จะส่งตัวจัดการรายการไปยังสถานะที่ไม่ระบุและอาจแสดงรายการที่ไม่ถูกต้อง (If82e2, b/338624457)
- แก้ไข
UninitializedPropertyAccessException
ในAndroidFragment
เมื่อเปลี่ยนคลาสที่อินสแตนซ์AndroidFragment
ของคุณใช้อยู่แบบไดนามิก (I12dea)
เวอร์ชัน 1.8.3
4 กันยายน 2024
androidx.fragment:fragment-*:1.8.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.3 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
FragmentManager
จะพิจารณาการดำเนินการที่รอดำเนินการอย่างถูกต้องเมื่อจัดการท่าทางสัมผัส "กลับแบบคาดการณ์" ซึ่งจะช่วยให้มั่นใจว่าการย้อนกลับระบบจะไม่ทำให้เกิดIndexOutOfBoundsException
อีก (I9ba32, b/342316801) AndroidFragment
ไม่ขัดข้องอีกต่อไปหากเพิ่มลงในองค์ประกอบขณะที่บันทึกสถานะของกิจกรรม/แฟรกเมนต์ที่มีอยู่แล้ว (I985e9, b/356643968)
เวอร์ชัน 1.8.2
24 กรกฎาคม 2024
androidx.fragment:fragment-*:1.8.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.2 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
AndroidFragment
จะจัดการกรณีที่วาง Fraktment หลักไว้ในกองซ้อนย้อนกลับของ Fraktment อย่างเหมาะสม ซึ่งจะช่วยหลีกเลี่ยงปัญหา "ไม่พบมุมมองสำหรับรหัส" เมื่อกลับไปที่ Fraktment นั้น (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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะ
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 โดยอัตโนมัติ วิธีการนี้ควรใช้แทนแนวทางที่แนะนำก่อนหน้านี้ในการใช้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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การเรียกกลับ
onBackStackChangeCancelled
ในอินเทอร์เฟซFragmentManagers OnBackStackChangedListener
จะทํางานเป็นส่วนหนึ่งของการดําเนินการในFragmentManager
ซึ่งทําให้เวลาการเรียกกลับonBackStackChangeCommitted
ใกล้เคียงกันมากขึ้น (I5ebfb, b/332916112)
เวอร์ชัน 1.8.0-beta01
14 พฤษภาคม 2024
ปล่อย androidx.fragment:fragment-*:1.8.0-beta01
แล้ว เวอร์ชัน 1.8.0-beta01 มีสัญญาผูกมัดเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.7.1
: ตอนนี้ระบบจะเรียกใช้การย้อนกลับแบบคาดการณ์เฉพาะสำหรับธุรกรรมที่แต่ละกลุ่มมี Animator หรือการเปลี่ยน Androidx ที่กรอได้เท่านั้น การอัปเดตนี้จะช่วยแก้ไขปัญหาที่การยกเลิกธุรกรรมที่กรอได้บางส่วนจะทำให้เกิดหน้าจอสีดํา (I43037, b/339169168)
เวอร์ชัน 1.8.0-alpha02
17 เมษายน 2024
androidx.fragment:fragment-*:1.8.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จากข้อมูลโค้ด
1.7.0-rc02
: เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่าsharedElement
ที่ไม่มีทรานซิชันอื่นๆ จะทํางานไม่สําเร็จ (Iec48e) - จาก Fragment
1.7.0-rc02
: แก้ไขข้อบกพร่องที่ระบบจะขัดข้องหากมีการเพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถกรอกลับไปยังส่วนต่างๆ ได้ไปยังธุรกรรมที่ทรานซิชันอื่นๆ ทั้งหมดสามารถกรอกลับไปยังส่วนต่างๆ ได้ ตอนนี้ธุรกรรมจะถือว่าไม่สามารถกรอกลับได้อย่างถูกต้อง (I18ccd)
เวอร์ชัน 1.8.0-alpha01
3 เมษายน 2024
androidx.fragment:fragment-*:1.8.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
AndroidFragment
Composable
ใหม่ช่วยให้คุณเพิ่มข้อมูลโค้ดลงในลําดับชั้นการเขียนผ่านชื่อคลาสของข้อมูลโค้ดได้ โดยจะจัดการการบันทึกและการกู้คืนสถานะของ Fraktment โดยอัตโนมัติ รายการนี้สามารถใช้แทน AndroidViewBindingComposable
ได้โดยตรง (b/312895363, Icf841)
การเปลี่ยนแปลงเอกสารประกอบ
- เอกสารประกอบที่อัปเดตสำหรับ
OnBackStackChangedListener
API เพื่อระบุเวลาที่เรียกใช้และวิธีการใช้งาน (I0bfd9)
การอัปเดตทรัพยากร Dependency
- ขณะนี้ Fragment จะขึ้นอยู่กับโปรแกรมติดตั้งโปรไฟล์ 1.3.1
เวอร์ชัน 1.7
เวอร์ชัน 1.7.1
14 พฤษภาคม 2024
ปล่อย androidx.fragment:fragment-*:1.7.1
แล้ว เวอร์ชัน 1.7.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะเรียกใช้การย้อนกลับแบบคาดการณ์สําหรับธุรกรรมที่แต่ละกลุ่มมี Animator หรือ Androidx Transition ที่กรอกลับได้เท่านั้น การแก้ไขนี้จะช่วยแก้ปัญหาที่การยกเลิกธุรกรรมที่กรอได้บางส่วนจะทําให้หน้าจอว่างเปล่า (I43037, b/339169168)
เวอร์ชัน 1.7.0
1 พฤษภาคม 2024
androidx.fragment:fragment-*:1.7.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0 มีการคอมมิตเหล่านี้
การรองรับท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้
- ตอนนี้ฟragment รองรับการกลับไปยังส่วนต่างๆ ของแอปแบบคาดการณ์เมื่อใช้
Animator
หรือเมื่อใช้ AndroidX Transition 1.5.0 วิธีนี้จะช่วยให้ผู้ใช้สามารถใช้ท่าทางสัมผัสย้อนกลับเพื่อดูส่วนย่อยก่อนหน้าโดยการมองหา Animator/การเปลี่ยน ก่อนตัดสินใจทำธุรกรรมผ่านการดำเนินการทำท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบทรานซิชัน | ทรัพยากร XML | รองรับการย้อนกลับที่คาดการณ์ได้ |
---|---|---|
Animation |
R.anim |
ไม่ |
Animator |
R.animator |
ใช่ |
เฟรมเวิร์ก Transition |
R.transition |
ไม่ |
AndroidX Transition ที่มี Transition 1.4.1 หรือต่ำกว่า |
R.transition |
ไม่ |
AndroidX Transition พร้อม Transition 1.5.0 |
R.transition |
ใช่ |
หากพบปัญหาเกี่ยวกับการรองรับการกดกลับแบบคาดการณ์ในฟragments หลังจากที่คุณเลือกใช้ท่าทางสัมผัสเพื่อกดกลับแบบคาดการณ์ โปรดรายงานปัญหาเกี่ยวกับฟragments พร้อมตัวอย่างโปรเจ็กต์ที่ทำให้เกิดปัญหา คุณปิดใช้การย้อนกลับแบบคาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false)
ใน onCreate()
ของกิจกรรม
ตอนนี้ FragmentManager.OnBackStackChangedListener()
มี onBackStackChangeProgressed()
และ onBackStackChangeCancelled()
สำหรับการรับความคืบหน้าย้อนหลังที่คาดการณ์และเหตุการณ์ที่ยกเลิกแล้วตามลำดับ
อาร์ติแฟกต์การคอมโพสิต์ของส่วนย่อย
เราได้สร้างอาร์ติแฟกต์ fragment-compose
ใหม่ที่เน้นการรองรับแอปที่อยู่ระหว่างการเปลี่ยนจากสถาปัตยกรรมที่ใช้ Fragment ไปเป็นสถาปัตยกรรมที่ใช้ Compose โดยสมบูรณ์
ฟีเจอร์แรกที่มีให้ใช้งานในอาร์ติแฟกต์ใหม่นี้คือเมธอดส่วนขยาย content
ใน Fragment
ที่ต้องการช่วยให้ใช้ Compose สำหรับ UI ของแต่ละ Fregment ได้ง่ายขึ้นด้วยการสร้าง ComposeView
ให้คุณและตั้งค่า ViewCompositionStrategy
ที่ถูกต้อง
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
เวอร์ชัน 1.7.0-rc02
17 เมษายน 2024
androidx.fragment:fragment-*:1.7.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า
sharedElement
โดยไม่ใช้ทรานซิชันอื่นๆ จะใช้งานไม่ได้ (Iec48e) - แก้ไขข้อบกพร่องที่หากเพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถกรอได้ลงในธุรกรรมที่ทรานซิชันอื่นๆ ทั้งหมดสามารถกรอได้ ระบบจะขัดข้อง ตอนนี้ธุรกรรมจะถือว่าไม่สามารถกรอกลับได้อย่างถูกต้อง (I18ccd)
เวอร์ชัน 1.7.0-rc01
3 เมษายน 2024
androidx.fragment:fragment-*:1.7.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-rc01 มีการคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- ตอนนี้ FRG ขึ้นอยู่กับ Profile Installer 1.3.1
เวอร์ชัน 1.7.0-beta01
20 มีนาคม 2024
androidx.fragment:fragment-*:1.7.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ระบบเขียน
FragmentHostCallback
ด้วย Kotlin เพื่อให้ค่า Null ของโฮสต์ประเภททั่วไปของโฮสต์ตรงกับค่า Null ของประเภทการแสดงผลonGetHost()
(I40af5)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่เมื่อบันทึกท่าทางสัมผัส "กลับแบบคาดการณ์" บนส่วนที่ไม่ได้อยู่ในคอนเทนเนอร์ ระบบจะไม่ทำลายส่วนที่บันทึกไว้ ระบบจะย้าย Fragment ไปยังสถานะสุดท้ายทันที (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 มีคอมมิตเหล่านี้
อาร์ติแฟกต์การคอมโพสิต์ของส่วนย่อย
เราได้สร้างอาร์ติแฟกต์ 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 ทาง Fragment จะแสดง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/exitTransition ไม่ได้ (I8472b) - จาก Fragment
1.6.2
: เมื่อมีการขยาย Fragment ของFragmentContainerView
สถานะต่างๆ เช่นFragmentManager
, Host และรหัสจะเข้าถึงได้ใน Callback ของonInflate
(I1e44c, b/307427423) - จากข้อมูลโค้ด
1.6.2
: เมื่อใช้clearBackStack
เพื่อนำชุดข้อมูลโค้ดออก ระบบจะล้างViewModel
ของข้อมูลโค้ดที่ฝังอยู่เมื่อล้างViewModels
ของข้อมูลโค้ดหลัก (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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ฟragment รองรับการกดย้อนกลับแบบคาดคะเนเมื่อใช้ Androidx Transitions แล้ว ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัส "กลับ" เพื่อไปยังส่วนที่แล้วด้วย Transition ของ Androidx ที่กําหนดเองได้ก่อนที่จะตัดสินใจทําธุรกรรมหรือยกเลิกผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์ คุณต้องใช้รุ่น Transition
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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ Fraktment เมื่อใช้การย้อนกลับแบบคาดการณ์ ซึ่งทำให้ระบบข้าม Fraktment แรกในกองซ้อนการย้อนกลับของเครื่องมือจัดการ Fraktment และทำให้กิจกรรมเสร็จสิ้นเมื่อใช้การย้อนกลับของระบบผ่านการไปยังส่วนต่างๆ ด้วยปุ่ม 3 ปุ่มหรือท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ (I0664b, b/295231788)
เวอร์ชัน 1.7.0-alpha02
9 สิงหาคม 2023
androidx.fragment:fragment-*:1.7.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เมื่อใช้ Fragment กับท่าทางสัมผัสเพื่อย้อนกลับแบบคาดการณ์จาก API 34 หากคุณใช้ระบบการเปลี่ยนที่ไม่รองรับการกรอ (
Animations
,Transitions
) หรือไม่มีการเปลี่ยนเลย ตอนนี้ Fragment จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการย้อนกลับ (I8100c)
เวอร์ชัน 1.7.0-alpha01
7 มิถุนายน 2023
androidx.fragment:fragment-*:1.7.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชันนี้พัฒนาในสาขาภายใน
ฟีเจอร์ใหม่
- ตอนนี้ฟragment รองรับการกดย้อนกลับแบบคาดคะเนในแอปเมื่อใช้
Animator
แล้ว ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัส "กลับ" เพื่อดูส่วนที่แล้วด้วย Animator ที่กําหนดเองได้ก่อนที่จะตัดสินใจว่าจะทําธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก นอกจากนี้ คุณยังปิดใช้ลักษณะการทำงานใหม่นี้ได้ด้วยโดยใช้enablePredictiveBack()
เวอร์ชันทดลองและส่งfalse
เวอร์ชัน 1.6
เวอร์ชัน 1.6.2
1 พฤศจิกายน 2023
androidx.fragment:fragment-*:1.6.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เมื่อมีการขยายส่วนของ
FragmentContainerView
สถานะต่างๆ เช่นFragmentManager
, โฮสต์ และรหัสจะเข้าถึงได้ในonInflate
callback (I1e44c, b/307427423) - เมื่อใช้
clearBackStack
เพื่อนำชุดข้อมูลโค้ดโค้ดย่อยออก ระบบจะล้างViewModel
ของข้อมูลโค้ดย่อยทั้งหมดเมื่อล้างViewModels
ของข้อมูลโค้ดหลัก (I6d83c, b/296173018)
เวอร์ชัน 1.6.1
26 กรกฎาคม 2023
androidx.fragment:fragment-*:1.6.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่สถานะที่บันทึกไว้เมื่อกิจกรรมหยุดลงแต่ไม่ได้ทำลายจะได้รับการแคชอย่างไม่ถูกต้อง แม้ว่าระบบจะย้ายอินสแตนซ์ของข้อมูลโค้ดกลับไปอยู่ในสถานะ
RESUMED
แล้วก็ตาม ซึ่งจะทำให้ระบบนำสถานะที่แคชไว้มาใช้ซ้ำหากอินสแตนซ์ของ Fraktment นั้นอยู่ในกองซ้อนที่ย้อนกลับเมื่อใช้ API กองซ้อนที่ย้อนกลับหลายรายการเพื่อบันทึกและกู้คืน Fraktment นั้น (I71288, b/246289075)
อัปเดตทรัพยากร Dependency
- ตอนนี้ FRG ขึ้นอยู่กับ Activity 1.7.2 การแก้ไขนี้ช่วยแก้ปัญหาที่ผู้ใช้ Kotlin ขยาย
ComponentDialog
ไม่ได้หากไม่ได้ใช้ Activity อย่างชัดเจน (b/287509323)
เวอร์ชัน 1.6.0
7 มิถุนายน 2023
androidx.fragment:fragment-*:1.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.5.0
- สถานะที่บันทึกไว้ของ
Fragment
จะแยกออกเป็นสถานะไลบรารีส่วนตัว (คลาสParcelable
ที่กำหนดเอง) กับสถานะที่นักพัฒนาแอประบุไว้ ซึ่งตอนนี้จะจัดเก็บในBundle
เสมอ ซึ่งช่วยให้ระบุได้ว่าสถานะของส่วนย่อยเกิดขึ้นที่ใด - อินเทอร์เฟซ
FragmentManager.OnBackStackChangedListener
ได้รับการขยายให้มี 2 รายการเพิ่มเติมสำหรับonBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งจะเรียกใช้กับFragment
แต่ละรายการทันทีก่อนที่จะเพิ่ม/นำออกจากกองซ้อนด้านหลังของ Fraktment และทันทีหลังจากทำธุรกรรมเสร็จสมบูรณ์ตามลำดับ FragmentStrictMode
เพิ่มWrongNestedHierarchyViolation
ใหม่ซึ่งจะตรวจจับเมื่อมีการฝังข้อมูลโค้ดย่อยภายในลําดับชั้นของมุมมองของรายการหลัก แต่ไม่ได้เพิ่มลงในchildFragmentManager
ของรายการหลัก- ตอนนี้ API
Fragment
และFragmentManager
ที่ใช้Intent
หรือIntentSender
ได้รับการกำกับเนื้อหาอย่างเหมาะสมด้วย@NonNull
เพื่อป้องกันการส่งค่า Null เนื่องจากค่า 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) - แก้ไขปัญหาที่มีการเรียก
onBackStackChangeListener
กลับสำหรับธุรกรรมที่ไม่ได้เปลี่ยนกองซ้อนที่ย้อนกลับหากมีการผสมผสานกับธุรกรรมที่เปลี่ยน (I0eb5c, b/279306628)
เวอร์ชัน 1.6.0-beta01
19 เมษายน 2023
ปล่อย androidx.fragment:fragment-*:1.6.0-beta01
แล้ว เวอร์ชัน 1.6.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การใช้
postponeEnterTransition
ที่มีระยะหมดเวลาแล้วแทนที่กลุ่มที่เลื่อนออกไปจะไม่ส่งผลให้เกิดการรั่วไหลของกลุ่มที่เลื่อนออกไปอีกต่อไป (I2ec7d, b/276375110) - ตอนนี้การเรียกกลับ
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) - เราได้กำกับเนื้อหาของ API ของ
commitNow()
,executePendingTransactions()
และpopBackStackImmediate()
ด้วย@MainThread
ซึ่งหมายความว่าตอนนี้ API ทั้งหมดจะแสดงข้อผิดพลาดในการสร้างเมื่อไม่ได้เรียกใช้จากเธรดหลักแทนที่จะรอให้แสดงข้อผิดพลาดเมื่อรันไทม์ (Ic9665, b/236538905)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องใน
FragmentManager
ที่การบันทึกและการกู้คืนในเฟรมเดียวกันอาจทำให้ระบบขัดข้อง (Ib36af, b/246519668) - ตอนนี้การเรียกกลับ
OnBackStackChangedListener
onBackStackChangeStarted
และonBackStackChangeCommitted
จะทำงานเฉพาะเมื่อมีการเปลี่ยนแปลงกองซ้อนที่ย้อนกลับFragmentManager
เท่านั้น (I66055, b/274788957)
เวอร์ชัน 1.6.0-alpha08
22 มีนาคม 2023
androidx.fragment:fragment-*:1.6.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha08 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงพฤติกรรม
- มีการปรับช่วงเวลาของ Callback
OnBackStackChangedListener.onBackStackChangeCommited
ให้ทำงานก่อนการดำเนินการ Fragment จะทำงาน การดำเนินการนี้จะทำให้ไม่มีการส่งผ่านส่วนย่อยที่ถูกปลดออก (I66a76, b/273568280)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.5.6
: แก้ไขปัญหาที่การเรียกใช้clearFragmentResultListener
ในsetFragmentResultListener
ไม่ทำงานหากLifecycle
เป็นSTARTED
อยู่แล้วและมีผลลัพธ์พร้อมให้ดูแล้ว (If7458)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ Fragment จะขึ้นอยู่กับวงจร
2.6.1
(586fe7) - ตอนนี้ เศษจะขึ้นอยู่กับ 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
มี 2 รายการเพิ่มเติมสำหรับ Callback ได้แก่onBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งช่วยให้มีข้อมูลเพิ่มเติมและการควบคุมเมื่อเกิดการเปลี่ยนแปลงสแต็กย้อนกลับใน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)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะกู้คืนสถานะ
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)
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซการเรียกกลับของผู้ให้บริการแบบใหม่ (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) เพื่อให้แน่ใจว่าข้อมูลโค้ดจะได้รับการเรียกกลับที่เหมาะสมเสมอ (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)
การแก้ไขข้อบกพร่อง
- จากส่วน
1.5.1
: แก้ไขการถดถอยในDialogFragmentCallbacksDetector
ในกรณีที่การใช้ Lint เวอร์ชันที่มาพร้อมกับ AGP 7.4 ทําให้ Lint ขัดข้อง (b/237567009)
การอัปเดตทรัพยากร Dependency
- จาก Fragment
1.5.1
: ตอนนี้ไลบรารี Fragment จะขึ้นอยู่กับ Lifecycle2.5.1
(Id204c) - จาก Fragment
1.5.1
: ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity1.5.1
(I10f07)
รุ่น 1.5
เวอร์ชัน 1.5.7
19 เมษายน 2023
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
และ androidx.fragment:fragment-testing:1.5.7
เผยแพร่แล้ว เวอร์ชัน 1.5.7 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การใช้
postponeEnterTransition
ที่มีระยะหมดเวลาแล้วแทนที่กลุ่มที่เลื่อนออกไปจะไม่ส่งผลให้เกิดการรั่วไหลของกลุ่มที่เลื่อนออกไปอีกต่อไป (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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ปัญหาที่การนำเศษส่วนใดก็ตามออก ไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทําให้เมนูของกิจกรรมใช้งานไม่ได้ (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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ฟragment จะไม่บันทึกสถานะ
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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดที่ทำให้มีการเรียกกลับ
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
และonConfigurationChanged()
ในกองซ้อนด้านหลัง (I34581, I8dfe6, b/242570955) - ข้อมูลโค้ดย่อยที่ฝังอยู่จะไม่ได้รับการเรียกกลับ
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()
พร้อมกันอาจทําให้ส่วนที่ออกใช้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) - ตอนนี้คลังข้อมูลโค้ดโค้ดจะขึ้นอยู่กับ Activity
1.5.1
(I10F07)
เวอร์ชัน 1.5.0
29 มิถุนายน 2022
androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
และ androidx.fragment:fragment-testing:1.5.0
เผยแพร่แล้ว เวอร์ชัน 1.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.4.0
- การผสานรวม CreationExtras - ตอนนี้
Fragment
สามารถให้บริการViewModelProvider.Factory
แบบไม่มีสถานะผ่านCreationExtras
ของ Lifecycle2.5.0
แล้ว - การผสานรวมกล่องโต้ตอบคอมโพเนนต์ - ตอนนี้
DialogFragment
ใช้ComponentDialog
ผ่านกิจกรรม1.5.0
เป็นกล่องโต้ตอบเริ่มต้นที่onCreateDialog()
แสดง - การเปลี่ยนโครงสร้างอินสแตนซ์ที่บันทึกไว้ - ส่วนย่อยเริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์แล้ว การดำเนินการนี้จะช่วยระบุสถานะที่บันทึกไว้ในข้อมูลโค้ดและแหล่งที่มาของสถานะได้อย่างชัดเจน การเปลี่ยนแปลงปัจจุบันมีดังต่อไปนี้
- ตอนนี้
FragmentManager
จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงในBundle
แทนที่จะบันทึกในParcelable
ที่กําหนดเองโดยตรง - ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าไว้ผ่าน
Fragment Result APIs
ที่ยังไม่ได้แสดงแยกต่างหากจากสถานะภายในของFragmentManager
- ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละรายการแยกจากสถานะภายในของ
FragmentManager
ซึ่งจะช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละรายการกับรหัสที่ไม่ซ้ำกันซึ่งอยู่ในบันทึกการแก้ไขข้อบกพร่องของFragmentManager
ได้Fragment
- ตอนนี้
การเปลี่ยนแปลงอื่นๆ
- ตอนนี้
FragmentStrictMode
ช่วยให้ Fragment ส่วนตัวของบุคคลที่สามในการข้ามบทลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้allowViolation()
กับชื่อคลาส - เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน
ActionBar
ของกิจกรรมแล้ว APIMenuHost
และMenuProvider
ที่เพิ่มใน Activity1.4.0
มอบแพลตฟอร์ม API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของรายการที่ควรใช้กับ FRG
เวอร์ชัน 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
ซึ่งจะช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละรายการกับรหัสที่ไม่ซ้ำกันซึ่งมีอยู่ในการบันทึกการแก้ไขข้อบกพร่องของรายการ (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 ใหม่แทนตามหมายเหตุการเผยแพร่ของ1.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
ของกิจกรรมแล้ว เนื่องจากมีการเชื่อมโยงกับข้อมูลโค้ดของคุณอย่างแน่นหนาและไม่สามารถทดสอบแยกกันได้ APIMenuHost
และMenuProvider
ที่เพิ่มใน Activity1.4.0-alpha01
มอบแพลตฟอร์ม API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของรายการที่ควรใช้กับ FRG (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)
การแก้ไขข้อบกพร่อง
- จากส่วน
1.4.1
:FragmentContainerView
ไม่แสดงข้อยกเว้นสถานะที่ไม่ถูกต้องอีกต่อไปเมื่อรหัสมุมมองที่สร้างขึ้นจาก XML มีค่าเป็นลบ (Ic185b, b/213086140) - จาก Fragment
1.4.1
: เมื่อใช้ LambdaownerProducer
ที่กําหนดเองกับฟังก์ชันแบบเลื่อนเวลาby viewModels()
ตอนนี้ระบบจะใช้defaultViewModelProviderFactory
จากเจ้าของนั้นหากไม่ได้ระบุViewModelProvider.Factory
ที่กําหนดเองแทนที่จะใช้ Factory ของ Fragment เสมอ (I56170, b/214106513) - แก้ไขข้อขัดข้องเมื่อเข้าถึง
ViewModel
เป็นครั้งแรกจากregisterForActivityResult()
callback ของFragment
(Iea2b3)
เวอร์ชัน 1.4
เวอร์ชัน 1.4.1
26 มกราคม 2022
androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
และ androidx.fragment:fragment-testing:1.4.1
เผยแพร่แล้ว เวอร์ชัน 1.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
FragmentContainerView
ไม่แสดงข้อยกเว้นสถานะที่ไม่ถูกต้องอีกต่อไปเมื่อรหัสมุมมองที่สร้างขึ้นจาก XML มีค่าเป็นลบ (Ic185b, b/213086140)- เมื่อใช้
ownerProducer
lambda ที่กําหนดเองกับฟังก์ชันแบบเลื่อนเวลาของby viewModels()
ตอนนี้ระบบจะใช้defaultViewModelProviderFactory
จากเจ้าของนั้นหากไม่ได้ระบุViewModelProvider.Factory
ที่กําหนดเองแทนที่จะใช้ฟีเจอร์ของเศษส่วนของdefaultViewModelProviderFactory
เสมอ (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 ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณจะเลือกพิมพ์ข้อความบันทึก เรียกใช้โปรแกรมฟังที่กำหนดเอง หรือทำให้แอปขัดข้องได้ คุณสามารถตั้งค่าFragmentStrictMode.Policy
ที่ควบคุมการตรวจสอบที่จะเปิดใช้และ "บทลงโทษ" ที่เรียกให้แสดงในFragmentManager
ผ่านเมธอดsetStrictModePolicy()
ใหม่ นโยบายดังกล่าวจะมีผลกับFragmentManager
นั้นและมีผลโดยอ้อมกับตัวจัดการข้อมูลโค้ดย่อยที่ไม่ได้ตั้งค่านโยบายของตนเอง โปรดดู StrictMode สำหรับ Fragment ตอนนี้
FragmentContainerView
มีเมธอดgetFragment()
ซึ่งจะแสดงผลข้อมูลโค้ดที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกับfindFragmentById()
ที่มีรหัสของFragmentContainerView
แต่อนุญาตให้ใช้การเรียกต่อกันได้val navController = binding.container.getFragment<NavHostFragment>().navController
ตอนนี้
FragmentScenario
ใช้Closeable
แล้ว ซึ่งจะช่วยให้คุณใช้Closeable
กับเมธอดuse
หรือ try-with-resources ของ Kotlin ได้เพิ่ม
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมแบบมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragments หรือไม่ระบบได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)
ออกแล้ว และตัวจัดการสถานะใหม่เป็นตัวเลือกเดียวที่ใช้ได้
กองซ้อนที่ย้อนกลับหลายกอง
FragmentManager
จะเก็บกองซ้อนด้านหลังซึ่งประกอบด้วยธุรกรรมของ FRGMENT ที่ใช้ addToBackStack()
ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับไปยังสถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วยข้อมูลโค้ดที่แยกส่วนเพื่อให้ข้อมูลโค้ดที่แยกส่วนกู้คืนสถานะได้อย่างเหมาะสม
เวอร์ชันนี้ขยายกลไกเหล่านี้ด้วย FragmentManager
API ใหม่ 3 รายการ ได้แก่ saveBackStack(String name)
, restoreBackStack(String name)
และ clearBackStack(String name)
API เหล่านี้ใช้ name
เดียวกันกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของทุกส่วนที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณกู้คืนธุรกรรมและส่วนที่เป็นของธุรกรรมเหล่านั้นได้ในภายหลังโดยที่สถานะยังคงเดิม ซึ่งจะช่วยให้คุณ "สลับ" ระหว่างกองซ้อนย้อนกลับหลายกองได้อย่างมีประสิทธิภาพด้วยการบันทึกกองซ้อนย้อนกลับปัจจุบันและกู้คืนกองซ้อนย้อนกลับที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่เป็นแบบไม่ประสานเวลาและส่งผลให้ธุรกรรมของข้อมูลโค้ดทั้งหมดกลับไปยังชื่อที่เฉพาะเจาะจงนั้นกลับรายการเดิม ("ป๊อป") และข้อมูลโค้ดที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่ก็มีความแตกต่างที่สำคัญ 2-3 อย่างดังนี้
saveBackStack()
จะรวมเสมอ- ซึ่งแตกต่างจาก
popBackStack()
ที่ระบบจะแสดงธุรกรรม ทั้งหมดในกองซ้อนด้านหลังหากไม่พบชื่อที่ระบุในกองซ้อนด้านหลัง หรือหากระบุชื่อเป็นค่าว่างsaveBackStack()
จะไม่ทําการใดๆ หากคุณยังไม่ได้ทําธุรกรรมของข้อมูลโค้ดที่แยกส่วนโดยใช้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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ ข้อมูลโค้ดส่วนบนจะส่ง
onHiddenChanged()
ลงตามลําดับชั้นทั้งหมดก่อนที่จะเปิดใช้งานการเรียกกลับของตนเอง (Iedc20, b/77504618) - ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อเปลี่ยนจากส่วนที่เปิดแป้นพิมพ์อยู่ไปยังส่วนที่แสดง Recycler View (I8b842, b/196852211)
- ตอนนี้
DialogFragment
ใช้setReorderingAllowed(true)
สำหรับธุรกรรมทั้งหมดที่สร้างขึ้นเมื่อคุณเรียกใช้show()
,showNow()
หรือdismiss()
(Ie2c14) - คำเตือน Lint ของ
DetachAndAttachFragmentInSameFragmentTransaction
ที่ยาวมากได้ถูกย่อให้สั้นลงเป็นDetachAndAttachSameFragment
(e9eca3)
เวอร์ชัน 1.4.0-alpha10
29 กันยายน 2021
androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
และ androidx.fragment:fragment-testing:1.4.0-alpha10
เผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha10 มีคอมมิตเหล่านี้
เชิงเส้น
- เพิ่ม
DetachAndAttachFragmentInSameFragmentTransaction
คำเตือนเกี่ยวกับ Lint สำหรับการตรวจหาการเรียกทั้งdetach()
และattach()
ในFragment
เดียวกันในFragmentTransaction
เดียวกัน เนื่องจากการดำเนินการที่เสริมกันเหล่านี้จะยกเลิกกันเมื่อดำเนินการในธุรกรรมเดียวกัน จึงต้องแยกการดำเนินการเหล่านี้ออกเป็นธุรกรรมแยกต่างหากจึงจะดำเนินการใดๆ ได้ (aosp/1832956, b/200867930) - เพิ่มข้อผิดพลาด
FragmentAddMenuProvider
lint สำหรับแก้ไขการใช้งานวงจรของ Fragment ไปยังวงจรของมุมมอง Fragment เมื่อใช้addMenuProvider
API ของMenuHost
(aosp/1830457, b/200326272)
การอัปเดตเอกสารประกอบ
- ตอนนี้ข้อความการเลิกใช้งานสำหรับ API ได้รับการจัดการโดย 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)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบไม่ล้างสถานะของข้อมูลโค้ดที่เพิ่มด้วย
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) - ปรับปรุง
UseGetLayoutInflater
การตรวจสอบ Lint เพื่อจัดการกับกรณีขอบเพิ่มเติม (Ie5423)
เวอร์ชัน 1.4.0-alpha07
18 สิงหาคม 2021
androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
และ androidx.fragment:fragment-testing:1.4.0-alpha07
เผยแพร่โดยไม่มีการเปลี่ยนแปลงที่โดดเด่น เวอร์ชัน 1.4.0-alpha07 มีการคอมมิตเหล่านี้
เวอร์ชัน 1.4.0-alpha06
4 สิงหาคม 2021
androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
และ androidx.fragment:fragment-testing:1.4.0-alpha06
เผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha06 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับกองซ้อนย้อนกลับหลายกองเมื่อสลับระหว่างกองซ้อนย้อนกลับอย่างรวดเร็ว ซึ่งจะปรากฏเป็น
IllegalStateException
ขณะที่กู้คืนFragmentTransaction
หรือปรากฏเป็นสำเนาที่ 2 ของข้อมูลโค้ด (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
จะปลดล็อกสถานะที่บันทึกไว้เสมอเป็นการดำเนินการแรกในวงจร callbacks ที่ลบล้าง (I6db7a)
การอัปเดตทรัพยากร Dependency
- จาก 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
เพื่อโฮสต์ข้อมูลโค้ดที่ตัดตอนมาจากภายนอกFragmentActivity
คุณควรติดตั้งใช้งานFragmentHostCallbacks
SavedStateRegistryOwner
(Iba68e, b/188734238)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเรียกใช้
saveBackStack()
เป็นส่วนหนึ่งของการรองรับแบ็กสแต็กหลายรายการจะดำเนินการไม่สำเร็จเมื่อดำเนินการพร้อมกันกับFragmentTransaction
ที่ใช้replace()
(I73137) - แก้ไข
NullPointerException
ที่จะเกิดขึ้นหลังจากการกู้คืนกองซ้อนที่บันทึกไว้ซึ่งมีธุรกรรมหลายรายการด้วยตนเองเมื่อใช้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) - ตอนนี้คลาส Use Case สำหรับ
TargetFragmentUsageViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นเพื่อรวมข้อมูลโค้ดที่ทำให้เกิดละเมิดและข้อมูลอื่นๆ ที่มี (Icc6ac) - ตอนนี้คลาสที่ขยาย
RetainInstanceUsageViolation
มีข้อความแสดงข้อผิดพลาดโดยละเอียดมากขึ้นซึ่งรวมถึงส่วนย่อยที่ทำให้เกิดการละเมิด (I6Bd55) - ตอนนี้
FragmentReuseViolation
มีข้อความแสดงข้อผิดพลาดที่มีรายละเอียดมากขึ้นที่รวมรหัสก่อนหน้าของส่วนย่อย (I28ce2) SetUserVisibleHintViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งระบุสิ่งที่ระบบตั้งค่าเป็นคำแนะนำที่ผู้ใช้มองเห็น (Ib2d5f)
- ตอนนี้
การเปลี่ยนแปลงลักษณะการทำงาน
- ยกเลิกข้อจำกัดในการโทร
fitsSystemWindows
ในFragmentContainerView
แล้ว การดำเนินการนี้จะไม่ทำให้แอปของคุณขัดข้องอีกต่อไป (6b8ddd, b/190622202)
แก้ไขข้อบกพร่อง
- จาก Fragment
1.3.5
: แก้ไขการถดถอยในการเปลี่ยนองค์ประกอบที่แชร์ซึ่งนำมาใช้ใน Fragment1.3.4
โดย aosp/1679887 ตอนนี้กลุ่มการเปลี่ยนฉากจะจัดการอย่างถูกต้อง (ตั้งค่าโดยตรงผ่าน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
ซึ่งแสดงถึง 2 กรณีของประเภทการละเมิด (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}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมของคุณในการเปลี่ยนเฟรมหรือไม่ (I46652)
กองซ้อนที่ย้อนกลับหลายกอง
FragmentManager
จะเก็บกองซ้อนด้านหลังซึ่งประกอบด้วยธุรกรรมของ FRGMENT ที่ใช้ addToBackStack()
ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับไปยังสถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วยข้อมูลโค้ดที่แยกส่วนเพื่อให้ข้อมูลโค้ดที่แยกส่วนกู้คืนสถานะได้อย่างเหมาะสม
รุ่นนี้ต่อยอดจากกลไกเหล่านี้ด้วยการให้บริการ API ของ FragmentManager
ใหม่ 2 รายการ ได้แก่ saveBackStack(String name)
และ restoreBackStack(String name)
API เหล่านี้ใช้ name
เดียวกันกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของทุกส่วนที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณกู้คืนธุรกรรมและส่วนที่เป็นของธุรกรรมเหล่านั้นได้ในภายหลังโดยที่สถานะยังคงเดิม ซึ่งจะช่วยให้คุณ "สลับ" ระหว่างกองซ้อนย้อนกลับหลายกองได้อย่างมีประสิทธิภาพด้วยการบันทึกกองซ้อนย้อนกลับปัจจุบันและกู้คืนกองซ้อนย้อนกลับที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่เป็นแบบไม่ประสานเวลาและส่งผลให้ธุรกรรมของข้อมูลโค้ดทั้งหมดกลับไปยังชื่อที่เฉพาะเจาะจงนั้นกลับรายการเดิม ("ป๊อป") และข้อมูลโค้ดที่เพิ่มเข้ามาจะถูกทำลายและนำออก แต่ก็มีความแตกต่างที่สำคัญ 2-3 อย่างดังนี้
saveBackStack()
จะรวมเสมอ- ซึ่งแตกต่างจาก
popBackStack()
ที่ระบบจะแสดงธุรกรรม ทั้งหมดในกองซ้อนด้านหลังหากไม่พบชื่อที่ระบุในกองซ้อนด้านหลัง หรือหากระบุชื่อเป็นค่าว่างsaveBackStack()
จะไม่ทําการใดๆ หากคุณยังไม่ได้ทําธุรกรรมของข้อมูลโค้ดที่แยกส่วนโดยใช้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
เสมอเมื่อสร้างองค์ประกอบย่อยเป็นส่วนหนึ่งของเลย์เอาต์ (#141, b/153738235)detectWrongFragmentContainer()
จะตรวจจับเมื่อคุณเพิ่มข้อมูลโค้ดไปยังคอนเทนเนอร์ที่ไม่ใช่FragmentContainerView
คุณควรใช้FragmentContainerView
เป็นคอนเทนเนอร์สำหรับ Fragment ในเลย์เอาต์เสมอ (#146, b/181137036)detectRetainInstanceUsage()
จะตรวจจับเมื่อคุณใช้ API ของsetRetainInstance()
หรือgetRetainInstance()
ที่เลิกใช้งานแล้ว (#140, b/153737954)detectSetUserVisibleHint()
จะตรวจจับเมื่อคุณใช้setUserVisibleHint()
API ที่เลิกใช้งานแล้ว (#136, b/153738974)detectTargetFragmentUsage()
จะตรวจจับเมื่อคุณใช้ APIsetTargetFragment()
,getTargetFragment()
หรือgetTargetRequestCode()
ที่เลิกใช้งานแล้ว (#139, b/153737745)
การเปลี่ยนแปลง API
- ระบบได้นำ API เวอร์ชันทดลองของ
FragmentManager.enableNewStateManager(boolean)
ออกแล้ว และตัวจัดการสถานะใหม่เป็นตัวเลือกเดียวที่ใช้ได้ (I90036, b/162776418) - ตอนนี้
FragmentScenario
ใช้Closeable
แล้ว ซึ่งจะช่วยให้คุณใช้Closeable
กับเมธอดuse
หรือ try-with-resources ของ 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()
(เช่นเดียวกับที่ Fragment ที่มีคําอธิบายประกอบ@AndroidEntryPoint
ทําเมื่อใช้ Hilt) หากคุณไม่ได้ลบล้างเมธอดดังกล่าว ระบบจะสร้างSavedStateViewModelFactory
ที่บันทึกและคืนค่าสถานะพร้อมกับมุมมองของ Fregment นั้นเป็นโรงงานเริ่มต้น (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 ที่เพิ่ม
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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จากข้อมูลโค้ด
1.4.0-alpha03
:FragmentManager
จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายามซ่อนข้อมูลโค้ดที่กำลังจะนําออก (I573dd, b/183634730) - ตอนนี้มุมมองของ Fragment ได้รับการตั้งค่าเป็น
GONE
อย่างถูกต้องเมื่อใช้hide()
เมื่อมุมมองรูทมีการตั้งค่าtransitionGroup=”true”
(aosp/1766655, b/193603427) - ตอนนี้
FragmentActivity
จะปลดล็อกสถานะที่บันทึกไว้เสมอเป็นการดำเนินการแรกในวงจรชีวิตของการเรียกกลับที่ลบล้าง (I6db7a)
การอัปเดตทรัพยากร Dependency
- จาก 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 ตอนนี้กลุ่มการเปลี่ยนฉากจะจัดการอย่างถูกต้อง (ตั้งค่าโดยตรงผ่าน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
ที่บันทึกและคืนค่าสถานะพร้อมกับมุมมองของ Fregment นั้นเป็นโรงงานเริ่มต้น (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)
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดขึ้นในข้อมูลโค้ด
1.3.2
ซึ่งจะทำให้ภาพเคลื่อนไหวpopEnter
ไม่ทำงานเมื่อแสดงFragmentTransaction
ที่มีการดำเนินการsetPrimaryNavFragment
เช่น การดำเนินการที่ใช้โดยNavHostFragment
(I38c87, b/183877426) - ตอนนี้
FragmentContainerView
จะตรวจสอบว่าFragment
ทุกรายการได้รับการส่งWindowInsets
ชุดใหม่ เพื่อให้แต่ละกลุ่มใช้ส่วนแทรกได้อย่างอิสระ (I63f68, b/172153900) - ตอนนี้
DialogFragment
จะจัดการกรณีที่เพิ่มข้อมูลโค้ดย่อยลงในคอนเทนเนอร์ที่มีรหัสเดียวกับคอนเทนเนอร์ในคลาสDialog
ที่กําหนดเองอย่างถูกต้อง ซึ่งจะแก้ไขปัญหาลําดับชั้นของมุมมองเมื่อนํารหัสที่ใช้ภายในโดยกล่องโต้ตอบ เช่นBottomSheetDialog
มาใช้ซ้ำ (Ie6279, b/180021387) FragmentManager.dump()
ตอนนี้เยื้องข้อมูลโค้ดแรกของรายการข้อมูลโค้ดที่ใช้งานอยู่อย่างเหมาะสม (If5c33, b/183705451)
การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่
- ตอนนี้เครื่องมือจัดการสถานะใหม่ของข้อมูลโค้ดที่ฝังจะจัดการการเปลี่ยนสถานะออกด้วยการดำเนินการซ่อนอย่างถูกต้อง (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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.2.2 ซึ่งจะแก้ไขปัญหาเกี่ยวกับ
InvalidFragmentVersionForActivityResult
การตรวจสอบ Lint ของ Activity เมื่อใช้ Fragment 1.3.1 ขึ้นไป - ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.3.1
เวอร์ชัน 1.3.1
10 มีนาคม 2021
androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
และ androidx.fragment:fragment-testing:1.3.1
เผยแพร่แล้ว เวอร์ชัน 1.3.1 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้กล่องโต้ตอบภายใน
DialogFragment
สามารถเข้าถึงเจ้าของ ViewTree ได้ผ่าน DecorView เพื่อให้ใช้DialogFragment
กับComposeView
ได้ (Ib9290, b/180691023)
การแก้ไขข้อบกพร่อง
- ตอนนี้ รายการที่ขยายลงในกิจกรรม
RESUMED
ที่ใช้ FragmentContainerView จะแสดงอย่างถูกต้องหลังจากการเปลี่ยนแปลงการกําหนดค่าแล้ว (Ie14c8, b/180538371) - ไม่มี
}
เกินมาอีกต่อไปที่ส่วนท้ายของข้อมูลโค้ดtoString()
(I54705, b/177761088) - ตอนนี้เมธอดที่ลบล้างใน FragmentActivity จะรับค่าจาก javaDoc ของเมธอดพื้นฐานอย่างถูกต้องแล้ว (I736ce, b/139548782)
- เอกสารของ
setFragmentResult
และsetFragmentResultListener
ได้อัปเดตเอกสารพารามิเตอร์เพื่อระบุว่าไม่ยอมรับค่า Null อีกต่อไป (I990ba, b/178348386)
การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่
- แก้ไขหน่วยความจํารั่วไหลในรายการที่เกิดจาก
mFocusedView
(Ib4e9e, b/179925887) - ตอนนี้ Fragment จะเรียก
onCreateOptionsMenu
อย่างถูกต้องแล้วเมื่อใช้ แสดง/ซ่อนธุรกรรม (I8bce8, b/180255554) - ตอนนี้ Fragment ย่อยที่มีการเปลี่ยนซึ่งเริ่มขึ้นก่อนที่จะวางส่วนย่อยอย่างถูกต้องจะไปถึง
RESUMED
(Ic11e6, b/180825150) ได้อย่างเหมาะสม - ตอนนี้ รายการที่ขยายโดยใช้แท็ก
<fragment>
จะเข้าสู่RESUMED
(I452ac, (I9fa49) เสมอ
การอัปเดตทรัพยากร Dependency
- ส่วนที่ 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
ใหม่ครั้งสำคัญช่วยแก้ไขปัญหาต่างๆ มากมายเกี่ยวกับการส่งเหตุการณ์วงจรชีวิต ภาพเคลื่อนไหว และการเปลี่ยนผ่าน รวมถึงวิธีจัดการกับส่วนที่เลื่อนเวลา การผสานรวม Activity Result API: เพิ่มการรองรับ
ActivityResultRegistry
API ที่เปิดตัวใน Activity1.2.0
เพื่อจัดการโฟลว์startActivityForResult()
+onActivityResult()
และrequestPermissions()
+onRequestPermissionsResult()
โดยไม่ต้องลบล้างเมธอดในฟragment นอกเหนือจากการระบุฮุกสําหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว- เวอร์ชันนี้แก้ไขปัญหาเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ซึ่งทำให้ Activity Result API ไม่ทำงานใน
FragmentActivity
เวอร์ชันก่อนหน้า คุณต้องอัปเกรดเป็น 1.3.0 เพื่อใช้ Activity Result API ในFragmentActivity
หรือAppCompatActivity
- เวอร์ชันนี้แก้ไขปัญหาเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ซึ่งทำให้ Activity Result API ไม่ทำงานใน
Fragment Result API: เพิ่มการสนับสนุนสำหรับการแสดงผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่บน
FragmentManager
ซึ่งใช้ได้กับ Fragment ลําดับชั้น (หลัก/ย่อย), DialogFragment และ Fragment ในการนําทาง และช่วยให้มั่นใจว่าระบบจะส่งผลลัพธ์ไปยัง Fragment ของคุณเมื่อ Fragment นั้นมีค่าอย่างน้อยSTARTED
เราเลิกใช้งาน API ของกลุ่มเป้าหมายแล้วเพื่อหันมาใช้ API ใหม่เหล่านี้ โปรดดูหัวข้อรับผลลัพธ์โดยใช้ Fragment Result APIFragmentOnAttachListener
: เลิกใช้งาน CallbackonAttachFragment()
ในFragmentActivity
และFragment
แล้ว เราได้เพิ่มFragmentOnAttachListener
ใหม่เพื่อให้เป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์onAttachFragment()
ให้กับ Listener ที่แยกต่างหากและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ไปยัง FragmentManager อื่นนอกเหนือจาก FragmentManager ย่อยโดยตรงการปรับปรุง
FragmentScenario
: คลาสFragmentScenario
จากอาร์ติแฟกต์fragment-testing
ได้รับการเขียนใหม่เป็น Kotlin และได้รับการปรับปรุงหลายประการ ดังนี้- ตอนนี้
FragmentScenario
ใช้setMaxLifecycle()
เพื่อนำmoveToState()
ไปใช้ เพื่อให้แน่ใจว่ามีลักษณะการทำงานที่สอดคล้องกันในทุกระดับ API และแยกสถานะของ Fragment ออกจากกิจกรรมที่สำคัญ - ตอนนี้
FragmentScenario
รองรับการตั้งค่าLifecycle.State
เริ่มต้นเพื่อรองรับการยืนยันสถานะของข้อมูลโค้ดก่อนที่จะไปยังLifecycle.State
แต่ละรายการเป็นครั้งแรก - ตอนนี้มีทางเลือกอื่นสำหรับ
FragmentScenario
API ของonFragment
ในรูปแบบของเมธอดส่วนขยายที่แก้ไขของ KotlinwithFragment
ซึ่งให้คุณแสดงผลค่าได้ สิ่งที่น่าสังเกตคือ การดำเนินการนี้จะโยนข้อยกเว้นที่ยกขึ้นในบล็อกที่ระบุอีกครั้ง
- ตอนนี้
ViewTree
การรองรับ: ตอนนี้Fragment
รองรับViewTreeLifecycleOwner.get(View)
,ViewTreeViewModelStoreOwner.get(View)
และViewTreeSavedStateRegistryOwner
API ที่เพิ่มไว้ใน Lifecycle2.3.0
และ SavedState1.1.0
เพื่อให้แสดงผล Fragment เป็นViewModelStoreOwner
และSavedStateRegistryOwner
และLifecycleOwner
ที่เชื่อมโยงกับวงจรชีวิตของมุมมองของ Fragment เมื่อใช้View
ภายในFragment
การเปลี่ยนแปลงภาพเคลื่อนไหว
TRANSIT_
: ตอนนี้เอฟเฟกต์เริ่มต้นของเศษข้อความอย่างTRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
ใช้Animator
แทนAnimation
แล้ว ขณะนี้ทรัพยากรที่ใช้สร้างภาพเคลื่อนไหวเหล่านี้เป็นทรัพยากรส่วนตัวการเลิกใช้งาน
setRetainInstance()
: เราเลิกใช้งานเมธอดsetRetainInstance()
ในฟragments แล้ว ViewModel ช่วยให้นักพัฒนาแอปมี API ที่เฉพาะเจาะจงสำหรับการเก็บสถานะที่เชื่อมโยงกับกิจกรรม ฟragment และกราฟการนําทาง วิธีนี้ช่วยให้นักพัฒนาซอฟต์แวร์ใช้ViewModel
ปกติที่ไม่ได้เก็บรักษาไว้ได้ และแยกสถานะที่เฉพาะเจาะจงที่ต้องการเก็บรักษาไว้ หลีกเลี่ยงแหล่งที่มาที่พบบ่อยของการรั่วไหล และคงคุณสมบัติที่เป็นประโยชน์ของการสร้างและการทำลายสถานะที่เก็บรักษาไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของViewModel
และคอลแบ็กonCleared()
ที่ได้รับ)การเลิกใช้งานอะแดปเตอร์ ViewPager 1: เมื่อมีการเปิดตัว ViewPager2
1.0.0
ระบบได้เลิกใช้งานคลาสFragmentPagerAdapter
และFragmentStatePagerAdapter
สำหรับการโต้ตอบกับViewPager
ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2
เวอร์ชัน 1.3.0-rc02
27 มกราคม 2021
ปล่อย androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
และ androidx.fragment:fragment-testing:1.3.0-rc02
แล้ว เวอร์ชัน 1.3.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
DialogFragment
หลักจะปรากฏเหนือDialogFragment
ย่อยหลังจากการเปลี่ยนแปลงการกําหนดค่า ตอนนี้ตอนนี้ข้อมูลโค้ดของกล่องโต้ตอบย่อยจะปรากฏเหนือข้อมูลโค้ดของกล่องโต้ตอบหลักเสมอ (I30806, b/177439520) - แก้ปัญหาที่การดำเนินการ
hide
ด้วยAnimation
จะทำให้ส่วนที่ซ่อนอยู่กะพริบในตอนท้ายของภาพเคลื่อนไหว (I57e22, b/175417675) - ตอนนี้ Fragment ที่เพิ่มทรานซิชันก่อนที่จะมีการแนบลำดับชั้นการแสดงผลไปถึง
RESUMED
อย่างถูกต้องแล้ว (I1fc1d, b/177154873)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- มุมมองของ 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) - ตอนนี้โฟกัสจะได้รับการกู้คืนไปยังมุมมองรูทของ Fregment อย่างถูกต้องเมื่อกลับมาทำงานอีกครั้ง (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) - ตอนนี้การเริ่มต้น FragmentStatus ด้วยสถานะ
DESTROYED
จะส่งIllegalArgumentException
(I73590, b/170765622)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- แก้ไขปัญหาที่มุมมองจะไม่แสดงผลในสถานะสุดท้ายหากคุณขัดจังหวะการเปลี่ยนเฟรมที่ใช้
Animator
หรือตัวเลือกTRANSIT_FRAGMENT_
อย่างใดอย่างหนึ่ง (I92426, b/169874632) - แก้ไขปัญหาที่ทำให้ทำลายเศษที่มี
Animation
อยู่อย่างถูกต้องไม่ได้ (I83d65) - ตอนนี้การออกจากกลุ่มที่มีเอฟเฟกต์ย้อนกลับจะยกเลิกและเริ่มใหม่อย่างถูกต้องด้วยเอฟเฟกต์การเข้าที่เหมาะสม (I62226, b/167092035)
- แก้ไขปัญหาที่การออกจาก
Animator
ของhide()
ไม่ทำงาน (Id7ffe) - ตอนนี้เศษข้อความจะปรากฏอย่างถูกต้องเมื่อเลื่อนเวลาออกแล้วเริ่มทันที (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)
การเปลี่ยนแปลงลักษณะการทำงาน
- ไฟล์ทรัพยากรของข้อมูลโค้ดได้ตั้งค่าเป็นส่วนตัวอย่างถูกต้องแล้ว (aosp/1425237)
การแก้ไขข้อบกพร่อง
- ตอนนี้ ข้อมูลโค้ดที่ขยายโดยใช้แท็ก
<fragment>
จะรออย่างถูกต้องจนกว่าระบบจะเพิ่มมุมมองลงในคอนเทนเนอร์ก่อนที่จะเปลี่ยนสถานะเป็น "เริ่มต้นแล้ว" (I02f4c) - ตอนนี้เศษที่มองเห็นได้และ
setMaxLifecycle()
ถึงCREATED
จะแสดงเอฟเฟกต์การออกอย่างถูกต้องแล้ว (b/165822335) - การนำชิ้นส่วนที่ถอดออกซึ่งไม่ได้เพิ่มไว้ในสแต็กด้านหลังออกจะไม่ทำให้หน่วยความจำรั่วไหลอีกต่อไป ขอแสดงความนับถือ จาก Nicklas Ansman Giertz! (b/166489383)
- ตอนนี้ ข้อมูลโค้ดที่ใช้งานอยู่จะมี
FragmentManager
ที่ไม่ใช่ค่า Null เสมอ และระบบจะถือว่าข้อมูลโค้ดที่มีFragmentManager
ที่ไม่ใช่ค่า Null ใช้งานอยู่เสมอ (aosp/1422346) - ตอนนี้เอฟเฟกต์เริ่มต้นของส่วนย่อย
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
และTRANSIT_FRAGMENT_FADE
ใช้Animator
แทนAnimation
แล้ว (b/166155034)
การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่
- ตอนนี้ระบบจะกู้คืนสถานะโฟกัสของมุมมองของเศษได้อย่างถูกต้องจากตอนก่อนเริ่มภาพเคลื่อนไหว (Icc256)
- ตอนนี้เศษที่มีเฉพาะทรานซิชันองค์ประกอบที่แชร์จะแสดงเอฟเฟกต์พิเศษอย่างถูกต้องแล้ว ซึ่งหมายความว่าเศษจะเปลี่ยนเป็นสถานะสุดท้าย (Iaebc7, b/166658128)
- ตอนนี้ระบบจะนำมุมมองข้อมูลโค้ดออกจากคอนเทนเนอร์เสมอก่อนที่จะทำลาย (Id5876)
- ตอนนี้ตัวจัดการสถานะใหม่จะนำมุมมองส่วนย่อยออกอย่างต่อเนื่องก่อนที่จะเพิ่มการป้อนมุมมอง (I41a6e)
- ตอนนี้ตัวจัดการสถานะใหม่จะยึดตามการเปลี่ยนแปลงระดับการเข้าถึงของมุมมองส่วนย่อยอย่างชัดเจน ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของการป้อน Fragment เป็น
INVISIBLE
ก่อนที่ภาพเคลื่อนไหวจะเริ่มเล่น จริงๆ แล้วองค์ประกอบนั้นจะยังคงไม่ปรากฏให้เห็น (b/164481490) - ตอนนี้ระบบจะจัดลําดับความสําคัญของ
Animators
เหนือAnimations
ซึ่งหมายความว่าข้อมูลโค้ดที่มีทั้ง 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
ซึ่งส่งผลต่อการส่งวิธีการของวงจร การเคลื่อนไหว และการเปลี่ยนรูปแบบ รวมถึงวิธีจัดการธุรกรรมที่เลื่อนเวลาไว้ ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่Fragments: บล็อกโพสต์เกี่ยวกับการสร้าง Internals ขึ้นมาใหม่ (b/139536619, b/147749580)
- คุณสามารถใช้ API เวอร์ชันทดลองใน
FragmentManager.enableNewStateManager(boolean)
เพื่อควบคุมว่า FragmentManager จะใช้ตัวจัดการสถานะใหม่หรือไม่ (I7b6ee)
ปัญหาต่อไปนี้จะได้รับการแก้ไขเมื่อใช้ตัวจัดการสถานะใหม่เท่านั้น
- ตอนนี้ระบบหยุดการดำเนินการ
replace
ก่อนหน้าอย่างถูกต้องแล้วก่อนที่จะเริ่มการดำเนินการใหม่ (b/161654580) - ตอนนี้ ฟรแอกเมนต์จะป้องกันไม่ให้มีการแสดงภาพเคลื่อนไหวหลายรายการที่แข่งขันกันในฟรแอกเมนต์เดียวกัน ซึ่งจะช่วยหลีกเลี่ยงกรณีที่
Animation
จะลบล้างเอฟเฟกต์Transition
ทั้งหมด หรือทั้งAnimator
และTransition
ในฟรแอกเมนต์แต่ละรายการจะทำงานพร้อมกัน (b/149569323) - ตอนนี้ระบบจะเรียกใช้
enterTransition
และexitTranstion
ของข้อมูลโค้ดที่เข้ามาและออกทั้งหมดแทนที่จะเรียกใช้เฉพาะข้อมูลโค้ดที่เข้ามาล่าสุดและข้อมูลโค้ดที่ออกก่อนสุด (b/149344150) - ส่วนย่อยที่เลื่อนแล้วจะไม่ติดอยู่ที่สถานะ
CREATED
อีกต่อไป แต่จะย้ายไปที่STARTED
ที่มีส่วนย่อยอื่นๆ แทน (b/129035555) - แก้ไขปัญหาที่
FragmentManager
จะดำเนินการไม่ตามลำดับเมื่อมีการผสมธุรกรรมที่เรียงลำดับใหม่ซึ่งเลื่อนออกไปกับธุรกรรมที่ไม่ได้เรียงลำดับใหม่ (b/147297731) - การปรากฏของหลายข้อความพร้อมกันจะไม่ทําให้ข้อความย่อยปรากฏขึ้นชั่วคราวอีกต่อไปเมื่อเลื่อนข้อความ (b/37140383)
- ตอนนี้
FragmentManager
จะแสดงผลข้อมูลโค้ดที่ถูกต้องเมื่อเรียกใช้findFragmentById()
หรือfindFragmentByTag()
จากภายในการเรียกกลับonAttachFragment()
(b/153082833) - ฟragment จะไม่เรียก
onCreateView()
ในฟragment ที่ถูกทำลายอีกต่อไปเมื่อมีการเลื่อนเวลาการแทนที่ฟragment (b/143915710) - ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อพยายามรวมอินสแตนซ์เฟรมเวิร์ก
Transition
กับ AndroidXTransition
จะกล่าวถึงส่วนที่มีค่าการเปลี่ยนที่ไม่ถูกต้อง (b/155574969)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้คุณสามารถเรียก
launch()
ในActivityResultLauncher
ในเมธอดวงจรชีวิตของonCreate()
ของ Fragment ได้แล้ว (b/161464278) - ตอนนี้การเรียกใช้
registerForActivityResult()
หลังonCreate()
จะแสดงข้อยกเว้นที่ระบุว่าไม่อนุญาต แทนที่จะแสดงผลลัพธ์ไม่สำเร็จโดยไม่มีการแจ้งเตือนหลังจากการเปลี่ยนแปลงการกําหนดค่า (b/162255449) - ตอนนี้
FragmentActivity
ใช้OnContextAvailableListener
API ที่เปิดตัวในกิจกรรม1.2.0-alpha08
เพื่อกู้คืนสถานะของFragmentManager
Listener ที่เพิ่มลงในคลาสย่อยของ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 ทุกระดับและแยกสถานะของ Fregment ออกจาก Activity ที่เกี่ยวข้อง (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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เราเลิกใช้งาน Callback
onAttachFragment()
ในFragmentActivity
และFragment
แล้ว เราได้เพิ่มFragmentOnAttachListener
ใหม่เพื่อใช้เป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์onAttachFragment()
ให้กับ Listener ที่แยกต่างหากและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ไปยัง FragmentManager อื่นนอกเหนือจาก FragmentManager ย่อยโดยตรง (I06d3d)
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะกู้คืนสถานะมุมมองของรายการหลักก่อนรายการย่อย ซึ่งจะช่วยแก้ไขปัญหาการจัดเรียงภาพหลังจากการเปลี่ยนแปลงการกําหนดค่าเมื่อ
DialogFragment
จะแสดงDialogFragment
รายการอื่นเป็นรายการย่อย (b/157195715) - แก้ไขปัญหาที่การตรวจสอบ Lint ของ
UseRequireInsteadOfGet
ไม่สามารถจัดการการใช้งานแบบเชนของอ operators?.
และ!!
ได้อย่างถูกต้อง (b/157677616)
เวอร์ชัน 1.3.0-alpha05
20 พฤษภาคม 2020
ปล่อย androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
และ androidx.fragment:fragment-testing:1.3.0-alpha05
แล้ว เวอร์ชัน 1.3.0-alpha05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
ViewTreeViewModelStoreOwner
จาก Lifecycle2.3.0-alpha03
และViewTreeSavedStateRegistryOwner
จาก SavedState1.1.0-alpha01
เมื่อใช้View
ภายในFragment
(aosp/1297993, aosp/1300264)
การเปลี่ยนแปลง API
- ตอนนี้ API ของ
setFragmentResult()
และsetFragmentResultListener()
จะใช้Bundle
และFragmentResultListener
ตามลําดับ หากต้องการล้างผลการค้นหาหรือ Listener ที่ตั้งค่าไว้ก่อนหน้านี้อย่างชัดแจ้ง ให้ใช้เมธอดclearFragmentResult()
และclearFragmentResultListener()
ใหม่ (b/155416778) - ตอนนี้
setFragmentResultListener()
ส่วนขยาย Kotlin ที่ใช้ Lambda จะมีเครื่องหมายเป็นinline
(b/155323404)
การเปลี่ยนแปลงลักษณะการทำงาน
startActivityForResult()
,startIntentSenderForResult()
และrequestPermissions
ในFragment
ที่เลิกใช้งานไปก่อนหน้านี้ตอนนี้ใช้ActivityResultRegistry
ภายในแล้ว จึงยกเลิกข้อจํากัดในการใช้เฉพาะบิตที่ต่ำกว่า (ต่ำกว่า0xFFFF
) สําหรับรหัสคําขอเมื่อใช้ API เหล่านั้น (b/155518741)
การอัปเดตเอกสารประกอบ
- ขยายเอกสารประกอบเกี่ยวกับตัวสร้าง
Fragment(@LayoutRes int)
และDialogFragment(@LayoutRes int)
เพื่อชี้แจงว่าควรเรียกใช้ตัวสร้างเหล่านี้จากตัวสร้างที่ไม่มีอาร์กิวเมนต์ของคลาสย่อยเมื่อใช้FragmentFactory
เริ่มต้น (b/153042497)
เวอร์ชัน 1.3.0-alpha04
29 เมษายน 2020
androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
และ androidx.fragment:fragment-testing:1.3.0-alpha04
เผยแพร่แล้ว เวอร์ชัน 1.3.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 ฟragment ผ่าน API ใหม่ใน
FragmentManager
ซึ่งใช้ได้กับ Fragment ลําดับชั้น (หลัก/ย่อย), DialogFragment และ Fragment ในการนําทาง และช่วยให้มั่นใจว่าระบบจะส่งผลลัพธ์ไปยัง Fragment ของคุณเมื่อ Fragment นั้นมีค่าอย่างน้อยSTARTED
(b/149787344)
การเปลี่ยนแปลง API
- เราเลิกใช้งาน API ของกลุ่มเป้าหมายแล้ว หากต้องการส่งข้อมูลระหว่างข้อมูลโค้ดที่แยกส่วน คุณควรใช้ Fragment Result API ใหม่แทน (b/149787344)
- เลิกใช้งาน API
startActivityForResult()
/onActivityResult()
และrequestPermissions()
/onRequestPermissionsResult()
ใน Fragment แล้ว โปรดใช้ Activity Result API (aosp/1290887) - การเปลี่ยนแปลงที่สําคัญจากกิจกรรม
1.2.0-alpha04
: เปลี่ยนชื่อเมธอดprepareCall()
เป็นregisterForActivityResult()
(aosp/1278717)
การแก้ไขข้อบกพร่อง
- ตอนนี้
getViewLifecycleOwner()
ของข้อมูลโค้ดจะหยุดลงก่อนที่จะเรียกonSaveInstanceState()
ซึ่งสอดคล้องกับลักษณะการทำงานของวงจรของข้อมูลโค้ด (b/154645875) - ตอนนี้การเรียกใช้
setMenuVisibility(false)
ในส่วนย่อยจะเปลี่ยนการแสดงเมนูที่ระบุโดยส่วนย่อยของส่วนย่อยได้อย่างถูกต้อง (b/153593580) - แก้ไข
illegalStateException
เมื่อเพิ่มข้อมูลโค้ดไปยังลําดับชั้นมุมมองของDialogFragment
ด้วยFragmentContainerView
(b/154366601) - เมธอด
getDefaultViewModelProviderFactory()
ในรายการจะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์รายการไว้นอกกิจกรรม (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)
การแก้ไขข้อบกพร่อง
- แก้ไขการเกิดปัญหาซ้ำที่เกิดขึ้นในข้อมูลโค้ด
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) - จากส่วน
1.2.4
: ปิดใช้กฎ LintFragmentLiveDataObserve
ในคลาสDialogFragment
เนื่องจากวงจรชีวิตของคลาสและวงจรชีวิตของมุมมองจะซิงค์กันเสมอ ทำให้สามารถใช้this
หรือviewLifecycleOwner
ได้อย่างปลอดภัยเมื่อเรียกใช้observe
(b/151765086)
การเปลี่ยนแปลงทรัพยากร Dependency
- ข้อมูลโค้ดที่ฝังจะขึ้นอยู่กับ กิจกรรม
1.2.0-alpha03
ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result 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 ที่เปิดตัวใน Activity1.2.0-alpha02
เพื่อจัดการกับโฟลว์startActivityForResult()
+onActivityResult()
และrequestPermissions()
+onRequestPermissionsResult()
โดยไม่ต้องลบล้างเมธอดใน Fregment นอกเหนือจากการระบุฮุกสําหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว (b/125158199)
การเปลี่ยนแปลง API
- ตอนนี้
DialogFragment
มีคอนสตรคเตอร์ที่ใช้@LayoutRes
ซึ่งระบุเลย์เอาต์ที่onCreateView()
ควรขยายโดยค่าเริ่มต้น (b/150327080) - เลิกใช้งานเมธอด
onActivityCreated()
แล้ว โค้ดที่ทำงานกับมุมมองของข้อมูลควรอยู่ในonViewCreated()
(ซึ่งเรียกใช้ก่อนonActivityCreated()
ทันที) และโค้ดเริ่มต้นอื่นๆ ควรอยู่ในonCreate()
หากต้องการรับการติดต่อกลับโดยเฉพาะเมื่อonCreate()
ของกิจกรรมเสร็จสมบูรณ์ คุณควรลงทะเบียนLifeCycleObserver
ในLifecycle
ของกิจกรรมในonAttach()
และนำออกเมื่อได้รับการติดต่อกลับonCreate()
(b/144309266)
แก้ไขข้อบกพร่อง
- จากข้อมูลโค้ด
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) - จากส่วน
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
ของข้อมูลโค้ดเป็นLifecycleOwner
สำหรับมุมมองที่onCreateView()
แสดง (aosp/1182955)
การเปลี่ยนแปลง API
- เมธอด
setRetainInstance()
ใน Fragments เลิกใช้งานแล้ว ในการเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการเก็บรักษาสถานะที่สามารถเชื่อมโยงกับกราฟกิจกรรม ส่วนย่อย และการนำทาง วิธีนี้ช่วยให้นักพัฒนาซอฟต์แวร์ใช้ViewModel
ปกติที่ไม่ได้เก็บรักษาไว้ได้ และแยกสถานะที่เฉพาะเจาะจงที่ต้องการเก็บรักษาไว้ หลีกเลี่ยงแหล่งที่มาที่พบบ่อยของการรั่วไหล และคงคุณสมบัติที่เป็นประโยชน์ของการสร้างและการทำลายสถานะที่เก็บรักษาไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของViewModel
และคอลแบ็กonCleared()
ที่ได้รับ) (b/143911815) - การเปิดตัว ViewPager2
1.0.0
ทำให้คลาสFragmentPagerAdapter
และFragmentStatePagerAdapter
สำหรับโต้ตอบกับViewPager
เลิกใช้งานแล้ว ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2 (b/145132715)
การแก้ไขข้อบกพร่อง
- ตอนนี้กฎของ Fragment ProGuard จะเก็บเฉพาะคลาส
Fragment
ของตัวสร้างเริ่มต้นที่ใช้ แทนที่จะเป็นอินสแตนซ์Fragment
ทั้งหมด ซึ่งเป็นการแก้ไขการถดถอยที่ใช้ใน Fragment1.2.1
(b/149665169 require___()
กฎ Lint ที่เพิ่มในส่วน1.2.2
จะไม่แสดงผลบวกลวงอีกต่อไปสำหรับตัวแปรภายในที่มีชื่อเดียวกับชื่อพร็อพเพอร์ตี้ Kotlin ที่บดบัง (เช่นview
) (b/149891163)FragmentContainerView
ไม่แสดงUnsupportedOperationException
อีกต่อไปเมื่อใช้ตัวอย่างเลย์เอาต์ใน Android Studio (b/149707833)- แก้ไขปัญหาที่ระบบจะไม่สร้างส่วนที่เก็บไว้ซึ่งเพิ่มหลังจากบันทึกสถานะแล้วขึ้นมาใหม่อย่างต่อเนื่องแล้วทำลายหลังจากการเปลี่ยนแปลงการกําหนดค่าแต่ละครั้ง (b/145832397)
เวอร์ชัน 1.2.5
เวอร์ชัน 1.2.5
10 มิถุนายน 2020
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
และ androidx.fragment:fragment-testing:1.2.5
เผยแพร่แล้ว เวอร์ชัน 1.2.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
getViewLifecycleOwner()
ของข้อมูลโค้ดจะหยุดลงก่อนที่จะเรียกonSaveInstanceState()
ซึ่งสอดคล้องกับลักษณะการทำงานของวงจรของข้อมูลโค้ด ก่อนหน้านี้ฟีเจอร์นี้เปิดตัวในส่วนที่1.3.0-alpha04
(b/154645875) - ตอนนี้การเรียก
setMenuVisibility(false)
ในข้อมูลโค้ดจะเปลี่ยนการแสดงผลของเมนูที่มาจากข้อมูลโค้ดย่อยอย่างถูกต้อง ก่อนหน้านี้ฟีเจอร์นี้เปิดตัวในส่วนที่1.3.0-alpha04
(b/153593580)
เวอร์ชัน 1.2.4
เวอร์ชัน 1.2.4
1 เมษายน 2020
androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
และ androidx.fragment:fragment-testing:1.2.4
เผยแพร่แล้ว เวอร์ชัน 1.2.4 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- อัปเดตกฎ ProGuard ของข้อมูลโค้ดเพื่ออนุญาตให้มีการสร้างความสับสนให้กับข้อมูลโค้ดที่เก็บไว้ (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) - ตอนนี้ฟรแอ็กเมนต์จะแนะนำให้ใช้เมธอด
require___()
ที่เชื่อมโยงกันเพื่อให้ข้อความแสดงข้อผิดพลาดที่สื่อความหมายมากขึ้นแทนการใช้checkNotNull(get___())
,requireNonNull(get___())
หรือget___()!!
สำหรับ Fragment API ทั้งหมดที่มีทั้งget
และrequire
ที่เทียบเท่า (aosp/1202883)
การแก้ไขข้อบกพร่อง
- แก้ไขไฟล์ ProGuard ของ Fragment เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
- ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนำให้ใช้
viewLifecycleOwner
เมื่อใช้observe
เพื่อจัดการกับเวอร์ชันเมธอดส่วนขยายlivedata-ktx
ของobserve
ด้วย (b/148996309) - แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint หลายรายการ (aosp/1157012)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Zac Sweers ที่ร่วมตรวจสอบ
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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ ProGuard จะเก็บคอนสตรัคเตอร์เริ่มต้นของแฟรกเมนต์ที่เพิ่มผ่านเมธอด
add
และreplace
ที่ใช้อินสแตนซ์Class
(หรือเวอร์ชันที่แปลงเป็นโค้ดจริงของ Kotlin) (b/148181315) FragmentStatePagerAdapter
และFragmentPagerAdapter
ตรวจไม่พบข้อยกเว้นที่FragmentManager
ส่งเมื่อเรียกใช้finishUpdate()
อีกต่อไป (aosp/1208711)- แก้ไขปัญหาที่
FragmentManager.findFragment()
ไม่ทำงานกับส่วนที่เพิ่มผ่านแท็ก<fragment>
(b/147784323) - ตอนนี้ส่วนย่อยที่พองขึ้นโดยใช้แท็ก
<fragment>
จะได้รับการเรียกไปยังonInflate()
ก่อนonCreate()
เสมอเมื่ออยู่ในเลย์เอาต์ (aosp/1215856) - การเรียกใช้
toString()
ในอินสแตนซ์FragmentManager
จะไม่แสดงข้อยกเว้นNullPointerException
อีกต่อไปเมื่อมีการทำลายกิจกรรมแล้ว (b/148189412)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้
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
เพื่อสร้างอินสแตนซ์ของ Fregment เพื่อเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่แปลงแล้ว (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย- การผสานรวม SavedState ของ Lifecycle ViewModel: ตอนนี้
SavedStateViewModelFactory
เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้by viewModels()
,by activityViewModels()
, ตัวสร้างViewModelProvider
หรือViewModelProviders.of()
กับ Fragment - การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้มั่นใจว่าคุณใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
- การเลิกใช้งาน
getFragmentManager()
: เราได้เลิกใช้งานเมธอดgetFragmentManager()
และrequireFragmentManager()
ใน Fregment แล้ว และแทนที่ด้วยเมธอดgetParentFragmentManager()
เดียว ซึ่งจะแสดงผลFragmentManager
ที่ไม่ใช่ค่า Null ที่เพิ่ม Fregment เข้าไป (คุณใช้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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยในข้อมูลโค้ด
1.2.0-rc04
เมื่อใช้แท็ก<fragment>
ซึ่งทําให้เรียกonViewCreated()
อย่างไม่ถูกต้องระหว่างการทำลายกิจกรรม (b/146290333) - ตอนนี้ระบบจะล้างข้อมูลที่ไม่ได้รับการกําหนดค่าของข้อมูลโค้ดที่เพิ่มด้วยแท็ก
<fragment>
อย่างถูกต้องแล้ว แม้ว่าข้อมูลโค้ดจะอยู่ในเลย์เอาต์เป็นครั้งคราวเท่านั้น (เช่น ในเลย์เอาต์แนวนอนเท่านั้น) ด้วยเหตุนี้ ตอนนี้ระบบจึงย้ายข้อมูล Frgment เหล่านี้ไปยังCREATED
อย่างถูกต้องแม้ว่าจะไม่อยู่ในเลย์เอาต์แทนที่จะสร้างอินสแตนซ์แต่ไม่เคยผ่านเมธอดวงจรชีวิตของ Frgment (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()
จะยังคงแสดงผลรายการที่นําออกแล้วขณะที่ภาพเคลื่อนไหว/การเปลี่ยนรูปแบบของรายการดังกล่าวแสดงอยู่ (b/143982969, aosp/1167585) - ตอนนี้ระบบจะหยุดรายการย่อยก่อนรายการหลักอย่างถูกต้องเมื่อกิจกรรมที่รวมอยู่เรียก
onSaveInstanceState()
(b/144380645) - แก้ไขปัญหาที่การทำเครื่องหมายมุมมองไม่ถูกต้องเป็น
INVISIBLE
หลังจากเปิด Fragment ที่ซ่อนอยู่ (b/70793925) - ตอนนี้การเปลี่ยนองค์ประกอบที่แชร์แบบ Fragment จะจัดการมุมมองที่มีการหมุน ปรับขนาด ฯลฯ แล้ว (b/142835261)
การอัปเดตเอกสารประกอบ
- ชี้แจงเอกสารประกอบเกี่ยวกับการเลิกใช้งานรอบ
setUserVisibleHint()
(b/143897055) - ปรับปรุงเอกสารประกอบใน
setFragmentFactory()
และgetFragmentFactory()
เพื่อระบุได้ดียิ่งขึ้นว่าการตั้งค่าFragmentFactory
จะมีผลกับ FragmentManagers ระดับย่อยด้วย (aosp/1170095)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
และ Activity1.1.0-rc03
เวอร์ชัน 1.2.0-rc02
7 พฤศจิกายน 2019
androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
และ androidx.fragment:fragment-testing:1.2.0-rc02
เผยแพร่แล้ว เวอร์ชัน 1.2.0-rc02 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เมื่ออยู่ใน Kotlin ตอนนี้ LintFix สำหรับการใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(ซึ่งเปิดตัวใน Fragment1.2.0-rc01
) จะใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ KotlinviewLifecycleOwner
แทนgetViewLifecycleOwner()
(aosp/1143821)
เวอร์ชัน 1.2.0-rc01
23 ตุลาคม 2019
ปล่อย androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
และ androidx.fragment:fragment-testing:1.2.0-rc01
แล้ว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ขณะนี้
FragmentContainerView
รองรับแอตทริบิวต์class
แล้ว นอกเหนือจากandroid:name
ซึ่งมิเรอร์ฟังก์ชันการทำงานของแท็ก<fragment>
(b/142722242) - เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้มั่นใจว่าคุณใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(b/137122478)
แก้ไขข้อบกพร่อง
- ตอนนี้การเรียกกลับ
onDismiss
และonCancel
ในDialogFragment
รับประกันว่าDialogInterface
ที่ส่งให้จะไม่เป็นค่า Null และgetDialog()
จะแสดงผลเป็นค่าที่ไม่ Null เมื่อเรียกใช้ (b/141974033) - ตอนนี้
FragmentContainerView
จะเพิ่มส่วนที่class
หรือandroid:name
กำหนดไว้เป็นส่วนหนึ่งของการขยาย เพื่อให้findFragmentById()
และfindFragmentByTag()
ทํางานได้ทันทีหลังจากนั้น (b/142520327) - แก้ไข
IllegalStateException
ในFragmentContainerView
เนื่องจากมีการบันทึกสถานะอยู่ (b/142580713) - แก้ไข
UnsupportedOperationException
ในFragmentContainerView
เมื่อมีการสร้างความสับสนให้กับคลาสFragmentContainerView
(b/142657034)
ปัญหาที่ทราบ
- ProGuard จะไม่เก็บรักษาส่วนที่อ้างอิงผ่านแอตทริบิวต์
class
หรือandroid:name
ในFragmentContainerView
โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎการเก็บรักษาสำหรับคลาสแต่ละคลาสของส่วนด้วยตนเอง เราได้ปิดใช้กฎ 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) - เมื่อใช้ Transition
1.3.0-beta01
ตอนนี้ Fragment จะรอให้androidx.transition
Transition (นอกเหนือจาก 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
ในมุมมองรูทของ Fregment เมื่อใช้FragmentContainerView
(b/140361893) - ตอนนี้อาร์ติแฟกต์
fragment-testing
ต้องใช้ AndroidX Test1.2.0
ซึ่งแก้ไขความไม่เข้ากันกับ Espresso 3.2.0 เวอร์ชันล่าสุด (b/139100149) - นำการใช้งาน
Log.w
ใน FragmentManager ออกแล้ว (aosp/1126468)
ปัญหาที่ทราบ
onInflate()
ของข้อมูลโค้ดไม่ได้รับการระบุแอตทริบิวต์ที่เหมาะสมจาก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)
- แก้ไขปัญหาที่ Framgnets จะเรียก
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
จะกลับลําดับการวาดอย่างถูกต้องเมื่อป๊อปเศษออกจากกองซ้อนด้านหลัง (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
เป็นตัวคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับการแสดงผลที่เพิ่มแบบไดนามิก ซึ่งมาแทนที่การใช้FrameLayout
ฯลฯ เนื่องจากช่วยแก้ไขปัญหาการจัดลำดับ z ของภาพเคลื่อนไหวและการแยกการส่งข้อมูลส่วนเกินของหน้าต่างไปยังการแสดงผล (b/37036000, aosp/985243, b/136494650) - เพิ่มเมธอด
FragmentManager.findFragment(View)
แบบคงที่เพื่อดึงข้อมูล Fragment ที่มีจากมุมมองที่ขยายโดย Fragment ส่วนขยาย Kotlin มีให้บริการในfragment-ktx
ด้วย (aosp/1090757) - เพิ่มการโอเวอร์โหลดใหม่ของ
add()
และreplace()
ในFragmentTransaction
ที่ใช้Class<? extends Fragment>
และBundle
ของอาร์กิวเมนต์ (ไม่บังคับ) วิธีการเหล่านี้ใช้FragmentFactory
ของคุณในการสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ ยังมีการเพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่แปลงแล้ว (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย (b/126124987) - เพิ่มคำอธิบายประกอบ
@MainThread
ลงในFragment
lifecycle callbacks แล้ว (b/127272564) - API ที่เกี่ยวข้องกับชื่อเบรดครัมบ์ใน
FragmentTransaction
และFragmentManager.BackStackEntry
เลิกใช้งานแล้ว (b/138252944) - เราเลิกใช้งานเมธอด
setTransitionStyle
ในFragmentTransaction
แล้ว (aosp/1011537) - เมธอดหลายรายการใน
FragmentManager
ไม่ได้เป็นabstract
อีกต่อไปFragmentManager
ยังคงเป็นabstract
และไม่ควรสร้างอินสแตนซ์หรือขยายโดยตรง คุณควรรับเฉพาะอินสแตนซ์ที่มีอยู่จากgetSupportFragmentManager()
,getChildFragmentManager()
และอื่นๆ ต่อไป
แก้ไขข้อบกพร่อง
- จาก Fragment
1.1.0-rc04
: ตอนนี้ส่วนย่อยยกเลิกการเปลี่ยนที่เลื่อนออกไปอย่างถูกต้องแล้วใน "ส่วนย่อยปรากฏขึ้น" (b/138251858) - จากส่วนที่
1.1.0-rc03
: แก้ไขปัญหาการเรียกpostponeEnterTransition()
ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118) - จาก Fragment
1.1.0-rc02
: แก้ไขข้อขัดข้องในFragmentPagerAdapter
และFragmentStatePagerAdapter
เมื่อนำรายการปัจจุบันออก (b/137209870) - ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง
onDestroyView()
(b/136110528) - ตอนนี้ระบบจัดการภาพเคลื่อนไหวของแฟรกเมนต์จากแฟรกเมนต์ย่อยและรายการที่สืบทอดอย่างถูกต้องเมื่อสร้างภาพเคลื่อนไหวของแฟรกเมนต์หลัก (b/116675313)
- แก้ไข
NullPointerException
เมื่อใช้ทรานซิชันองค์ประกอบที่แชร์และการรวมการดำเนินการป๊อปและเพิ่ม (b/120507394) - เพิ่มวิธีแก้ปัญหาสำหรับ
IllegalStateException
เมื่อใช้FragmentPagerAdapter
และFragmentStatePagerAdapter
ในการทดสอบ Robolectric (b/137201343)
เวอร์ชัน 1.2.0-alpha01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
และ androidx.fragment:fragment-testing:1.2.0-alpha01
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้ FragmentManager จะเรียก
requestApplyInsets()
หลังจากแนบมุมมองของ Fragment และก่อนที่จะเรียกonViewCreated()
โดยตรง เพื่อให้มั่นใจว่ามุมมองของคุณจะมีส่วนตัดที่ถูกต้องเสมอ (b/135945162)
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อแสดงFragmentTransaction
ที่ใช้setPrimaryNavigationFragment()
ก่อนreplace()
(b/134673465)
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0
5 กันยายน 2019
ปล่อย androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
และ androidx.fragment:fragment-testing:1.1.0
แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0
- fragment-testing: อาร์ติแฟกต์
fragment-testing
มีคลาสFragmentScenario
สำหรับการทดสอบส่วนย่อยแยกต่างหาก ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบการทดสอบข้อมูลโค้ดที่แยกส่วนย่อยของแอป - FragmentFactory: ตอนนี้คุณสามารถตั้งค่า
FragmentFactory
ในFragmentManager
เพื่อจัดการการสร้างอินสแตนซ์ของข้อบังคับ ซึ่งจะนําข้อกําหนดแบบเข้มงวดที่ต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ออก - ตัวรับพร็อพเพอร์ตี้ Kotlin สําหรับ ViewModel: ตอนนี้อาร์ติแฟกต์
fragment-ktx
มีตัวรับพร็อพเพอร์ตี้ Kotlin 2 รายการ ได้แก่by viewModels()
สําหรับการเข้าถึง ViewModel ที่เชื่อมโยงกับแต่ละ Fragment และby activityViewModels()
สําหรับการเข้าถึง ViewModel ที่มีขอบเขตระดับกิจกรรม - วงจรสูงสุด: ตอนนี้คุณตั้งค่าสถานะวงจรสูงสุดสําหรับข้อมูลโค้ดได้โดยเรียกใช้
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
แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบยกเลิกการเปลี่ยนที่เลื่อนออกไปอย่างถูกต้องแล้วในฟragments ที่ปรากฏขึ้น (b/138251858)
เวอร์ชัน 1.1.0-rc03
19 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
และ androidx.fragment:fragment-testing:1.1.0-rc03
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเรียกใช้
postponeEnterTransition()
ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)
เวอร์ชัน 1.1.0-rc02
17 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
และ androidx.fragment-testing:fragment:1.1.0-rc02
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องใน
FragmentPagerAdapter
และFragmentStatePagerAdapter
เมื่อนำรายการปัจจุบันออก (b/137209870)
เวอร์ชัน 1.1.0-rc01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
และ androidx.fragment:fragment-testing:1.1.0-rc01
เผยแพร่แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะอัปเดตการแสดงผลของข้อมูลโค้ดอย่างถูกต้องเมื่อใช้การดำเนินการ
show()
หรือhide()
ขณะทรานซิชันทำงานอยู่ (b/133385058) - แก้ไข
NullPointerException
เมื่อป๊อปFragmentTransaction
ที่ใช้setPrimaryNavigationFragment()
ก่อนวันที่replace()
(b/134673465)
เวอร์ชัน 1.1.0-beta01
5 มิถุนายน 2019
androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
และ androidx.fragment:fragment-testing:1.1.0-beta01
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้
androidx.lifecycle.Lifecycle
callbacks (โดยเฉพาะที่เกี่ยวข้องกับSTARTED
,RESUMED
,PAUSED
,STOPPED
และDESTROYED
) สำหรับ Fragment ที่ฝังอยู่จะฝังอย่างถูกต้องแล้ว (b/133497591) - ตอนนี้อินสแตนซ์
OnBackPressedCallback
ที่ลงทะเบียนในonCreate()
ของ Fragment จะมีลำดับความสำคัญเหนือกว่า FragmentManager ย่อยอย่างเหมาะสม (b/133175997) - จะไม่แสดงภาพเคลื่อนไหวของกลุ่มย่อยอีกต่อไปเมื่อมีการเปลี่ยนกลุ่มหลัก (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
แก้ไขข้อบกพร่อง
- ตอนนี้รายการในเมนูที่ขยายตัวจากส่วนย่อยย่อยจะถูกนำออกอย่างถูกต้องเมื่อนำส่วนย่อยหลักออก b/131581013
เวอร์ชัน 1.1.0-alpha08
7 พฤษภาคม 2019
androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
และ androidx.fragment:fragment-testing:1.1.0-alpha08
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
รุ่นนี้ใช้ร่วมกับ Preferences 1.1.0-alpha01 ถึง 1.1.0-alpha04 ไม่ได้ โปรดอัปเกรดเป็นค่ากําหนด 1.1.0-alpha05 เมื่อใช้ Fragments เวอร์ชันนี้
ฟีเจอร์ใหม่
- เพิ่มการโอเวอร์โหลดใหม่ของ
postponeEnterTransition()
ที่มีการกำหนดเวลาหมดอายุ หลังจากนั้น ข้อมูลโค้ดจะเรียกstartPostponedEnterTransition()
โดยอัตโนมัติ b/120803208
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ระบบได้นำเมธอด
FragmentFactory
instantiate
ที่ใช้Bundle
ออกแล้ว ซึ่งก่อนหน้านี้ได้เลิกใช้งานแล้ว aosp/953856 - การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: เปลี่ยนชื่อค่าคงที่
RESUME_ONLY_CURRENT_FRAGMENT
และUSE_SET_USER_VISIBLE_HINT
ในFragmentPagerAdapter
และFragmentStatePagerAdapter
เป็นBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
และBEHAVIOR_SET_USER_VISIBLE_HINT
ตามลำดับแล้ว aosp/954782
แก้ไขข้อบกพร่อง
- ระบบจะไม่กลับมาดำเนินการกับส่วนที่จำกัดวงจรผ่าน
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
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้คุณตั้งค่าสถานะวงจรของลูกค้าสูงสุดสำหรับข้อมูลโค้ดได้โดยเรียกใช้
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
อย่างน้อยหลังจากการเปลี่ยนแปลงการกําหนดค่า ซึ่งทําให้ระบบไม่สามารถนํา ViewModel และส่วนที่เก็บไว้ของรายการย่อยออกอย่างถูกต้อง (b/129593351) - แก้ไขข้อขัดข้องใน
restoreSaveState
ที่เกิดจากข้อมูลโค้ดที่เก็บไว้ไม่ได้ซิงค์กันหลังจากบันทึกสถานะอินสแตนซ์แล้ว (b/130433793) (aosp/947824) - แก้ไขปัญหาที่ระบบจะไม่เรียก
OnBackPressedCallback
ที่เพิ่มด้วยวงจรชีวิตของ Fragment หาก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
ของ FragmentFactory ที่ใช้อาร์กิวเมนต์ Bundle แล้ว และแอปควรใช้การโอเวอร์โหลดinstantiate
ใหม่ที่ไม่ใช้ Bundle (b/128836103) - ตอนนี้เมธอด
FragmentScenario
ได้รับการกำกับเนื้อหาด้วย@StyleRes
อย่างถูกต้องแล้ว (aosp/924193) FragmentTabHost
เลิกใช้งานแล้ว (b/127971835)- นำ
getThemedContext()
ของ FragmentActivity ออกแล้ว (aosp/934078)
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน 1.1.0-alpha05 ซึ่งทําให้ Fragment ที่เข้ามากะพริบบนหน้าจอ (b/129405432)
- แก้ปัญหาที่รายการนำทางหลักจะหายไปหลังจากการดำเนินการชุด popBackStack+replace+popBackStack (b/124332597)
- แก้ไขปัญหาเมื่อใช้ตัวสร้าง
@ContentView
ในกิจกรรมเมื่อกู้คืนสถานะ Fregment (b/127313094) - แก้ไขตรรกะของ
setTargetFragment()
เมื่อแทนที่ Fragment เป้าหมายที่มีอยู่ด้วย Fragment ที่ยังไม่ได้แนบกับ FragmentManager (aosp/932156)
เวอร์ชัน 1.1.0-alpha05
13 มีนาคม 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
และ androidx.fragment:fragment-testing:1.1.0-alpha05
เผยแพร่แล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- แคชการค้นหาคำอธิบายประกอบ
@ContentView
รายการแล้ว (b/123709449)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การเรียก
remove()
,hide()
,show()
,detach()
และsetPrimaryNavigationFragment()
ที่มี Fragment แนบอยู่กับ FragmentManager อื่นจะแสดงข้อผิดพลาดIllegalStateException
แทนที่จะแสดงข้อผิดพลาดโดยไม่มีการแจ้งเตือน (aosp/904301)
แก้ไขข้อบกพร่อง
onNewIntent
สำหรับFragmentActivity
ได้รับการทําเครื่องหมายด้วย@CallSuper
อย่างถูกต้องแล้ว (b/124120586)- แก้ไขปัญหาที่
DialogFragment
เรียกonDismiss()
2 ครั้งได้เมื่อใช้getDialog().dismiss()
หรือgetDialog().cancel()
(b/126563750)
เวอร์ชัน 1.1.0-alpha04
7 กุมภาพันธ์ 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
และ androidx.fragment:fragment-testing 1.1.0-alpha04
เผยแพร่แล้ว
ฟีเจอร์ใหม่
- เพิ่มการรองรับคําอธิบายประกอบคลาส
@ContentView
ซึ่งช่วยให้คุณระบุไฟล์ XML เลย์เอาต์ที่จะขยายแทนการลบล้างonCreateView()
ได้ เราขอแนะนำให้คุณดูงานที่เกี่ยวข้องในonViewCreated()
(aosp/837619) - ตอนนี้
fragment-testing
ต้องใช้androidx.test:core-ktx
1.1.0 เวอร์ชันเสถียร (b/121209673) - ตอนนี้คุณใช้
openActionBarOverflowOrOptionsMenu
กับFragmentScenario
เพื่อทดสอบเมนูตัวเลือกที่โฮสต์ในรายการย่อยได้แล้ว (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) - แก้ไขปัญหาที่บางครั้งข้อมูลโค้ดที่ติดทั่วเว็บไซต์เป้าหมายไม่พร้อมใช้งานในหรือหลังจาก
onDestroy()
(b/122312935) - ตอนนี้ระบบจะเรียก onDismiss() ของ DialogFragment ก่อน
onDestroy()
(aosp/874133) (aosp/890734)
เวอร์ชัน 1.1.0-alpha03
17 ธันวาคม 2018
ฟีเจอร์ใหม่
- ตอนนี้ Fragment ใช้
BundleSavedStateRegistryOwner
และขึ้นอยู่กับไลบรารี SavedState ที่เพิ่งเปิดตัว [aosp/824380] - เพิ่ม
by activityViewModels
Kotlin property delegate เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับ Activity ที่มี [b/119050253] - เราได้ขยาย
by viewModels
Kotlin property delegate เพื่อใช้เมธอด 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
ที่ไม่ใช่ค่า Null เสมอ [b/119794496] - ฟรแอ็กเมนต์ที่นําออกจะไม่นําออบเจ็กต์
Lifecycle
มาใช้ซ้ำอีกหากเพิ่มเข้ามาใหม่ [b/118880674]
เวอร์ชัน 1.1.0-alpha02
3 ธันวาคม 2018
ฟีเจอร์ใหม่
- ตอนนี้ส่วนขยาย Kotlin ของ FragmentScenario ให้คุณใช้ Lambda สำหรับการสร้าง Fragment แทนการส่งอินสแตนซ์
FragmentFactory
(aosp/812913)
แก้ไขข้อบกพร่อง
- แก้ไข IllegalStateException เมื่อใช้ Fragments ที่ฝังอยู่ในกองซ้อนด้านหลัง (b/119256498)
- แก้ไขข้อขัดข้องเมื่อใช้
FragmentScenario.recreate()
กับFragmentFactory
(aosp/820540) - แก้ไขปัญหาที่เข้าถึง Frgament เป้าหมายไม่ได้หลังจากนำ Frgament ออกแล้ว (aosp/807634)
เวอร์ชัน 1.1.0-alpha01
5 พฤศจิกายน 2018
นี่เป็นรุ่นแรกของ fragment-testing
artifact และ FragmentScenario
ซึ่งสร้างขึ้นจาก androidx.test:core APIs ดูรายละเอียดเพิ่มเติมในเอกสารประกอบการทดสอบข้อมูลโค้ด
ฟีเจอร์ใหม่
- คลาส FragmentScenario ใหม่สําหรับการทดสอบส่วนย่อยแยกต่างหาก
- ตอนนี้คุณตั้งค่า
FragmentFactory
ในFragmentManager
ใดก็ได้เพื่อควบคุมวิธีสร้างอินสแตนซ์ใหม่ของ Fragment - เพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin ของ
by viewModels()
สำหรับการเรียกข้อมูล ViewModels จาก Fragment - ตอนนี้ระบบจะยกเลิกเหตุการณ์อินพุตที่รอดำเนินการ (เช่น การคลิก) ใน
onStop()
ของข้อมูลโค้ด
การเปลี่ยนแปลง API
- ขยายคําอธิบายประกอบเกี่ยวกับ Nullability อย่างมากในแพลตฟอร์ม Fragment API
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้การดำเนินการกับ Fragment ล้มเหลวจากภายใน LiveData (b/77944637)
ปัญหาที่ทราบ
- คุณจะเข้าถึง Fragment เป้าหมายไม่ได้หลังจากนํา Fragment ออกจาก FragmentManager แล้ว
fragment-testing
จะขึ้นอยู่กับandroidx.test:core:1.0.0-beta01
แทนที่จะเป็นandroidx.test:core:1.0.0
ที่ถูกต้อง