ส่วนย่อย
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
30 ตุลาคม 2024 | 1.8.5 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ Fragment คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
Groovy
dependencies { def fragment_version = "1.8.5" // 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.5" // 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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ปัญหา Fragment ที่ไม่มีคอนเทนเนอร์
DESTROYED
ทันทีเมื่อเริ่มท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ ตอนนี้ท่าทางสัมผัสจะอยู่ในสถานะCREATED
จนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ (If6b83, b/345244539)
เวอร์ชัน 1.8.0
12 มิถุนายน 2024
androidx.fragment:fragment-*:1.8.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.7.0
- ตอนนี้อาร์ติแฟกต์
fragment-compose
มีAndroidFragment
Composable
ที่อนุญาตให้เพิ่มส่วนย่อยในลำดับชั้น Compose ผ่านชื่อคลาสของ Fragment ได้ โดยจะจัดการการบันทึกและการกู้คืนสถานะของ Fragment โดยอัตโนมัติ วิธีการนี้ควรใช้แทนแนวทางที่แนะนำก่อนหน้านี้ในการใช้AndroidViewBinding
เพื่อขยาย Fragment - ตอนนี้การเรียกกลับ
onBackStackChangeCancelled
ในอินเทอร์เฟซOnBackStackChangedListener
ของFragmentManager
จะทํางานเป็นส่วนหนึ่งของการดําเนินการในFragmentManager
ซึ่งทําให้เวลาการเรียกกลับonBackStackChangeCommitted
ใกล้เคียงกันมากขึ้น
เวอร์ชัน 1.8.0-rc01
29 พฤษภาคม 2024
androidx.fragment:fragment-*:1.8.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.8.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การเรียกกลับ
onBackStackChangeCancelled
ในอินเทอร์เฟซFragmentManagers OnBackStackChangedListener
จะทํางานเป็นส่วนหนึ่งของการดําเนินการในFragmentManager
ซึ่งทําให้เวลาการเรียกกลับonBackStackChangeCommitted
ใกล้เคียงกันมากขึ้น (I5ebfb, b/332916112)
เวอร์ชัน 1.8.0-beta01
14 พฤษภาคม 2024
ปล่อย androidx.fragment:fragment-*:1.8.0-beta01
แล้ว เวอร์ชัน 1.8.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.7.1
: ตอนนี้ระบบจะเรียกใช้การย้อนกลับแบบคาดการณ์เฉพาะสำหรับธุรกรรมที่แต่ละกลุ่มมี 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
- ตอนนี้ FRG ขึ้นอยู่กับ Profile Installer 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/Transition ของคุณก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านการทำท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบทรานซิชัน | ทรัพยากร 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 |
ใช่ |
หากคุณพบปัญหากับการสนับสนุนการย้อนกลับที่คาดการณ์ใน Fragment หลังจากที่คุณเลือกใช้ท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ โปรดแจ้งปัญหากับ Fragment พร้อมกับโปรเจ็กต์ตัวอย่างที่ทำให้เกิดปัญหาซ้ำ คุณปิดใช้การย้อนกลับแบบคาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false)
ใน onCreate()
ของกิจกรรม
ตอนนี้ FragmentManager.OnBackStackChangedListener()
จะระบุ onBackStackChangeProgressed()
และ onBackStackChangeCancelled()
สําหรับการรับความคืบหน้าย้อนกลับที่คาดการณ์ไว้และกิจกรรมที่ยกเลิกตามลำดับ
อาร์ติแฟกต์ Compose ไม่ได้
เราได้สร้างอาร์ติแฟกต์ fragment-compose
ใหม่ที่เน้นการรองรับแอปที่อยู่ระหว่างการเปลี่ยนจากสถาปัตยกรรมที่ใช้ Fragment ไปเป็นสถาปัตยกรรมที่ใช้ Compose โดยสมบูรณ์
ฟีเจอร์แรกที่มีอยู่ในอาร์ติแฟกต์ใหม่นี้คือเมธอดส่วนขยาย content
ใน Fragment
ที่พยายามช่วยให้ใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการได้ง่ายขึ้นโดยการสร้าง ComposeView
สำหรับคุณและตั้งค่า ViewCompositionStrategy
ที่ถูกต้อง
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
เวอร์ชัน 1.7.0-rc02
17 เมษายน 2024
ปล่อย androidx.fragment:fragment-*:1.7.0-rc02
แล้ว เวอร์ชัน 1.7.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า
sharedElement
โดยไม่ใช้ทรานซิชันอื่นๆ จะใช้งานไม่ได้ (Iec48e) - แก้ไขข้อบกพร่องที่หากเพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถกรอได้ลงในธุรกรรมที่ทรานซิชันอื่นๆ ทั้งหมดสามารถกรอได้ ระบบจะขัดข้อง ตอนนี้ธุรกรรมจะถือว่าไม่สามารถกรอกลับได้อย่างถูกต้อง (I18ccd)
เวอร์ชัน 1.7.0-rc01
3 เมษายน 2024
ปล่อย androidx.fragment:fragment-*:1.7.0-rc01
แล้ว เวอร์ชัน 1.7.0-rc01 มีการคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ขณะนี้ Fragment จะขึ้นอยู่กับโปรแกรมติดตั้งโปรไฟล์ 1.3.1
เวอร์ชัน 1.7.0-beta01
20 มีนาคม 2024
androidx.fragment:fragment-*:1.7.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
FragmentHostCallback
เขียนด้วย Kotlin เพื่อให้ค่า Null ได้ของประเภททั่วไปของ Host ตรงกับค่า Null ได้ของประเภทผลลัพธ์ของonGetHost()
(I40af5)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่เมื่อบันทึกท่าทางสัมผัส "กลับแบบคาดการณ์" บนส่วนที่ไม่ได้อยู่ในคอนเทนเนอร์ ระบบจะไม่ทำลายส่วนที่บันทึกไว้ ตอนนี้ระบบจะย้ายข้อมูลไปยังสถานะสุดท้ายทันที (Ida0d9)
- แก้ไขปัญหาในฟragments ที่การขัดจังหวะการเปลี่ยนผ่านที่เข้ามาด้วยท่าทางสัมผัส "กลับแบบคาดการณ์" จะทำลายมุมมองที่เข้ามาและทำให้หน้าจอว่างเปล่า (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 ของแต่ละ Fregment ได้ง่ายขึ้นด้วยการสร้าง 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 มีการคอมมิตเหล่านี้
ล้างข้อมูล
- นำวิธีแก้ปัญหาสำหรับไลบรารีทรานซิชันที่แก้ไขแล้วใน Transition
1.5.0-alpha06
ออก (I04356)
เวอร์ชัน 1.7.0-alpha07
29 พฤศจิกายน 2023
androidx.fragment:fragment-*:1.7.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha07 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
ที่เกิดจากการตั้งค่าทรานซิชันองค์ประกอบที่แชร์และตั้งค่า enter/exitTransition ไม่ได้ (I8472B) - จาก Fragment
1.6.2
: เมื่อมีการขยาย 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 มีคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- ระบบได้อัปเดต Fragment ให้อ้างอิง
animateToStart
API ใหม่ที่เพิ่มเข้ามาในการเปลี่ยน1.5.0-alpha04
เวอร์ชัน 1.7.0-alpha05
20 กันยายน 2023
androidx.fragment:fragment-*:1.7.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.7.0-alpha05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Fragment จะรองรับการย้อนกลับที่คาดการณ์เมื่อใช้การเปลี่ยน Androidx ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัส "กลับ" เพื่อไปยังส่วนที่แล้วด้วย Transition ของ Androidx ที่กําหนดเองได้ก่อนที่จะตัดสินใจทําธุรกรรมหรือยกเลิกผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์ คุณต้องใช้รุ่น Transition
1.5.0-alpha03
เพื่อเปิดใช้ฟีเจอร์นี้ (Ib49b4, b/285175724)
ปัญหาที่ทราบ
- ขณะนี้มีปัญหาเกิดขึ้นหลังจากที่คุณยกเลิกท่าทางสัมผัสเพื่อกลับด้วยการเปลี่ยนฉาก 1 ครั้งแล้ว ครั้งถัดไปที่คุณเริ่มท่าทางสัมผัสเพื่อกลับ ระบบจะเรียกใช้การเปลี่ยนฉากไม่สำเร็จ ทำให้หน้าจอว่างเปล่า ปัญหานี้อาจเกิดจากปัญหาในคลังทรานซิชัน (b/300157785) หากพบปัญหานี้ โปรดรายงานปัญหาเกี่ยวกับ Fraktment พร้อมตัวอย่างโปรเจ็กต์ที่ทำให้เกิดปัญหา คุณปิดใช้การย้อนกลับแบบคาดการณ์ได้โดยใช้
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 ครั้งติดต่อกันอย่างรวดเร็วบนส่วนที่สองจนถึงส่วนย่อยสุดท้ายในสแต็กด้านหลังอาจทำให้เกิดข้อขัดข้อง (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
, โฮสต์ และรหัสได้ใน CallbackonInflate
(I1e44c, b/307427423) - เมื่อใช้
clearBackStack
เพื่อนำชุดของส่วนย่อยออก ระบบจะล้างViewModel
ของส่วนย่อยที่ฝังอยู่เมื่อล้างViewModels
ของส่วนย่อยระดับบนสุด (I6d83c, b/296173018)
เวอร์ชัน 1.6.1
26 กรกฎาคม 2023
androidx.fragment:fragment-*:1.6.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่สถานะที่บันทึกไว้เมื่อกิจกรรมหยุดลงแต่ไม่ได้ทำลายจะได้รับการแคชอย่างไม่ถูกต้อง แม้ว่าระบบจะย้ายอินสแตนซ์ของข้อมูลโค้ดกลับไปอยู่ในสถานะ
RESUMED
แล้วก็ตาม ซึ่งจะทำให้ระบบนำสถานะที่แคชไว้มาใช้ซ้ำหากอินสแตนซ์ของ Fraktment นั้นอยู่ในกองซ้อนที่ย้อนกลับเมื่อใช้ API กองซ้อนที่ย้อนกลับหลายรายการเพื่อบันทึกและกู้คืน Fraktment นั้น (I71288, b/246289075)
อัปเดตทรัพยากร Dependency
- ตอนนี้ FRG ขึ้นอยู่กับ Activity 1.7.2 วิธีนี้แก้ปัญหาที่ผู้ใช้ Kotlin ขยาย
ComponentDialog
ไม่ได้หากไม่มีทรัพยากร Dependency อย่างชัดเจน (b/287509323)
เวอร์ชัน 1.6.0
7 มิถุนายน 2023
androidx.fragment:fragment-*:1.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.5.0
- สถานะที่บันทึกไว้ของ
Fragment
แบ่งออกเป็น 2 ส่วน ได้แก่ สถานะของคลังส่วนตัว (คลาสParcelable
ที่กําหนดเอง) และสถานะที่นักพัฒนาแอประบุ ซึ่งตอนนี้จัดเก็บไว้ในBundle
เสมอ ซึ่งช่วยให้ระบุแหล่งที่มาของสถานะของข้อมูลโค้ดได้ - เราได้ขยายอินเทอร์เฟซ
FragmentManager.OnBackStackChangedListener
ให้มี Callback เพิ่มเติม 2 รายการของonBackStackChangeStarted
และonBackStackChangeCommitted
ซึ่งเรียกใช้ด้วยFragment
แต่ละรายการก่อนที่จะมีการเพิ่ม/นำออกจาก Fragment Back Stack และทันทีหลังจากที่ทำธุรกรรมตามลำดับ FragmentStrictMode
เพิ่มWrongNestedHierarchyViolation
ใหม่ซึ่งจะตรวจจับเมื่อมีการฝังข้อมูลโค้ดย่อยภายในลําดับชั้นของมุมมองของรายการหลัก แต่ไม่ได้เพิ่มลงในchildFragmentManager
ของรายการหลัก- ตอนนี้ API
Fragment
และFragmentManager
ที่ใช้Intent
หรือIntentSender
ได้รับการกำกับเนื้อหาอย่างเหมาะสมด้วย@NonNull
เพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทําให้ API เฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้ขัดข้องทันที - ตอนนี้
DialogFragment
ให้สิทธิ์เข้าถึงComponentDialog
ที่สำคัญผ่านrequireComponentDialog()
API - ตอนนี้ Fragment จะขึ้นอยู่กับวงจร
2.6.1
- ตอนนี้ เศษจะขึ้นอยู่กับ 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) - ตอนนี้ Callback
onBackStackChangeStarted
และonBackStackChangeCommitted
ใหม่จะส่งส่วนย่อยเพียงครั้งเดียวเท่านั้น แม้ว่าธุรกรรมหลายรายการจะมีส่วนย่อยเดียวกันก็ตาม (Ic6b69)
เวอร์ชัน 1.6.0-alpha09
5 เมษายน 2023
androidx.fragment:fragment-*:1.6.0-alpha09
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha09 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
DialogFragment
ให้สิทธิ์เข้าถึงComponentDialog
ที่สำคัญผ่านrequireComponentDialog()
API (I022e3, b/234274777) - เราได้กำกับเนื้อหาของ API ของ
commitNow()
,executePendingTransactions()
และpopBackStackImmediate()
ด้วย@MainThread
ซึ่งหมายความว่าตอนนี้ API ทั้งหมดจะแสดงข้อผิดพลาดในการสร้างเมื่อไม่ได้เรียกใช้จากเธรดหลักแทนที่จะรอให้แสดงข้อผิดพลาดเมื่อรันไทม์ (Ic9665, b/236538905)
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องใน
FragmentManager
ที่การบันทึกและการกู้คืนในเฟรมเดียวกันอาจทำให้ระบบขัดข้อง (Ib36af, b/246519668) - ขณะนี้ Callback
onBackStackChangeStarted
และonBackStackChangeCommitted
ของOnBackStackChangedListener
จะทำงานเมื่อมีการเปลี่ยนแปลงสแต็กแบ็กFragmentManager
เท่านั้น (I66055, b/274788957)
เวอร์ชัน 1.6.0-alpha08
22 มีนาคม 2023
androidx.fragment:fragment-*:1.6.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 1.6.0-alpha08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงพฤติกรรม
- ระบบได้ปรับเวลาของ
OnBackStackChangedListener.onBackStackChangeCommited
callback ให้ทำงานก่อนการดำเนินการกับข้อมูลโค้ดที่แยกส่วน วิธีนี้ช่วยให้มั่นใจว่าระบบจะไม่ส่งผ่านข้อมูลโค้ดที่แยกออกไปยังการเรียกกลับ (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
callback ใหม่ใน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)
การแก้ไขข้อบกพร่อง
- จากข้อมูลโค้ด
1.5.5
: ข้อมูลโค้ดจะไม่บันทึกสถานะViewModel
เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอย่างไม่ถูกต้องอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.6.0-alpha03
5 ตุลาคม 2022
androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
และ androidx.fragment:fragment-testing:1.6.0-alpha03
เผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ชั้นเรียนที่ขยายเวลา
DialogFragment
จะต้องเรียกใช้ Super ในการลบล้างonDismiss()
(I14798, b/238928865)
แก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซ Callback ของผู้ให้บริการใหม่ (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) เพื่อดูแลให้ Fragment ได้รับ Callback ที่เหมาะสมเสมอ (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)
เวอร์ชัน 1.6.0-alpha02
24 สิงหาคม 2022
androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
และ androidx.fragment:fragment-testing:1.6.0-alpha02
เผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- จากกลุ่ม
1.5.2
: แก้ไขปัญหาที่การเรียกใช้ธุรกรรมpopBackStack()
และreplace()
พร้อมกันอาจทําให้กลุ่มที่ออกใช้งานเรียกใช้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
แบ่งออกเป็น 2 ส่วน ได้แก่ สถานะของคลังส่วนตัว (คลาส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 จะขึ้นอยู่กับกิจกรรม1.5.1
(I10f07)
รุ่น 1.5
เวอร์ชัน 1.5.7
19 เมษายน 2023
androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
และ androidx.fragment:fragment-testing:1.5.7
เผยแพร่แล้ว เวอร์ชัน 1.5.7 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การใช้
postponeEnterTransition
ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปอีกต่อไป (I2ec7d, b/276375110)
เวอร์ชัน 1.5.6
22 มีนาคม 2023
ปล่อย androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
และ androidx.fragment:fragment-testing:1.5.6
แล้ว เวอร์ชัน 1.5.6 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ปัญหาที่การนำเศษส่วนใดก็ตามออก ไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทําให้เมนูของกิจกรรมใช้งานไม่ได้ (50f098, b/244336571)
- แก้ไขปัญหาที่การเรียก
clearFragmentResultListener
ภายในsetFragmentResultListener
ไม่ทำงานหากLifecycle
เป็นSTARTED
อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)
เวอร์ชัน 1.5.5
7 ธันวาคม 2022
androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
และ androidx.fragment:fragment-testing:1.5.5
เผยแพร่แล้ว เวอร์ชัน 1.5.5 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- Fragment จะไม่บันทึกสถานะ
ViewModel
อย่างไม่ถูกต้องเป็นส่วนหนึ่งของสถานะบันทึกมุมมองรีจิสทรีอีกต่อไป (I10d2b, b/253546214)
เวอร์ชัน 1.5.4
24 ตุลาคม 2022
ปล่อย androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
และ androidx.fragment:fragment-testing:1.5.4
แล้ว เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการใช้
FragmentController
ที่กําหนดเองกับโฮสต์ที่ไม่ได้ใช้อินเทอร์เฟซการเรียกกลับของผู้ให้บริการ (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) และการเรียกใช้ฟังก์ชันการส่งออกที่เลิกใช้งานจะส่งไปยังข้อมูลโค้ดย่อยไม่ได้ (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()
พร้อมกันอาจทำให้ Fragment การออกเรียกใช้Animation
/Animator
ที่ไม่ถูกต้อง (Ib1c07, b/214835303)
รุ่น 1.5.1
27 กรกฎาคม 2022
androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
และ androidx.fragment:fragment-testing:1.5.1
เผยแพร่แล้ว เวอร์ชัน 1.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน
DialogFragmentCallbacksDetector
ในกรณีที่การใช้ Lint เวอร์ชันที่มาพร้อมกับ AGP 7.4 จะทําให้ Lint ขัดข้อง (b/237567009)
การอัปเดตทรัพยากรที่เกี่ยวข้อง
- ตอนนี้ไลบรารี FRG จะขึ้นอยู่กับ Lifecycle
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()
- การจัดระเบียบโค้ดสถานะอินสแตนซ์ที่บันทึกไว้ - เราได้เริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์ของ FRG แล้ว การดำเนินการนี้จะช่วยระบุสถานะที่บันทึกไว้ในข้อมูลโค้ดและแหล่งที่มาของสถานะได้อย่างชัดเจน การเปลี่ยนแปลงในปัจจุบันมีดังนี้
- ตอนนี้
FragmentManager
จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงในBundle
แทนที่จะบันทึกในParcelable
ที่กำหนดเองโดยตรง - ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าไว้ผ่าน
Fragment Result APIs
ที่ยังไม่ได้แสดงแยกต่างหากจากสถานะภายในของFragmentManager
- ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละรายการแยกจากสถานะภายในของ
FragmentManager
ซึ่งจะช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละรายการกับรหัสที่ไม่ซ้ำกันซึ่งอยู่ในบันทึกการแก้ไขข้อบกพร่องของFragmentManager
ได้Fragment
- ตอนนี้
การเปลี่ยนแปลงอื่นๆ
- ตอนนี้
FragmentStrictMode
ช่วยให้สามารถข้ามการดําเนินการบางอย่างที่ละเมิดได้โดยใช้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
FragmentStrictMode
API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ API ของข้อมูลโค้ดที่เลิกใช้งาน เมื่อตรวจพบการละเมิด คุณจะเลือกพิมพ์ข้อความบันทึก เรียกใช้โปรแกรมฟังที่กำหนดเอง หรือทำให้แอปขัดข้องได้ คุณสามารถตั้งค่าFragmentStrictMode.Policy
ที่ควบคุมการตรวจสอบที่จะเปิดใช้และ "บทลงโทษ" ที่เรียกให้แสดงในFragmentManager
ผ่านเมธอดsetStrictModePolicy()
ใหม่ นโยบายดังกล่าวมีผลกับFragmentManager
นั้นและส่งผลกับผู้จัดการส่วนย่อยย่อยที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดูStrictMode สําหรับข้อมูลโค้ดตอนนี้
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}
เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมของคุณในการเปลี่ยนเฟรมหรือไม่API รุ่นทดลองของ
FragmentManager.enableNewStateManager(boolean)
ถูกนำออกและตอนนี้มีเฉพาะตัวจัดการสถานะใหม่เป็นตัวเลือกเดียว
กองซ้อนที่ย้อนกลับหลายกอง
FragmentManager
จะเก็บกองซ้อนด้านหลังซึ่งประกอบด้วยธุรกรรมของ FRGMENT ที่ใช้ addToBackStack()
ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับไปยังสถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วยข้อมูลโค้ดที่แยกส่วนเพื่อให้ข้อมูลโค้ดที่แยกส่วนกู้คืนสถานะได้อย่างเหมาะสม
รุ่นนี้ต่อยอดจากกลไกเหล่านี้ด้วยการให้บริการ API ของ FragmentManager
ใหม่ 3 รายการ ได้แก่ saveBackStack(String name)
, restoreBackStack(String name)
และ clearBackStack(String name)
API เหล่านี้ใช้ name
เดียวกันกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของทุกส่วนที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณกู้คืนธุรกรรมและส่วนที่เป็นของธุรกรรมเหล่านั้นได้ในภายหลังโดยที่สถานะยังคงเดิม ซึ่งจะช่วยให้คุณ "สลับ" ระหว่างสแต็กแบ็กหลายสแต็กได้อย่างมีประสิทธิภาพด้วยการบันทึกสแต็กแบ็กสแต็กปัจจุบันและกู้คืนสแต็ก Back Stack ที่บันทึกไว้
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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Fragment หลักจะส่ง
onHiddenChanged()
ลงทั้งลำดับชั้นก่อนที่จะเรียกใช้ Callback ของตัวเอง (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 มีการคอมมิตเหล่านี้
Lint
- เพิ่มคำเตือน Lint สำหรับ
DetachAndAttachFragmentInSameFragmentTransaction
สำหรับการตรวจหาการเรียกทั้งdetach()
และattach()
ในFragment
เดียวกันในFragmentTransaction
เดียวกัน เนื่องจากการดำเนินการเสริมเหล่านี้จะยกเลิกกันและกันเมื่อเสร็จสิ้นในธุรกรรมเดียวกัน การดำเนินการดังกล่าวจึงต้องแยกเป็นธุรกรรมแยกกันจึงจะทำสิ่งต่างๆ ได้ (aosp/1832956, b/200867930) - เพิ่มข้อผิดพลาด
FragmentAddMenuProvider
lint สำหรับแก้ไขการใช้งานวงจรของ Fragment ไปยังวงจรของมุมมอง Fragment เมื่อใช้addMenuProvider
API ของMenuHost
(aosp/1830457, b/200326272)
การอัปเดตเอกสารประกอบ
- ข้อความการเลิกใช้งานสำหรับ API ที่ตอนนี้จัดการโดย Activity Result 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
จะคำนึงถึง Nullability อย่างถูกต้อง (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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ปรับปรุง
UseRequireInsteadOfGet
การตรวจสอบ Lint เพื่อจัดการวงเล็บที่ไม่จำเป็นได้ดียิ่งขึ้น (I2d865) - ปรับปรุงการตรวจสอบ Lint ของ
UseGetLayoutInflater
เพื่อจัดการกับกรณีปัญหาขีดจำกัดอื่นๆ (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 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- จากข้อมูลโค้ด
1.3.6
: ตอนนี้มุมมองของข้อมูลโค้ดได้รับการตั้งค่าเป็นGONE
อย่างถูกต้องแล้วเมื่อใช้hide()
เมื่อมุมมองรูทมีการตั้งค่าtransitionGroup=”true”
(aosp/1766655, b/193603427) - จาก Fragment
1.3.6
: ตอนนี้FragmentActivity
จะปลดล็อกสถานะที่บันทึกไว้เสมอเป็นการดำเนินการแรกในวงจร callbacks ที่ลบล้าง (I6db7a)
การอัปเดตทรัพยากร Dependency
- จาก Fragment
1.3.6
: ตอนนี้ Fragment ขึ้นอยู่กับ Activity1.2.4
(I3a66c)
เวอร์ชัน 1.4.0-alpha04
30 มิถุนายน 2021
androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
และ androidx.fragment:fragment-testing:1.4.0-alpha04
เผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ขณะนี้
FragmentManager
ใช้SavedStateRegistry
ขั้นสูงเพื่อบันทึกสถานะ นอกจากนี้ เรายังได้เลิกใช้งานเมธอดsaveAllState()
และrestoreSavedState()
ในFragmentController
ด้วย หากคุณใช้FragmentController
เพื่อโฮสต์ข้อมูลโค้ดที่ตัดตอนมาจากภายนอกFragmentActivity
คุณควรติดตั้งใช้งานFragmentHostCallbacks
SavedStateRegistryOwner
(Iba68e, b/188734238)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเรียกใช้
saveBackStack()
เป็นส่วนหนึ่งของการรองรับแบ็กสแต็กหลายรายการจะดำเนินการไม่สำเร็จเมื่อดำเนินการพร้อมกันกับFragmentTransaction
ที่ใช้replace()
(I73137) - แก้ไข
NullPointerException
ที่จะเกิดขึ้นหลังจากคืนค่าสแต็ก Back Stack ที่บันทึกไว้ซึ่งมีธุรกรรมหลายรายการด้วยตัวเอง เมื่อใช้restoreBackStack()
API สำหรับการรองรับ Back Stack หลายรายการ และยังแก้ไขปัญหา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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- คลาส StrictMode ของ Fragile
Violation
ทั้งหมดได้รับการอัปเดตด้วยข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งอธิบายรายละเอียดของการละเมิด (b/187871638)- ตอนนี้
FragmentTagUsageViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งบรรจุคอนเทนเนอร์หลักที่ควรจะเพิ่มข้อมูลโค้ดไป (Ic33a7) - ตอนนี้
WrongFragmentContainerViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงคอนเทนเนอร์ที่เพิ่มข้อมูลดังกล่าว (Ib55f8) - ตอนนี้คลาสกรณีการใช้งานสำหรับ
TargetFragmentUsageViolation
มีข้อความแสดงข้อผิดพลาดโดยละเอียดมากขึ้นที่จะรวมส่วนย่อยที่ทำให้เกิดการละเมิดและข้อมูลอื่นๆ ที่มีอยู่ด้วย (Icc6ac) - ตอนนี้คลาสที่ขยาย
RetainInstanceUsageViolation
จะมีข้อความแสดงข้อผิดพลาดโดยละเอียดมากขึ้น ซึ่งรวมถึงข้อมูลโค้ดที่ทำให้เกิดข้อละเมิด (I6bd55) - ตอนนี้
FragmentReuseViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งมีรหัสก่อนหน้าของข้อมูลโค้ด (I28ce2) SetUserVisibleHintViolation
มีข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งระบุสิ่งที่ระบบตั้งค่าเป็นคำแนะนำที่ผู้ใช้มองเห็น (Ib2d5f)
- ตอนนี้
การเปลี่ยนแปลงลักษณะการทำงาน
- เปลี่ยนกลับข้อจำกัดในการเรียกใช้
fitsSystemWindows
ในFragmentContainerView
ซึ่งจะไม่ทำให้แอปขัดข้องอีกต่อไป (6b8ddd, b/190622202)
การแก้ไขข้อบกพร่อง
- จาก Fragment
1.3.5
: แก้ไขการถดถอยขององค์ประกอบแบบใช้ร่วมกันในการเปลี่ยนภาพซึ่งเปิดตัวใน Fragment1.3.4
โดย aosp/1679887 ตอนนี้กลุ่มการเปลี่ยนฉากจะจัดการอย่างถูกต้อง (ตั้งค่าโดยตรงผ่านtransitionGroup="true"
หรือโดยอ้อมผ่านtransitionName
หรือbackground
) และองค์ประกอบที่แชร์จะไม่แสดงIndexOutOfBoundsException
อีกต่อไป (I16484, b/188679569, b/188969304) FragmentManager
จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายามซ่อนส่วนที่กำลังจะนําออก (I573dd, b/183634730)OnCreateDialogIncorrectCallback
การตรวจสอบ Lint จะไม่ขัดข้องอีกต่อไปเมื่อประเมินตัวแปรระดับบนสุด (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()
ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับไปยังสถานะก่อนหน้าได้โดยใช้กลไกการบันทึกสถานะด้วยข้อมูลโค้ดที่แยกส่วนเพื่อให้ข้อมูลโค้ดที่แยกส่วนกู้คืนสถานะได้อย่างเหมาะสม
เวอร์ชันนี้ขยายการทำงานเหล่านี้ด้วย FragmentManager
API ใหม่ 2 รายการ ได้แก่ saveBackStack(String name)
และ restoreBackStack(String name)
API เหล่านี้ใช้ name
เดียวกับ addToBackStack()
เพื่อบันทึกสถานะของ FragmentTransaction
และสถานะของส่วนย่อยทั้งหมดที่เพิ่มลงในธุรกรรมเหล่านั้น และให้คุณกู้คืนธุรกรรมและส่วนย่อยเหล่านั้นในภายหลังได้ด้วยสถานะเดิม ซึ่งจะช่วยให้คุณ "สลับ" ระหว่างกองซ้อนย้อนกลับหลายกองได้อย่างมีประสิทธิภาพด้วยการบันทึกกองซ้อนย้อนกลับปัจจุบันและกู้คืนกองซ้อนย้อนกลับที่บันทึกไว้
saveBackStack()
ทำงานคล้ายกับ popBackStack()
ตรงที่ข้อมูลไม่พร้อมกันและส่งผลให้ธุรกรรม Fragment ทั้งหมดกลับไปเป็นชื่อเฉพาะนั้นถูกย้อนกลับ ("ปรากฏการณ์") และส่วนย่อยที่เพิ่มเข้ามาใดๆ จะถูกทำลายและนำออก แต่มีความแตกต่างกันอยู่บางประการที่สำคัญดังนี้
saveBackStack()
จะรวมเสมอ- ซึ่งแตกต่างจาก
popBackStack()
ที่ระบบจะแสดงธุรกรรม ทั้งหมดในกองซ้อนด้านหลังหากไม่พบชื่อที่ระบุในกองซ้อนด้านหลัง หรือหากระบุชื่อเป็นค่าว่างsaveBackStack()
จะไม่ทําการใดๆ หากคุณยังไม่ได้ทําธุรกรรมของข้อมูลโค้ดที่แยกส่วนโดยใช้addToBackStack()
ที่มีชื่อที่ตรงกันทุกประการและไม่ใช่ค่าว่างก่อนหน้านี้ - ระบบจะบันทึกสถานะของข้อมูลโค้ดทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะ "ดู" ของทุกแฟรกเมนต์ โดยจะมีการเรียกใช้
onSaveInstanceState()
ของทุกส่วนย่อย รวมถึงคืนค่าสถานะนั้น และเก็บอินสแตนซ์ViewModel
ใดๆ ที่เชื่อมโยงกับส่วนย่อยเหล่านั้นไว้ (และ ไม่ เรียกใช้onCleared()
กับส่วนย่อยนั้น)
ธุรกรรมที่เป็นส่วนซึ่งใช้ได้กับ saveBackStack()
ต้องเป็นไปตามเกณฑ์ต่อไปนี้
- ธุรกรรมของข้อมูลโค้ดทุกรายการต้องใช้
setReorderingAllowed(true)
เพื่อให้มั่นใจว่าระบบจะกู้คืนธุรกรรมเป็นการดำเนินการแบบอะตอมเดียวได้ - ชุดธุรกรรมที่บันทึกไว้ต้องมีทุกอย่างในตัวเอง (กล่าวคือ ต้องไม่อ้างอิงส่วนย่อยใดๆ ที่อยู่นอกชุดธุรกรรมนั้นอย่างชัดแจ้ง) เพื่อให้สามารถกู้คืนชุดรายการธุรกรรมดังกล่าวในภายหลังได้ ไม่ว่าจะมีการเปลี่ยนแปลงใดๆ กับแบ็กสแต็กในช่วงเวลาหรือการเปลี่ยนแปลงใดก็ตาม
- รายการที่บันทึกไว้ต้องไม่ใช่รายการที่เก็บรักษาไว้หรือมีรายการที่เก็บรักษาไว้ในชุดรายการย่อยแบบเปลี่ยนผ่าน เพื่อให้แน่ใจว่า
FragmentManager
จะไม่แสดงการอ้างอิงถึงรายการที่บันทึกไว้หลังจากบันทึกกองซ้อนที่ย้อนกลับแล้ว
เช่นเดียวกับ saveBackStack()
restoreBackStack()
จะไม่ทําอะไรหากคุณไม่เคยเรียก saveBackStack()
ด้วยชื่อเดียวกันมาก่อน (b/80029773)
Fragment StrictMode
API ของ FragmentStrictMode
มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณจะเลือกพิมพ์ข้อความบันทึก เรียกใช้โปรแกรมฟังที่กำหนดเอง หรือทำให้แอปขัดข้องได้ คุณสามารถตั้งค่า 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()
จะตรวจจับเมื่อคุณเพิ่ม Fragment ลงในคอนเทนเนอร์ที่ไม่ใช่FragmentContainerView
คุณควรใช้FragmentContainerView
เป็นคอนเทนเนอร์สำหรับชิ้นส่วนในเลย์เอาต์เสมอ (#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
ไปใช้แล้ว ซึ่งช่วยให้คุณใช้กับเมธอดuse
ของ Kotlin หรือลองใช้ด้วยทรัพยากรได้ (#121, b/143774122)
การตรวจสอบ Lint ใหม่
- ตอนนี้การตรวจสอบ Lint ของ
UseGetLayoutInflater
จะเตือนเมื่อใช้LayoutInflater.from(Context)
ภายในDialogFragment
คุณควรใช้เมธอดgetLayoutInflater()
ของส่วนข้อความโต้ตอบเสมอเพื่อให้ได้ค่าที่เหมาะสมสำหรับLayoutInflater
(#156, b/170781346) - ตอนนี้การตรวจสอบ Lint ของ
DialogFragmentCallbacksDetector
จะเตือนเมื่อเรียกใช้setOnCancelListener
หรือsetOnDismissListener
ในเมธอดonCreateDialog()
ของDialogFragment
เนื่องจากDialogFragment
เป็นเจ้าของ Listener เหล่านี้ และคุณควรลบล้างonCancel()
และonDismiss()
เพื่อรับการเรียกกลับเหล่านี้ (#171, b/181780047, b/187524311)
แก้ไขข้อบกพร่อง
- จาก Fragment 1.3.4: แก้ไขการถดถอยที่เกิดขึ้นใน Fragment
1.3.3
เมื่อใช้ViewTreeViewModelStoreOwner.get()
API กับViewModelProvider
หรือเมธอด Jetpack Compose ของviewModel()
ภายใน Fragment ตอนนี้ Use Case เหล่านี้ใช้ViewModelProvider.Factory
ที่ได้จาก Fragment ของคุณอย่างถูกต้องแล้ว หากมีการลบล้างgetDefaultViewModelProviderFactory()
(เช่นเดียวกับที่ Fragment ที่มีคําอธิบายประกอบ@AndroidEntryPoint
ทําเมื่อใช้ Hilt) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้างSavedStateViewModelFactory
ที่บันทึกและคืนค่าสถานะควบคู่ไปกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368) - จาก Fragment 1.3.4: เมื่อใช้
FragmentContainerView
ใน API 29 ระบบจะไม่ส่งคำสั่งให้แสดงข้อมูลแทรกแบบไม่มีกำหนดอีกต่อไป เพื่อแก้ไขปัญหาเกี่ยวกับอินสแตนซ์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 ทั้งหมดสําหรับรุ่นนี้ (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - ขอขอบคุณ tatocaster ที่เพิ่ม
UseGetLayoutInflater
การตรวจสอบขุย (#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 ขึ้นอยู่กับ Activity1.2.4
(I3a66c)
เวอร์ชัน 1.3.5
16 มิถุนายน 2021
androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
และ androidx.fragment:fragment-testing:1.3.5
เผยแพร่แล้ว เวอร์ชัน 1.3.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยขององค์ประกอบแบบใช้ร่วมกันในการเปลี่ยนภาพซึ่งเปิดตัวใน Fragment
1.3.4
โดย aosp/1679887 ตอนนี้กลุ่มการเปลี่ยนฉากจะจัดการอย่างถูกต้อง (ตั้งค่าโดยตรงผ่าน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
ที่ได้จากฟragment ของคุณอย่างถูกต้องแล้ว หากมีการลบล้างgetDefaultViewModelProviderFactory()
(เช่นเดียวกับที่@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()
กับมุมมองของข้อมูลโค้ด (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)
การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่
- ตอนนี้ตัวจัดการสถานะ Fragment ใหม่จะจัดการการเปลี่ยนผ่านได้อย่างถูกต้องด้วยการดำเนินการซ่อน (I9e4de, b/184830265)
เวอร์ชัน 1.3.2
24 มีนาคม 2021
androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
และ androidx.fragment:fragment-testing:1.3.2
เผยแพร่แล้ว เวอร์ชัน 1.3.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่
- เมื่อเรียกใช้ทั้งการดำเนินการ
popBackStack()
และcommit()
พร้อมกัน การดำเนินการสุดท้ายจะกำหนดทิศทางสำหรับภาพเคลื่อนไหวทั้งหมดแทนที่จะเรียกใช้ภาพเคลื่อนไหวแบบป๊อปและทำภาพเคลื่อนไหวบางส่วน (I7072e, b/181142246) - มุมมองภายในลําดับชั้นขององค์ประกอบที่แชร์จะไม่มีการล้างชื่อการเปลี่ยนภาพอีกต่อไปเมื่อทําการเปลี่ยนภาพองค์ประกอบที่แชร์ (I4d4a6, b/179934757)
การอัปเดตทรัพยากร 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 รายการผ่าน API ใหม่ใน
FragmentManager
ซึ่งใช้ได้กับ Fragment ลําดับชั้น (หลัก/ย่อย), DialogFragment และ Fragment ในการนําทาง และช่วยให้มั่นใจว่าระบบจะส่งผลลัพธ์ไปยัง Fragment ของคุณเมื่อ Fragment นั้นมีค่าอย่างน้อยSTARTED
เราเลิกใช้งาน API ของกลุ่มเป้าหมายแล้วเพื่อหันมาใช้ API ใหม่เหล่านี้ โปรดดูรับผลลัพธ์โดยใช้ Fragment Result APIFragmentOnAttachListener
: เลิกใช้งาน CallbackonAttachFragment()
ในFragmentActivity
และFragment
แล้ว มีการเพิ่มFragmentOnAttachListener
ใหม่เพื่อมอบทางเลือกที่ยืดหยุ่นมากขึ้นซึ่งจะทำให้การมอบสิทธิ์onAttachFragment()
สามารถแยก Listener ที่ทดสอบได้และรองรับการเพิ่ม Listener ลงใน FragmentManagers นอกเหนือจาก FragmentManager ย่อยโดยตรงของคุณการปรับปรุง
FragmentScenario
: คลาสFragmentScenario
จากอาร์ติแฟกต์fragment-testing
ได้รับการเขียนใหม่เป็น Kotlin และได้รับการปรับปรุงหลายประการ ดังนี้- ตอนนี้
FragmentScenario
ใช้setMaxLifecycle()
เพื่อติดตั้งใช้งานmoveToState()
ซึ่งช่วยให้มีการทำงานที่สอดคล้องกันใน API ทุกระดับและแยกสถานะของ Fregment ออกจาก Activity ที่เกี่ยวข้อง - ตอนนี้
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)
การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่
- ตอนนี้มุมมอง
Lifecycle
ของข้อมูลโค้ดที่แยกส่วนจะจัดการกรณีที่มุมมองของข้อมูลโค้ดที่แยกส่วนถูกทำลายก่อนที่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)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ FragmentContainerView ที่ไม่ได้ขยายข้อมูลโค้ดของส่วนโดยใช้แอตทริบิวต์
class
หรือandroid:name
สามารถใช้นอกFragmentActivity
ได้แล้ว (Id4397, b/172266337) - การพยายามตั้งค่าวงจรชีวิตของข้อมูลโค้ดสูงสุดเป็น
DESTROYED
จะแสดงข้อผิดพลาดIllegalArgumentException
(Ie7651, b/170765622) - ตอนนี้การเริ่มต้น FragmentScenario ด้วยสถานะ
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>
จะรออย่างถูกต้องจนกว่าคุณจะเพิ่มมุมมองลงในคอนเทนเนอร์ก่อนที่จะย้ายไปยัง STARTED (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)
แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ
- ตอนนี้ Fragment คืนค่าสถานะโฟกัสมุมมองได้อย่างถูกต้องก่อนเริ่มภาพเคลื่อนไหว (Icc256)
- ตอนนี้เศษที่มีเฉพาะทรานซิชันองค์ประกอบที่แชร์จะแสดงเอฟเฟกต์พิเศษอย่างถูกต้องแล้ว ซึ่งหมายความว่าเศษจะเปลี่ยนเป็นสถานะสุดท้าย (Iaebc7, b/166658128)
- ตอนนี้มุมมอง Fragment จะถูกนำออกจากคอนเทนเนอร์ ก่อนจะถูกทำลายเสมอ (รหัส 5876)
- ตอนนี้ตัวจัดการสถานะใหม่จะนํามุมมองที่กำลังจะออกออกอย่างสม่ำเสมอก่อนที่จะเพิ่มมุมมองที่กำลังจะเข้า (I41a6e)
- ตอนนี้ตัวจัดการสถานะใหม่จะพิจารณาการเปลี่ยนแปลงที่ชัดเจนเกี่ยวกับระดับการมองเห็นของมุมมองรายการย่อย ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของกลุ่มที่กำลังจะเข้าสู่หน้าเว็บเป็น
INVISIBLE
ก่อนเริ่มภาพเคลื่อนไหว ชิ้นส่วนนั้นก็จะยังคงมองไม่เห็น (b/164481490) - ตอนนี้ Fragment จะให้ความสำคัญกับ
Animators
มากกว่าAnimations
ซึ่งหมายความว่า Fragment ที่มีทั้ง 2 ส่วนจะเรียกใช้Animator
เท่านั้นและจะละเว้นAnimation
(b/167579557) - ตัวจัดการสถานะใหม่จะไม่ทำให้ Fragment กะพริบอีกต่อไปเมื่อใช้การป้อนภาพเคลื่อนไหว (b/163084315)
ปัญหาที่ทราบ
เมื่อใช้ตัวจัดการสถานะใหม่ หากคุณกดกลับระหว่างที่แสดงเอฟเฟกต์พิเศษแทนที่จะกลับไปที่ข้อมูลโค้ดก่อนหน้า ระบบจะไม่เพิ่มข้อมูลโค้ดเก่าอีก ทำให้หน้าจอว่างเปล่า (b/167259187, b/167092035, b/168442830)
เวอร์ชัน 1.3.0-alpha08
19 สิงหาคม 2020
androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
และ androidx.fragment:fragment-testing:1.3.0-alpha08
เผยแพร่แล้ว เวอร์ชัน 1.3.0-alpha08 มีการคอมมิตเหล่านี้
เครื่องมือจัดการสถานะใหม่
เวอร์ชันนี้มีการรีแฟกทอริงที่สำคัญในการจัดการสถานะภายในของ FragmentManager
ซึ่งส่งผลต่อการส่งวิธีการของวงจร การเคลื่อนไหว และการเปลี่ยนรูปแบบ รวมถึงวิธีจัดการธุรกรรมที่เลื่อนเวลาไว้ ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่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) - ส่วนย่อยจะไม่เรียกใช้
onCreateView()
ในส่วนย่อยที่ถูกทำลายอีกต่อไปเมื่อส่วนย่อยการแทนที่ถูกเลื่อนออกไป (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)
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะรอให้แนบมุมมองของข้อมูลโค้ดที่ฝังไว้ก่อนที่จะเรียก
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
- ตอนนี้
setFragmentResult()
และsetFragmentResultListener()
API จะใช้Bundle
และFragmentResultListener
ที่ไม่ใช่ค่า Null ตามลำดับ หากต้องการล้างผลลัพธ์หรือ 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 ของกลุ่มเป้าหมายแล้ว ควรใช้ API ของผลลัพธ์ Fragment ใหม่แทนเพื่อส่งข้อมูลระหว่างส่วนย่อย (b/149787344)
- เลิกใช้งาน API
startActivityForResult()
/onActivityResult()
และrequestPermissions()
/onRequestPermissionsResult()
ใน Fragment แล้ว โปรดใช้ API ของผลลัพธ์กิจกรรม (aosp/1290887) - การเปลี่ยนแปลงที่สําคัญจากกิจกรรม
1.2.0-alpha04
: เปลี่ยนชื่อเมธอดprepareCall()
เป็นregisterForActivityResult()
(aosp/1278717)
การแก้ไขข้อบกพร่อง
- ตอนนี้
getViewLifecycleOwner()
ของข้อมูลโค้ดจะหยุดลงก่อนที่จะเรียกonSaveInstanceState()
ซึ่งสอดคล้องกับลักษณะการทำงานของวงจรของข้อมูลโค้ด (b/154645875) - ตอนนี้การเรียก
setMenuVisibility(false)
ในข้อมูลโค้ดจะเปลี่ยนการแสดงผลของเมนูที่มาจากข้อมูลโค้ดย่อยอย่างถูกต้อง (b/153593580) - แก้ไข
illegalStateException
เมื่อเพิ่มข้อมูลโค้ดไปยังลําดับชั้นมุมมองของDialogFragment
ด้วยFragmentContainerView
(b/154366601) - เมธอด
getDefaultViewModelProviderFactory()
ในรายการจะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์รายการไว้นอกกิจกรรม (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()
และถูกนำออกเมื่อได้รับการ Callback ของ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()
ในฟragments แล้ว ViewModel ช่วยให้นักพัฒนาแอปมี API เฉพาะสำหรับการเก็บสถานะที่เชื่อมโยงกับกิจกรรม ฟragment และกราฟการนําทาง วิธีนี้ช่วยให้นักพัฒนาแอปใช้ Fragment ปกติ (ไม่ใช่เก็บรักษา) และเก็บสถานะที่ต้องการแยกไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาของการรั่วไหลที่พบได้บ่อยในขณะที่ยังคงคุณสมบัติที่เป็นประโยชน์ของการสร้างเดี่ยวและการทำลายสถานะที่เก็บรักษาไว้ (เช่น เครื่องมือสร้างViewModel
และ CallbackonCleared()
ที่แอปได้รับ) (b/143911815) - เมื่อมีการเปิดตัว ViewPager2
1.0.0
ระบบได้เลิกใช้งานคลาสFragmentPagerAdapter
และFragmentStatePagerAdapter
สำหรับการโต้ตอบกับViewPager
แล้ว ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2 (b/145132715)
แก้ไขข้อบกพร่อง
- ตอนนี้กฎ ProGuard ของ Fragment จะเก็บเฉพาะคลาส Constructor เริ่มต้น
Fragment
ที่ใช้เท่านั้นแทนที่จะเก็บสำหรับอินสแตนซ์Fragment
ทั้งหมด ซึ่งเป็นการแก้ไขการถดถอยที่เกิดขึ้นใน Fragment1.2.1
(b/149665169 - กฎ Lint
require___()
ที่เพิ่มลงใน Fragment1.2.2
จะไม่เป็นผลบวกลวงกับตัวแปรในเครื่องที่ใช้ชื่อเดียวกันกับชื่อพร็อพเพอร์ตี้ Kotlin ที่ถูกซ้อน (นั่นคือview
) (b/149891163) FragmentContainerView
ไม่แสดงUnsupportedOperationException
อีกต่อไปเมื่อใช้ตัวอย่างเลย์เอาต์ใน Android Studio (b/149707833)- แก้ไขปัญหาที่ระบบจะไม่สร้างส่วนที่เก็บไว้ซึ่งเพิ่มหลังจากบันทึกสถานะแล้วขึ้นมาใหม่อย่างต่อเนื่องแล้วทำลายหลังจากการเปลี่ยนแปลงการกําหนดค่าแต่ละครั้ง (b/145832397)
เวอร์ชัน 1.2.5
เวอร์ชัน 1.2.5
10 มิถุนายน 2020
androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
และ androidx.fragment:fragment-testing:1.2.5
เผยแพร่แล้ว เวอร์ชัน 1.2.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
getViewLifecycleOwner()
ของข้อมูลโค้ดจะหยุดลงก่อนที่จะเรียกonSaveInstanceState()
ซึ่งสอดคล้องกับลักษณะการทำงานของวงจรของข้อมูลโค้ด ก่อนหน้านี้ฟีเจอร์นี้เปิดตัวในส่วนที่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)
- แก้ไขการแจ้งเตือนที่ผิดพลาดใน
UseRequireInsteadOfGet
การตรวจสอบ Lint เมื่อใช้ชื่อตัวแปรภายในที่บดบังชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163) FragmentContainerView
จะไม่แสดงข้อผิดพลาดUnsupportedOperationException
อีกต่อไปหากใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์ (b/149707833)
เวอร์ชัน 1.2.2
เวอร์ชัน 1.2.2
19 กุมภาพันธ์ 2020
androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
และ androidx.fragment:fragment-testing:1.2.2
เผยแพร่แล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้
การตรวจสอบ Lint ใหม่
- Lint แนะนำให้ใช้
viewLifecycleOwner
เป็นLifecycleOwner
เพื่อโทรเข้าOnBackPressedDispatcher
ในonCreateView()
,onViewCreated()
และonActivityCreated()
(b/142117657) - เพิ่มการตรวจสอบ Lint ใหม่เพื่อยืนยันว่าคุณใช้
debugImplementation
ที่ถูกต้องเมื่อใช้อาร์ติแฟกต์fragment-testing
(b/141500106) - ตอนนี้ Fragment แนะนำให้ใช้เมธอด
require___()
ที่เชื่อมโยงเพื่อสร้างข้อความแสดงข้อผิดพลาดที่มีรายละเอียดมากขึ้นแทนcheckNotNull(get___())
,requireNonNull(get___())
หรือget___()!!
สำหรับ Fragment API ทั้งหมดที่มีทั้งget
และrequire
ที่เทียบเท่ากัน (aosp/1202883)
การแก้ไขข้อบกพร่อง
- แก้ไขไฟล์ ProGuard ของ Fragment เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
- ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนำให้ใช้
viewLifecycleOwner
เมื่อใช้observe
เพื่อจัดการกับเวอร์ชันเมธอดส่วนขยายlivedata-ktx
ของobserve
ด้วย (b/148996309) - แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint จำนวนมาก (aosp/1157012)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Zac Sweers ที่มีส่วนร่วมใน
require___()
การตรวจสอบ Lint ในนามของ Slack (aosp/1202883)
เวอร์ชัน 1.2.1
เวอร์ชัน 1.2.1
5 กุมภาพันธ์ 2020
androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
และ androidx.fragment:fragment-testing:1.2.1
เผยแพร่แล้ว เวอร์ชัน 1.2.1 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ Fragment ที่เพิ่มผ่านเมธอด
add
และreplace
ที่ใช้อินสแตนซ์Class
(หรือเวอร์ชันที่ปรับแก้แล้ว Kotlin) มีตัวสร้างเริ่มต้นที่เก็บโดย ProGuard (b/148181315) FragmentStatePagerAdapter
และFragmentPagerAdapter
จะไม่จับข้อยกเว้นที่FragmentManager
โยนเมื่อเรียกใช้finishUpdate()
อีกต่อไป (aosp/1208711)- แก้ไขปัญหาที่
FragmentManager.findFragment()
ไม่ทำงานกับส่วนที่เพิ่มผ่านแท็ก<fragment>
(b/147784323) - ตอนนี้ส่วนย่อยที่พองขึ้นโดยใช้แท็ก
<fragment>
จะได้รับการเรียกไปยังonInflate()
ก่อนonCreate()
เสมอเมื่ออยู่ในเลย์เอาต์ (aosp/1215856) - การเรียกใช้
toString()
ในอินสแตนซ์FragmentManager
จะไม่แสดงข้อยกเว้นNullPointerException
อีกต่อไปเมื่อมีการทำลายกิจกรรมแล้ว (b/148189412)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ Fragment
1.2.1
จะขึ้นอยู่กับ Lifecycle ViewModel savedState2.2.0
เวอร์ชัน 1.2.0
เวอร์ชัน 1.2.0
22 มกราคม 2020
androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
และ androidx.fragment:fragment-testing:1.2.0
เผยแพร่แล้ว เวอร์ชัน 1.2.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.1.0
- FragmentContainerView:
FragmentContainerView
เป็นคอนเทนเนอร์ที่แนะนําอย่างยิ่งสําหรับการใส่ Fragment แบบไดนามิก ซึ่งมาแทนที่การใช้FrameLayout
หรือเลย์เอาต์อื่นๆ นอกจากนี้ ยังรองรับclass
,android:name
และandroid:tag
(ไม่บังคับ) เดียวกันกับแท็ก<fragment>
แต่จะใช้สํานวนFragmentTransaction
ปกติเพื่อเพิ่มข้อมูลโค้ดเริ่มต้นนี้แทนเส้นทางโค้ดที่กําหนดเองซึ่ง<fragment>
ใช้ - การกำหนดเวลา
onDestroyView()
: ตอนนี้ เศษจะรอให้ภาพเคลื่อนไหวในการออก การเปลี่ยนเฟรมเวิร์กในการออก และการเปลี่ยน AndroidX ในการออก (เมื่อใช้ Transition1.3.0
) เสร็จสมบูรณ์ก่อนที่จะเรียกonDestroyView()
add()
และreplace()
ตามคลาส: เพิ่มการโอเวอร์โหลดใหม่ของadd()
และreplace()
ในFragmentTransaction
ที่ใช้Class<? extends Fragment>
และBundle
(ไม่บังคับ) ของอาร์กิวเมนต์ วิธีการเหล่านี้ใช้FragmentFactory
เพื่อสร้างอินสแตนซ์ของ Fregment เพื่อเพิ่ม ระบบได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ปรับแล้ว (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย- การรวม Lifecycle ViewModel savedState:
SavedStateViewModelFactory
เป็นค่าเริ่มต้นจากโรงงานเมื่อใช้by viewModels()
,by activityViewModels()
, ตัวสร้างViewModelProvider
หรือViewModelProviders.of()
กับ Fragment - การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้มั่นใจว่าคุณใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
- การเลิกใช้งาน
getFragmentManager()
: เราได้เลิกใช้งานเมธอดgetFragmentManager()
และrequireFragmentManager()
ใน 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
อย่างไม่ถูกต้องหลังจากแสดงรายการที่ฝังอยู่ (b/70793925) - ตอนนี้องค์ประกอบแบบใช้ร่วมกันในการเปลี่ยนภาพสำหรับส่วนที่แสดงจะจัดการกับมุมมองที่หมุน ปรับขนาด ฯลฯ แล้ว (b/142835261)
การอัปเดตเอกสารประกอบ
- ชี้แจงเอกสารประกอบเกี่ยวกับการเลิกใช้งานรอบ
setUserVisibleHint()
(b/143897055) - ปรับปรุงเอกสารประกอบใน
setFragmentFactory()
และgetFragmentFactory()
เพื่อระบุได้ดียิ่งขึ้นว่าการตั้งค่าFragmentFactory
จะมีผลกับ FragmentManagers ระดับย่อยด้วย (aosp/1170095)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
และ Activity1.1.0-rc03
เวอร์ชัน 1.2.0-rc02
7 พฤศจิกายน 2019
ปล่อย androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
และ androidx.fragment:fragment-testing:1.2.0-rc02
แล้ว เวอร์ชัน 1.2.0-rc02 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เมื่ออยู่ใน Kotlin ตอนนี้ LintFix สำหรับการใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(ซึ่งเปิดตัวใน Fragment1.2.0-rc01
) จะใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ KotlinviewLifecycleOwner
แทนgetViewLifecycleOwner()
(aosp/1143821)
เวอร์ชัน 1.2.0-rc01
23 ตุลาคม 2019
ปล่อย androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
และ androidx.fragment:fragment-testing:1.2.0-rc01
แล้ว เวอร์ชัน 1.2.0-rc01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
FragmentContainerView
รองรับแอตทริบิวต์class
นอกเหนือจากandroid:name
แล้ว ซึ่งจะทํางานเหมือนกับแท็ก<fragment>
(b/142722242) - เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้มั่นใจว่าคุณใช้
getViewLifecycleOwner()
เมื่อสังเกตLiveData
จากonCreateView()
,onViewCreated()
หรือonActivityCreated()
(b/137122478)
แก้ไขข้อบกพร่อง
- ตอนนี้การเรียกกลับ
onDismiss
และonCancel
ในDialogFragment
รับประกันว่าDialogInterface
ที่ส่งให้จะไม่เป็นค่า Null และgetDialog()
จะแสดงผลเป็นค่าที่ไม่ Null เมื่อเรียกใช้ (b/141974033) - ตอนนี้
FragmentContainerView
จะเพิ่มส่วนที่class
หรือandroid:name
กำหนดไว้เป็นส่วนหนึ่งของการขยาย เพื่อให้findFragmentById()
และfindFragmentByTag()
ทํางานได้ทันทีหลังจากนั้น (b/142520327) - แก้ไข
IllegalStateException
ในFragmentContainerView
เนื่องจากมีการบันทึกสถานะ (b/142580713) - แก้ไข
UnsupportedOperationException
ในFragmentContainerView
เมื่อคลาสFragmentContainerView
มีการปรับให้ยากต่อการอ่าน (Obfuscate) (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()
ของข้อมูลโค้ดโค้ดไม่ได้รับการระบุแอตทริบิวต์ที่เหมาะสมจาก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
เพิ่มการรองรับการเพิ่มข้อมูลโค้ดเริ่มต้นที่รองรับแอตทริบิวต์ XMLandroid:name
และแอตทริบิวต์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
ตอนนี้ฟragment จะยกเลิกทรานซิชัน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 ที่เพิ่มไปยัง Fregment (คุณใช้isAdded()
เพื่อระบุว่าเรียกเมธอดดังกล่าวได้หรือไม่) (b/140574496) - เลิกใช้งานเมธอด
FragmentManager.enableDebugLogging
แบบคงที่แล้ว ตอนนี้ FragmentManager จะยึดตามLog.isLoggable()
สำหรับแท็กFragmentManager
ซึ่งจะช่วยให้คุณเปิดใช้การบันทึกDEBUG
หรือVERBOSE
ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง (aosp/1116591)
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะทำลายข้อมูลในฟragment อย่างถูกต้องขณะที่ภาพเคลื่อนไหวในการออกจากฟragment อื่นๆ กำลังทำงานอยู่ (b/140574199)
- แก้ไขปัญหาที่ Fragments จะเรียก
Activity.findViewById()
โดยก่อนหน้านี้ไม่เรียก (aosp/1116431)
เวอร์ชัน 1.2.0-alpha03
5 กันยายน 2019
androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
และ androidx.fragment:fragment-testing:1.2.0-alpha03
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
FragmentContainerView
เปลี่ยนชื่อเป็นfinal
แล้ว (b/140133091)
แก้ไขข้อบกพร่อง
- ตอนนี้
FragmentContainerView
จะกลับลําดับการวาดอย่างถูกต้องเมื่อป๊อปเศษออกจากกองซ้อนด้านหลัง (b/139104187) - แก้ปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งแสดงข้อมูลโค้ดแบบแฟรกเมนต์และเพิ่มข้อมูลโค้ดแบบแฟรกเมนต์ใหม่พร้อมกัน (b/111659726)
- ตอนนี้ส่วนย่อยจะรอให้ทรานซิชัน (นอกเหนือจากภาพเคลื่อนไหวซึ่งได้รับการแก้ไขใน 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
เพื่อสร้างอินสแตนซ์ของ Fregment เพื่อเพิ่ม นอกจากนี้ ยังมีการเพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่แปลงแล้ว (เช่นfragmentTransaction.replace<YourFragment>(R.id.container)
) ลงในfragment-ktx
ด้วย (b/126124987) - เพิ่มคำอธิบายประกอบ
@MainThread
รายการใน Callback วงจรชีวิตแล้วFragment
รายการ (b/127272564) - เลิกใช้งาน API ที่เกี่ยวข้องกับชื่อเบรดครัมบ์ใน
FragmentTransaction
และFragmentManager.BackStackEntry
แล้ว (b/138252944) - เราเลิกใช้งานเมธอด
setTransitionStyle
ในFragmentTransaction
แล้ว (aosp/1011537) - เมธอดหลายรายการใน
FragmentManager
ไม่ได้เป็นabstract
อีกต่อไปFragmentManager
เองยังคงเป็นabstract
และไม่ควรสร้างอินสแตนซ์หรือขยายเวลาโดยตรง คุณควรรับอินสแตนซ์ที่มีอยู่จากgetSupportFragmentManager()
,getChildFragmentManager()
ฯลฯ ต่อไป
แก้ไขข้อบกพร่อง
- จาก Fragment
1.1.0-rc04
: ตอนนี้ส่วนย่อยยกเลิกการเปลี่ยนที่เลื่อนออกไปอย่างถูกต้องแล้วใน "ส่วนย่อยปรากฏขึ้น" (b/138251858) - จากส่วนที่
1.1.0-rc03
: แก้ไขปัญหาการเรียกpostponeEnterTransition()
ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118) - จาก Fragment
1.1.0-rc02
: แก้ไขข้อขัดข้องในFragmentPagerAdapter
และFragmentStatePagerAdapter
เมื่อนำรายการปัจจุบันออก (b/137209870) - ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง
onDestroyView()
(b/136110528) - ตอนนี้ภาพเคลื่อนไหวของ Fragment จากส่วนย่อยและองค์ประกอบสืบทอดได้รับการจัดการอย่างเหมาะสมเมื่อทำให้ Fragment ระดับบนสุดเคลื่อนไหว (b/116675313)
- แก้ไข
NullPointerException
เมื่อใช้ทรานซิชันองค์ประกอบที่แชร์และการรวมการดำเนินการป๊อปและเพิ่ม (b/120507394) - เพิ่มวิธีแก้ปัญหาสำหรับ
IllegalStateException
เมื่อใช้FragmentPagerAdapter
และFragmentStatePagerAdapter
ในการทดสอบ Robolectric (b/137201343)
เวอร์ชัน 1.2.0-alpha01
2 กรกฎาคม 2019
androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
และ androidx.fragment:fragment-testing:1.2.0-alpha01
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้ FragmentManager จะเรียก
requestApplyInsets()
หลังจากแนบมุมมองของ Fragment แล้ว ก่อนที่จะเรียกonViewCreated()
โดยตรง เพื่อให้แน่ใจว่ามุมมองของคุณจะมีข้อความประกอบที่ถูกต้องเสมอ (b/135945162)
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อป๊อปFragmentTransaction
ที่ใช้setPrimaryNavigationFragment()
ก่อนวันที่replace()
(b/134673465)
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0
5 กันยายน 2019
androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
และ androidx.fragment:fragment-testing:1.1.0
เผยแพร่แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0
- fragment-testing: อาร์ติแฟกต์
fragment-testing
มีคลาสFragmentScenario
สำหรับการทดสอบส่วนย่อยแยกต่างหาก ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ Fragment ของแอป - FragmentFactory: ตอนนี้คุณสามารถตั้งค่า
FragmentFactory
ในFragmentManager
เพื่อจัดการการสร้างอินสแตนซ์ของข้อบังคับ ซึ่งจะนําข้อกําหนดแบบเข้มงวดที่ต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ออก - การมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin สำหรับ ViewModels: ตอนนี้อาร์ติแฟกต์
fragment-ktx
มีผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin 2 ราย ได้แก่by viewModels()
สำหรับการเข้าถึง ViewModels ที่เชื่อมโยงกับส่วนย่อยแต่ละรายการ และby activityViewModels()
สำหรับเข้าถึง ViewModels ที่กำหนดขอบเขตไปยังกิจกรรม - Max Lifecycle: ตอนนี้คุณสามารถตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยเรียกใช้
setMaxLifecycle()
ในFragmentTransaction
ซึ่งมาแทนที่setUserVisibleHint()
ที่เลิกใช้งานแล้วFragmentPagerAdapter
และFragmentStatePagerAdapter
มีตัวสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ - เครื่องมือสร้าง LayoutId ของ FragmentActivity: ตอนนี้คลาสย่อยของ
FragmentActivity
สามารถเรียกใช้เครื่องมือสร้างในFragmentActivity
ที่ใช้รหัสR.layout
ซึ่งระบุเลย์เอาต์ที่ควรตั้งเป็นมุมมองเนื้อหาแทนการเรียกใช้setContentView()
ในonCreate()
การดำเนินการนี้จะไม่เปลี่ยนแปลงข้อกำหนดที่ว่าคลาสย่อยต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ - เครื่องมือสร้าง LayoutId ของส่วนย่อย: ตอนนี้คลาสย่อยของ
Fragment
สามารถเรียกใช้เครื่องมือสร้างในFragment
ที่ใช้รหัสR.layout
ซึ่งระบุเลย์เอาต์ที่ควรใช้สำหรับส่วนย่อยนี้แทนการลบล้างonCreateView()
คุณกําหนดค่าเลย์เอาต์แบบขยายได้ในonViewCreated()
- เลื่อนเวลาโดยมีการหมดเวลา: มีการเพิ่มการโอเวอร์โหลดใหม่ของ
postponeEnterTransition()
ซึ่งใช้การหมดเวลา
เวอร์ชัน 1.1.0-rc04
7 สิงหาคม 2019
androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
และ androidx.fragment:fragment-testing:1.1.0-rc04
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบยกเลิกการเปลี่ยนที่เลื่อนออกไปอย่างถูกต้องแล้วในฟ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
เผยแพร่แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- Callback
androidx.lifecycle.Lifecycle
รายการ (โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับSTARTED
,RESUMED
,PAUSED
,STOPPED
และDESTROYED
) สำหรับ Fragment ที่ซ้อนกันได้รับการซ้อนอย่างถูกต้อง (b/133497591) - ตอนนี้อินสแตนซ์
OnBackPressedCallback
ที่ลงทะเบียนในonCreate()
ของ Fragment จะมีลำดับความสำคัญเหนือกว่า FragmentManager ย่อยอย่างเหมาะสม (b/133175997) - จะไม่แสดงภาพเคลื่อนไหวของกลุ่มย่อยอีกต่อไปเมื่อมีการเปลี่ยนกลุ่มหลัก (b/121017790)
- ตอนนี้ระบบจะไม่สนใจภาพเคลื่อนไหวและทรานซิชันของฟragments เมื่อใช้
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
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะนำรายการเมนูที่ขยายโดย FRGMENT ย่อยออกอย่างถูกต้องเมื่อนำ FRGMENT หลักออกแล้ว 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) - ฟragment จะไม่บังคับใช้
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
ในกิจกรรมเมื่อคืนค่าสถานะ Fragment (b/127313094) - แก้ไขตรรกะของ
setTargetFragment()
เมื่อแทนที่ Fragment เป้าหมายที่มีอยู่ด้วย Fragment ที่ยังไม่ได้แนบกับ FragmentManager (aosp/932156)
เวอร์ชัน 1.1.0-alpha05
13 มีนาคม 2019
androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
และ androidx.fragment:fragment-testing:1.1.0-alpha05
เผยแพร่แล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- แคชการค้นหาคำอธิบายประกอบ
@ContentView
รายการแล้ว (b/123709449)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การเรียกใช้
remove()
,hide()
,show()
,detach()
และsetPrimaryNavigationFragment()
โดยมี Fragment ที่เชื่อมต่อกับ FragmentManager อื่นจะส่งIllegalStateException
แทนที่จะล้มเหลวแบบเงียบ (aosp/904301)
แก้ไขข้อบกพร่อง
onNewIntent
สำหรับFragmentActivity
ได้รับการทําเครื่องหมายด้วย@CallSuper
อย่างถูกต้องแล้ว (b/124120586)- แก้ไขปัญหาที่
DialogFragment
เรียกonDismiss()
2 ครั้งได้เมื่อใช้getDialog().dismiss()
หรือgetDialog().cancel()
(b/126563750)
เวอร์ชัน 1.1.0-alpha04
7 กุมภาพันธ์ 2019
androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
และ androidx.fragment:fragment-testing 1.1.0-alpha04
เผยแพร่แล้ว
ฟีเจอร์ใหม่
- เพิ่มการรองรับคำอธิบายประกอบคลาส
@ContentView
ที่ให้คุณระบุว่าไฟล์ XML เลย์เอาต์ใดควรสูงเกินจริงเพื่อเป็นทางเลือกในการลบล้างonCreateView()
เราขอแนะนำให้ดูงานที่เกี่ยวข้องในonViewCreated()
(aosp/837619) - ตอนนี้
fragment-testing
ต้องใช้androidx.test:core-ktx
1.1.0 เวอร์ชันเสถียร (b/121209673) - ตอนนี้คุณใช้
openActionBarOverflowOrOptionsMenu
กับFragmentScenario
เพื่อทดสอบเมนูตัวเลือกที่โฮสต์ในรายการย่อยได้แล้ว (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] - มีการเพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ Kotlin ของ
by viewModels
เพื่อใช้เมธอด lambda ที่ไม่บังคับในการรับViewModelStoreOwner
ซึ่งช่วยให้คุณส่งต่อใน Fragment หลักหรือViewModelStoreOwner
ที่กำหนดเองอื่นๆ ได้ด้วยโค้ด เช่นval viewModel: MyViewModel by viewModels(::requireParentFragment)
[b/119050253]
การเปลี่ยนแปลง API
FragmentScenario
ให้คุณระบุธีมได้แล้ว เช่นTheme.AppCompat
[b/119054431] การเปลี่ยนแปลงนี้ส่งผลกับส่วนอื่นในระบบ- เพิ่มเมธอด
requireView()
ซึ่งแสดงผล@NonNull View
หรือแสดงข้อยกเว้นIllegalStateException
[b/120241368] - เพิ่มเมธอด
requireParentFragment()
ซึ่งแสดงผล@NonNull Fragment
หรือแสดงข้อยกเว้นIllegalStateException
[b/112103783]
แก้ไขข้อบกพร่อง
- แก้ไข IllegalStateException: บันทึกสถานะไม่สำเร็จ b/120814739
- ตอนนี้ เศษที่กู้คืนจากสถานะอินสแตนซ์ที่บันทึกไว้จะได้รับ
Bundle
ที่ไม่ใช่ค่า 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) - แก้ไขปัญหาที่ไม่สามารถเข้าถึง Fragment เป้าหมายหลังจากที่นำ Fragment ออกแล้ว (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
ที่ถูกต้อง