ส่วนย่อย

แบ่งแอปออกเป็นหลายหน้าจออิสระที่โฮสต์ภายในกิจกรรม
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
17 มิถุนายน 2026 1.8.9 - - 1.9.0-alpha01

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน Fragment คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google

เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ แอปหรือโมดูล

ดึงดูด

dependencies {
    def fragment_version = "1.8.9"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Compose
    implementation "androidx.fragment:fragment-compose:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version"
    androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.8.9"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Compose
    implementation("androidx.fragment:fragment-compose:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์

ความคิดเห็น

ความคิดเห็นของคุณช่วยให้ Jetpack ทำงานได้ดีขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Issue Tracker

เวอร์ชัน 1.9

เวอร์ชัน 1.9.0-alpha01

17 มิถุนายน 2026

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.9.0-alpha01 เวอร์ชัน 1.9.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ Fragment จะใช้ContextAwareอินเทอร์เฟซและใช้เพื่อเรียกใช้โค้ดได้เมื่อแนบ Fragment (I38019, b/477255355)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องใน Fragment ซึ่งเกิดขึ้นเมื่อมีการส่ง Activity ไปยังเบื้องหลังในระหว่างท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ (I55734, b/389589678)
  • UnsafeFragmentLifecycleObserverDetector จะไม่ทำงานภายใน การจัดองค์ประกอบอีกต่อไป (Ic4176, b/501504696)
  • [จาก Fragment 1.8.9] แก้ไขปัญหาที่การยกเลิกท่าทางสัมผัสย้อนกลับที่คาดการณ์ได้ซึ่ง แสดงการดำเนินการซ่อนจะทำให้ท่าทางสัมผัสถัดไปไม่เคลื่อนไหว อย่างถูกต้องเมื่อใช้ Animator (I0a400, b/384765586)
  • [จาก Fragment 1.8.9] แก้ไขข้อผิดพลาดที่การรวมกันของ setMaxLifecycle และ popBackStack อาจทำให้ย้าย Fragment ด้านบนไปยังสถานะ RESUMED ไม่สำเร็จ (I3448b, b/406127576)
  • [จาก Fragment 1.8.8] แก้ไขปัญหาที่ FragmentManager จะ ขัดข้องขณะพยายามบันทึกสถานะของ Fragment ที่ เพิ่มด้วย setMaxLifecycle(Lifecycle.State.INITIALIZED) เนื่องจากไม่เคยผ่าน onCreate() จึงไม่มีการบันทึกสถานะหรือเรียกใช้ onSaveInstanceState() (I6e37a, b/408163315)
  • [จาก Fragment 1.8.7] แก้ปัญหาเกี่ยวกับ FragmentManager ที่ไม่อยู่ในสถานะที่เหมาะสม หลังจากดำเนินการป๊อปและแทนที่ในเฟรมเดียวกัน ซึ่งอาจ ทำให้เกิดข้อขัดข้องเมื่อใช้ร่วมกับการคาดการณ์การย้อนกลับ (I50ad1, b/380288461)
  • [จาก Fragment 1.8.6] ตอนนี้การลบล้าง setOnApplyWindowInsetsListener ของ FragmentContainerView จะใช้ตัวฟังที่ค่าเป็น null ได้แล้ว (I575f0, b/282790626)
  • [จาก Fragment 1.8.5] แก้ไข IllegalStateException ที่ทริกเกอร์ โดย saveBackStack หลังจากยกเลิกหรือขัดจังหวะท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้เท่านั้น (I3387d, b/342419080)
  • [จาก Fragment 1.8.4] แก้ไขUninitializedPropertyAccessException ใน AndroidFragment เมื่อสลับ คลาสที่อินสแตนซ์ AndroidFragment ของคุณใช้อย่างไดนามิก (I12dea, b/365578408)
  • [จาก Fragment 1.8.4] แก้ไขปัญหาที่การกดปุ่มย้อนกลับของระบบอย่างรวดเร็วหรือการใช้ท่าทางสัมผัสย้อนกลับอย่างรวดเร็วจะทำให้ Fragment ขัดข้อง (Ibc038, b/364804225, b/364914301)
  • [จาก Fragment 1.8.4] แก้ไขปัญหาใน Fragment ที่การขัดจังหวะท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะส่ง FragmentManager ไปยังสถานะที่ไม่ได้กำหนด และอาจแสดง Fragment ที่ไม่ถูกต้อง (If82e2, b/338624457)
  • [จาก Fragment 1.8.3] AndroidFragment จะไม่ขัดข้องอีกต่อไปหากมีการเพิ่มลงในการเรียบเรียงขณะที่สถานะของกิจกรรม/Fragment ที่มีอยู่ได้รับการบันทึกแล้ว (I985e9, b/356643968)
  • [จาก Fragment 1.8.2] การเรียกใช้การย้อนกลับของระบบขณะที่ FragmentManager มีการดำเนินการที่รอดำเนินการจะไม่ทำให้เกิดข้อยกเว้นที่อยู่นอกขอบเขตอีกต่อไป (I9ba32, b/342316801)
  • [จาก Fragment 1.8.2] AndroidFragment จัดการกรณีที่ วาง Fragment หลักไว้ใน Fragment Back Stack ได้อย่างถูกต้อง เพื่อหลีกเลี่ยงปัญหา "ไม่พบ View สำหรับรหัส" เมื่อย้อนกลับ ไปยัง Fragment นั้น (I94608, b/347706985)
  • [จาก Fragment 1.8.2] Fragment ที่เพิ่มผ่านเมธอด FragmentTransaction.add ซึ่งใช้ ViewGroup จะรอ onContainerAvailable ก่อนที่จะไปยัง onStart() ซึ่งจะส่งผลต่อผู้ใช้ API นั้น เช่น AndroidFragment ซึ่งตอนนี้จะรอให้ AndroidFragment กลับมา เขียนอีกครั้งก่อนที่จะย้ายผ่าน onStart() (I94608, b/347706985)
  • [จาก Fragment 1.8.1] แก้ไขปัญหาที่ Fragment ที่ไม่มีคอนเทนเนอร์จะถูก ทำลายทันทีเมื่อเริ่มท่าทางสัมผัสย้อนกลับแบบคาดการณ์ (If6b83, b/345244539)

การมีส่วนร่วมจากภายนอก

  • ผสานรวม fragment-ktx เข้ากับไลบรารี Fragment ตอนนี้ส่วนขยาย Kotlin ทั้งหมดเป็นส่วนหนึ่งของอาร์ติแฟกต์ Fragment หลักแล้ว ขณะนี้ fragment-ktx เป็นอาร์ติแฟกต์ว่างเพื่อความเข้ากันได้ ขอขอบคุณ Jake Wharton (Idabaa)

เวอร์ชัน 1.8

เวอร์ชัน 1.8.9

13 สิงหาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.9 เวอร์ชัน 1.8.9 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ซึ่งจะแสดงการดำเนินการซ่อนจะทำให้ท่าทางสัมผัสถัดไปเคลื่อนไหวไม่ถูกต้องเมื่อใช้ Animator (I0a400, b/384765586)
  • แก้ไขข้อผิดพลาดที่การรวมกันของ setMaxLifecycle และ popBackStack อาจทำให้ย้าย Fragment ด้านบนไปยังสถานะ RESUMED ไม่สำเร็จ (I3448b, b/406127576)

เวอร์ชัน 1.8.8

4 มิถุนายน 2025

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.8 เวอร์ชัน 1.8.8 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ FragmentManager จะขัดข้องขณะพยายามบันทึกสถานะของ Fragment ที่เพิ่มด้วย setMaxLifecycle(Lifecycle.State.INITIALIZED) เนื่องจากไม่ได้ผ่าน onCreate() จึงไม่มีการบันทึกสถานะหรือเรียกใช้ onSaveInstanceState() อีกต่อไป (I6e37a)

เวอร์ชัน 1.8.7

20 พฤษภาคม 2025

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.7 เวอร์ชัน 1.8.7 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ FragmentManager ไม่อยู่ในสถานะที่เหมาะสมหลังจากดำเนินการป๊อปและแทนที่ในเฟรมเดียวกัน ซึ่งอาจทำให้เกิดข้อขัดข้องร่วมกับการป๊อป Backstack ผ่าน popBackStack หรือท่าทางสัมผัสการย้อนกลับแบบคาดการณ์ (I50ad1)
  • แก้ไขข้อขัดข้องที่เกิดจากการใช้ AndroidX Transitions และเข้าสู่กรณีที่ธุรกรรมของ Fragment ที่ต่อเนื่องอย่างรวดเร็วพยายามยกเลิกการเปลี่ยนภาพที่ยังไม่เริ่ม และไลบรารี AndroidX Transition ไม่ได้ล้างสถานะการเปลี่ยนภาพอย่างถูกต้อง (ดู b/414612221) (Ib5235)

เวอร์ชัน 1.8.6

12 กุมภาพันธ์ 2025

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.6 เวอร์ชัน 1.8.6 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • FragmentContainerViewsetOnApplyWindowInsetsListenerการลบล้างจะใช้ Listener ที่เป็น Null ซึ่งตรงกับสิ่งที่เฟรมเวิร์กอนุญาต (I575f0, b/282790626)

เวอร์ชัน 1.8.5

30 ตุลาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.5 เวอร์ชัน 1.8.5 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหา IllegalStateException ที่saveBackStackทริกเกอร์หลังจากยกเลิกหรือขัดจังหวะท่าทางสัมผัสสำหรับการย้อนกลับที่คาดการณ์ได้แล้วเท่านั้น (I3387d, b/342419080)

เวอร์ชัน 1.8.4

2 ตุลาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.4 เวอร์ชัน 1.8.4 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การกดปุ่มย้อนกลับของระบบอย่างรวดเร็วหรือการใช้ท่าทางสัมผัสย้อนกลับอย่างรวดเร็วจะทำให้ Fragment ขัดข้องเมื่อใช้ Androidx Transitions (Ibc038, b/364804225)
  • แก้ไขปัญหาใน Fragment ที่การขัดจังหวะท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะส่ง FragmentManager ไปยังสถานะที่ไม่ได้กำหนด และแสดง Fragment ที่ไม่ถูกต้อง (If82e2, b/338624457)
  • แก้ไขUninitializedPropertyAccessExceptionใน AndroidFragment เมื่อสลับคลาสที่อินสแตนซ์ AndroidFragment ของคุณใช้อย่างไดนามิก (I12dea)

เวอร์ชัน 1.8.3

4 กันยายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.3 เวอร์ชัน 1.8.3 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • FragmentManager ตอนนี้จะพิจารณาการดำเนินการที่รอดำเนินการอย่างถูกต้องเมื่อจัดการท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ ซึ่งจะช่วยให้การย้อนกลับระบบไม่ทำให้เกิด IndexOutOfBoundsException อีกต่อไป (I9ba32, b/342316801)
  • AndroidFragment จะไม่ขัดข้องอีกต่อไปหากมีการเพิ่มลงในการเรียบเรียงในขณะที่ระบบบันทึกสถานะของกิจกรรม/Fragment ที่มีอยู่แล้ว (I985e9, b/356643968)

เวอร์ชัน 1.8.2

24 กรกฎาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.2 เวอร์ชัน 1.8.2 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • AndroidFragment ตอนนี้จัดการกรณีที่วาง Fragment หลักไว้ใน Fragment Back Stack ได้อย่างถูกต้องแล้ว ซึ่งจะช่วยหลีกเลี่ยงปัญหา "ไม่พบ View สำหรับรหัส" เมื่อย้อนกลับไปที่ Fragment นั้น (I94608)
  • ตอนนี้ Fragment ที่เพิ่มผ่านเมธอด FragmentTransaction.add ซึ่งใช้ ViewGroup จะรอ onContainerAvailable ก่อนที่จะไปยัง onStart() ซึ่งจะส่งผลต่อผู้ใช้ API นั้น เช่น AndroidFragment ซึ่งตอนนี้จะรอให้ AndroidFragment กลับเข้าสู่การเขียนก่อนที่จะย้ายผ่าน onStart() (I94608)

เวอร์ชัน 1.8.1

26 มิถุนายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.1 เวอร์ชัน 1.8.1 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Fragment ที่ไม่มีคอนเทนเนอร์จะDESTROYEDทันทีเมื่อเริ่มท่าทางสัมผัสย้อนกลับแบบคาดการณ์ ตอนนี้ระบบจะเก็บไว้ในสถานะ CREATED จนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ (If6b83, b/345244539)

เวอร์ชัน 1.8.0

12 มิถุนายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.0 เวอร์ชัน 1.8.0 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.7.0

  • ตอนนี้อาร์ติแฟกต์ fragment-compose มี AndroidFragment Composable ที่อนุญาตให้เพิ่ม Fragment ลงในลำดับชั้นของ Compose ผ่านชื่อคลาส Fragment แล้ว ซึ่งจะจัดการการบันทึกและการกู้คืนสถานะของ Fragment โดยอัตโนมัติ ควรใช้สิ่งนี้แทนที่แนวทางที่แนะนำก่อนหน้านี้โดยตรง ซึ่งก็คือการใช้ AndroidViewBinding เพื่อขยาย Fragment
  • ตอนนี้ onBackStackChangeCancelled การเรียกกลับในอินเทอร์เฟซของ FragmentManagerOnBackStackChangedListener จะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการใน FragmentManager ซึ่งทำให้สอดคล้องกับเวลาของการเรียกกลับของ onBackStackChangeCommitted มากขึ้น

เวอร์ชัน 1.8.0-rc01

29 พฤษภาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.0-rc01 เวอร์ชัน 1.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้ onBackStackChangeCancelled การเรียกกลับในอินเทอร์เฟซ FragmentManagers OnBackStackChangedListener จะทริกเกอร์เป็นส่วนหนึ่งของการดำเนินการใน FragmentManager ซึ่งทำให้สอดคล้องกับเวลาของการเรียกกลับ onBackStackChangeCommitted มากขึ้น (I5ebfb, b/332916112)

เวอร์ชัน 1.8.0-beta01

14 พฤษภาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.0-beta01 เวอร์ชัน 1.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.7.1: ตอนนี้การย้อนกลับที่คาดการณ์ได้จะทำงานเฉพาะกับธุรกรรมที่ Fragment ทั้งหมดมี Animator หรือ Androidx Transition ที่ค้นหาได้ การแก้ไขนี้จะช่วยแก้ปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนจะทำให้เกิดหน้าจอสีดำ (I43037, b/339169168)

เวอร์ชัน 1.8.0-alpha02

17 เมษายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.0-alpha02 เวอร์ชัน 1.8.0-alpha02 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.7.0-rc02: เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า sharedElement โดยไม่มีการเปลี่ยนฉากอื่นๆ จะไม่ทำงาน (Iec48e)
  • จาก Fragment 1.7.0-rc02: แก้ไขข้อบกพร่องที่ทำให้เกิดข้อขัดข้องในกรณีที่เพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถค้นหาได้ลงในธุรกรรมที่การเปลี่ยนฉากอื่นๆ ทั้งหมดสามารถค้นหาได้ ตอนนี้ระบบจะพิจารณาธุรกรรมดังกล่าวอย่างถูกต้องว่าไม่สามารถค้นหาได้ (I18ccd)

เวอร์ชัน 1.8.0-alpha01

3 เมษายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.8.0-alpha01 เวอร์ชัน 1.8.0-alpha01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • AndroidFragment Composable ใหม่ช่วยให้เพิ่ม Fragment ลงในลำดับชั้น Compose ผ่านชื่อคลาส Fragment ได้ ซึ่งจะจัดการการบันทึกและการกู้คืนสถานะของ Fragment โดยอัตโนมัติ ซึ่งใช้แทน AndroidViewBinding ได้โดยตรง Composable.(b/312895363, Icf841)

การเปลี่ยนแปลงเอกสารประกอบ

  • อัปเดตเอกสารประกอบสำหรับ API ของ OnBackStackChangedListener เพื่อระบุเวลาที่เรียกใช้และวิธีใช้ (I0bfd9)

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.7

เวอร์ชัน 1.7.1

14 พฤษภาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.1 เวอร์ชัน 1.7.1 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้การย้อนกลับที่คาดการณ์ได้จะทำงานเฉพาะกับธุรกรรมที่ Fragment ทั้งหมดมี Animator หรือ Androidx Transition ที่ค้นหาได้ การดำเนินการนี้จะแก้ไขปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนจะทำให้หน้าจอว่างเปล่า (I43037, b/339169168)

เวอร์ชัน 1.7.0

1 พฤษภาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0 เวอร์ชัน 1.7.0 มีการเปลี่ยนแปลงเหล่านี้

การรองรับท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้

  • ตอนนี้ Fragment รองรับการย้อนกลับในแอปแบบคาดการณ์เมื่อใช้ Animator หรือเมื่อใช้ AndroidX Transition 1.5.0 ซึ่งจะช่วยให้ผู้ใช้ใช้ท่าทางสัมผัสย้อนกลับเพื่อดู Fragment ก่อนหน้าได้โดยการค้นหา Animator/Transition ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านการทำท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบการเปลี่ยนผ่าน ทรัพยากร XML รองรับการย้อนกลับที่คาดการณ์ได้
Animation R.anim ไม่
Animator R.animator ใช่
เฟรมเวิร์ก Transition R.transition ไม่
AndroidX Transition ที่มี Transition 1.4.1 หรือต่ำกว่า R.transition ไม่
AndroidX Transition ที่มี Transition 1.5.0 R.transition ใช่

หากพบปัญหาเกี่ยวกับการรองรับการย้อนกลับที่คาดการณ์ได้ใน Fragment หลังจากเลือกใช้ท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้แล้ว โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมโปรเจ็กต์ตัวอย่างที่จำลองปัญหาของคุณ คุณปิดใช้การย้อนกลับที่คาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false) ในonCreate()ของกิจกรรม

FragmentManager.OnBackStackChangedListener() ตอนนี้มี onBackStackChangeProgressed() และ onBackStackChangeCancelled() สำหรับรับเหตุการณ์ความคืบหน้าและเหตุการณ์ที่ยกเลิกของการย้อนกลับที่คาดการณ์ได้ตามลำดับ

Fragment Compose Artifact

เราได้สร้างอาร์ติแฟกต์ fragment-compose ใหม่ที่มุ่งเน้นการรองรับแอปที่อยู่ระหว่างการเปลี่ยนจากสถาปัตยกรรมที่อิงตาม Fragment ไปเป็นสถาปัตยกรรมที่อิงตาม Compose อย่างเต็มรูปแบบ

ฟีเจอร์แรกที่พร้อมใช้งานในอาร์ติแฟกต์ใหม่นี้คือcontentเมธอดส่วนขยายใน Fragment ซึ่งพยายามทำให้การใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการง่ายขึ้นด้วยการสร้าง ComposeView ให้คุณและตั้งค่า ViewCompositionStrategy ที่ถูกต้อง

  class ExampleFragment : Fragment() {

      override fun onCreateView(
          inflater: LayoutInflater,
          container: ViewGroup?,
          savedInstanceState: Bundle?
      ) = content {
          // Write your @Composable content here
          val viewModel: ExampleViewModel = viewModel()

          // or extract it into a separate, testable method
          ExampleComposable(viewModel)
      }
  }

เวอร์ชัน 1.7.0-rc02

17 เมษายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-rc02 เวอร์ชัน 1.7.0-rc02 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • เพิ่มบันทึกเพื่อระบุสาเหตุที่การตั้งค่า sharedElement โดยไม่มีการเปลี่ยนฉากอื่นๆ จะเรียกใช้ไม่ได้ (Iec48e)
  • แก้ไขข้อบกพร่องที่หากเพิ่มองค์ประกอบที่แชร์ซึ่งไม่สามารถค้นหาได้ลงในธุรกรรมที่การเปลี่ยนฉากอื่นๆ ทั้งหมดสามารถค้นหาได้ ระบบจะขัดข้อง ตอนนี้ระบบจะพิจารณาธุรกรรมดังกล่าวอย่างถูกต้องว่าไม่สามารถค้นหาได้ (I18ccd)

เวอร์ชัน 1.7.0-rc01

3 เมษายน 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-rc01 เวอร์ชัน 1.7.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.7.0-beta01

20 มีนาคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-beta01 เวอร์ชัน 1.7.0-beta01 มีการคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ FragmentHostCallback เขียนด้วย Kotlin เพื่อให้ความสามารถในการเว้นว่างของประเภททั่วไปของโฮสต์ตรงกับความสามารถในการเว้นว่างของประเภทการแสดงผลของ onGetHost() (I40af5)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่เมื่อใช้ท่าทางสัมผัสย้อนกลับแบบคาดการณ์ใน Fragment ที่ไม่ได้อยู่ในคอนเทนเนอร์ ระบบจะไม่ทำลาย Fragment นั้น ตอนนี้ระบบจะย้าย Fragment ไปยังสถานะสุดท้ายทันที (Ida0d9)
  • แก้ไขปัญหาใน Fragment ที่การขัดจังหวะการเปลี่ยนฉากขาเข้าด้วยท่าทางสัมผัสย้อนกลับแบบคาดการณ์จะทำลายมุมมองที่เข้า และทำให้หน้าจอว่างเปล่า (Id3f22, b/319531491)

เวอร์ชัน 1.7.0-alpha10

7 กุมภาพันธ์ 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha10 เวอร์ชัน 1.7.0-alpha10 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ทราบใน Fragment รุ่นก่อนหน้าซึ่งเมื่อใช้การรองรับการย้อนกลับแบบคาดการณ์ของ Fragment สำหรับ Animator หรือ AndroidX Transition, Fragment จะส่ง NullPointerException จาก handleOnBackProgressed หากไม่เคยเพิ่ม FragmentManager.OnBackStackChangedListener ผ่าน addOnBackStackChangedListener (I7c835)

เวอร์ชัน 1.7.0-alpha09

24 มกราคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha09 เวอร์ชัน 1.7.0-alpha09 มีคอมมิตต่อไปนี้

Fragment Compose Artifact

เราได้สร้างอาร์ติแฟกต์ fragment-compose ใหม่ที่มุ่งเน้นการรองรับแอปที่อยู่ระหว่างการเปลี่ยนจากสถาปัตยกรรมที่อิงตาม Fragment ไปเป็นสถาปัตยกรรมที่อิงตาม Compose อย่างเต็มรูปแบบ

ฟีเจอร์แรกที่พร้อมใช้งานในอาร์ติแฟกต์ใหม่นี้คือcontentเมธอดส่วนขยายใน Fragment ซึ่งพยายามทำให้การใช้ Compose สำหรับ UI ของ Fragment แต่ละรายการง่ายขึ้นด้วยการสร้าง ComposeView ให้คุณและตั้งค่า ViewCompositionStrategy ที่ถูกต้อง (561cb7, b/258046948)

class ExampleFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) = content {
        // Write your @Composable content here
        val viewModel: ExampleViewModel = viewModel()

        // or extract it into a separate, testable method
        ExampleComposable(viewModel)
    }
}

ฟีเจอร์ใหม่

  • FragmentManager.OnBackStackChangedListener() ตอนนี้มี onBackStackChangeProgressed() และ onBackStackChangeCancelled() สำหรับรับเหตุการณ์ความคืบหน้าและเหตุการณ์ที่ยกเลิกของการย้อนกลับที่คาดการณ์ได้ตามลำดับ (214b87)

ปัญหาที่ทราบ

  • เมื่อใช้การรองรับการย้อนกลับแบบคาดการณ์ของ Fragment สำหรับ Animator หรือ AndroidX Transition, Fragment จะส่ง NullPointerException จาก handleOnBackProgressed หากไม่เคยเพิ่ม FragmentManager.OnBackStackChangedListener ผ่าน addOnBackStackChangedListener การเพิ่ม Listener ด้วยตนเองจะช่วยแก้ปัญหาข้อขัดข้องได้ การแก้ไขปัญหานี้จะพร้อมใช้งานในรุ่นถัดไปของ Fragment

เวอร์ชัน 1.7.0-alpha08

10 มกราคม 2024

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha08 เวอร์ชัน 1.7.0-alpha08 มีคอมมิตเหล่านี้

ล้างข้อมูล

  • นำวิธีแก้ปัญหาชั่วคราวสำหรับไลบรารีการเปลี่ยนฉากที่ได้รับการแก้ไขแล้วใน Transition 1.5.0-alpha06 ออก (I04356)

เวอร์ชัน 1.7.0-alpha07

29 พฤศจิกายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha07 เวอร์ชัน 1.7.0-alpha07 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไข NullPointerException ที่เกิดจากการตั้งค่าภาพเคลื่อนไหวขององค์ประกอบที่ใช้ร่วมกันและตั้งค่า enter/exitTransition ไม่สำเร็จ (I8472b)
  • จาก Fragment 1.6.2: เมื่อขยาย FragmentContainerView ของ Fragment แล้ว ตอนนี้คุณจะเข้าถึงสถานะต่างๆ เช่น FragmentManager, Host และรหัส ได้ในแฮนเดิล onInflate (I1e44c, b/307427423)
  • จาก Fragment 1.6.2: เมื่อใช้ clearBackStack เพื่อนำชุด Fragment ออก ระบบจะล้าง ViewModel ของ Fragment ที่ซ้อนกันเมื่อล้าง ViewModels ของ Fragment หลัก (I6d83c, b/296173018)

เวอร์ชัน 1.7.0-alpha06

4 ตุลาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha06 เวอร์ชัน 1.7.0-alpha06 มีคอมมิตเหล่านี้

การอัปเดตทรัพยากร Dependency

  • เราได้อัปเดต Fragment ให้ขึ้นอยู่กับ animateToStart API ใหม่ที่เพิ่มเข้ามาใน Transition 1.5.0-alpha04

เวอร์ชัน 1.7.0-alpha05

20 กันยายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha05 เวอร์ชัน 1.7.0-alpha05 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment รองรับการย้อนกลับที่คาดการณ์ได้เมื่อใช้ Androidx Transitions ซึ่งช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อไปยัง Fragment ก่อนหน้าด้วยการเปลี่ยน Androidx ที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันหรือยกเลิกธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์ คุณต้องใช้รุ่นการเปลี่ยนผ่าน1.5.0-alpha03เพื่อเปิดใช้ฟีเจอร์นี้ (Ib49b4, b/285175724)

ปัญหาที่ทราบ

  • ขณะนี้มีปัญหาที่หลังจากยกเลิกท่าทางสัมผัสย้อนกลับด้วยการเปลี่ยนภาพ 1 ครั้งแล้ว ครั้งถัดไปที่คุณเริ่มท่าทางสัมผัสย้อนกลับ ระบบจะไม่สามารถเรียกใช้การเปลี่ยนภาพได้ ทำให้เกิดหน้าจอว่าง ปัญหานี้อาจเกิดจากปัญหาในไลบรารีการเปลี่ยนฉาก (b/300157785) หากพบปัญหานี้ โปรดรายงานปัญหาเกี่ยวกับ Fragment พร้อมโปรเจ็กต์ตัวอย่างที่สร้างปัญหาซ้ำ คุณปิดใช้การย้อนกลับที่คาดการณ์ได้โดยใช้ FragmentManager.enabledPredictiveBack(false) ในonCreate()ของกิจกรรม

เวอร์ชัน 1.7.0-alpha04

6 กันยายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha04 เวอร์ชัน 1.7.0-alpha04 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเมื่อยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์ที่ทำให้ Fragment เปลี่ยนไปอยู่ในสถานะ Lifecycle ที่ถูกต้องไม่สำเร็จ (I7cffe, b/297379023)
  • แก้ไขการถดถอยที่อนุญาตให้ภาพเคลื่อนไหวทำงานร่วมกับการเปลี่ยน (I59f36)
  • แก้ไขปัญหาเมื่อใช้การคาดการณ์การกลับพร้อมกับ Fragment ซึ่งการพยายามกลับ 2 ครั้งอย่างรวดเร็วใน Fragment ที่ 2 จากท้ายสุดใน Back Stack จะทำให้เกิดข้อขัดข้อง (Ifa1a4)

เวอร์ชัน 1.7.0-alpha03

23 สิงหาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha03 เวอร์ชัน 1.7.0-alpha03 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับ Fragment เมื่อใช้การย้อนกลับที่คาดการณ์ได้ ซึ่งทำให้ระบบข้าม Fragment แรกใน Back Stack ของ Fragment Manager และทำให้ Activity เสร็จสิ้นเมื่อใช้การย้อนกลับของระบบผ่านการไปยังส่วนต่างๆ แบบ 3 ปุ่มหรือท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ (I0664b, b/295231788)

เวอร์ชัน 1.7.0-alpha02

9 สิงหาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha02 เวอร์ชัน 1.7.0-alpha02 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • เมื่อใช้ Fragment กับท่าทางสัมผัสย้อนกลับแบบคาดการณ์จาก API 34 หากคุณใช้ระบบการเปลี่ยนฉากที่ไม่รองรับการค้นหา (Animations, Transitions) หรือไม่มีการเปลี่ยนฉากเลย ตอนนี้ Fragment จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการย้อนกลับ (I8100c)

เวอร์ชัน 1.7.0-alpha01

7 มิถุนายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.7.0-alpha01 เวอร์ชันนี้ได้รับการพัฒนาในสาขาภายใน

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment รองรับการย้อนกลับในแอปที่คาดการณ์ได้เมื่อใช้ Animator ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดู Fragment ก่อนหน้าด้วย Animator ที่กำหนดเองได้ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก นอกจากนี้ คุณยังปิดใช้ลักษณะการทำงานใหม่นี้ได้โดยใช้ enablePredictiveBack() เวอร์ชันทดลองและส่ง false

เวอร์ชัน 1.6

เวอร์ชัน 1.6.2

1 พฤศจิกายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.2 เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • เมื่อขยาย Fragment ของ FragmentContainerView แล้ว ตอนนี้คุณจะเข้าถึงสถานะของ Fragment เช่น FragmentManager, Host และรหัส ได้ใน Callback ของ onInflate (I1e44c, b/307427423)
  • เมื่อใช้ clearBackStack เพื่อนำชุด Fragment ออก ระบบจะล้าง ViewModel ของ Fragment ที่ซ้อนกันเมื่อล้าง ViewModels ของ Fragment หลัก (I6d83c, b/296173018)

เวอร์ชัน 1.6.1

26 กรกฎาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.1 เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่แคชสถานะที่บันทึกไว้เมื่อหยุดกิจกรรมแต่ไม่ได้ทำลายกิจกรรมอย่างไม่ถูกต้อง แม้หลังจากย้ายอินสแตนซ์ของ Fragment กลับไปที่สถานะ RESUMED แล้วก็ตาม ซึ่งจะทำให้สถานะที่แคชไว้ถูกนำกลับมาใช้ซ้ำหากอินสแตนซ์ของ Fragment นั้นอยู่ใน Back Stack เมื่อใช้ API ของ Back Stack หลายรายการเพื่อบันทึกและกู้คืน Fragment นั้น (I71288, b/246289075)

การอัปเดตทรัพยากร Dependency

  • ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.7.2 แล้ว การแก้ไขนี้จะช่วยแก้ปัญหาที่ผู้ใช้ Kotlin ขยาย ComponentDialog ไม่ได้หากไม่มีการอ้างอิงที่ชัดเจนใน Activity (b/287509323)

เวอร์ชัน 1.6.0

7 มิถุนายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0 เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.5.0

  • สถานะที่บันทึกไว้ของ Fragment ได้รับการแยกออกเป็นสถานะไลบรารีส่วนตัว (คลาส Parcelable ที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ใน Bundle เสมอ ซึ่งช่วยให้ระบุได้อย่างแม่นยำว่าสถานะของ Fragment มาจากที่ใด
  • FragmentManager.OnBackStackChangedListener อินเทอร์เฟซได้รับการขยายด้วยการเรียกกลับเพิ่มเติม 2 รายการของ onBackStackChangeStarted และ onBackStackChangeCommitted ซึ่งจะเรียกใช้กับแต่ละ Fragment ก่อนที่จะเพิ่ม/นำออกจาก Back Stack ของ Fragment และหลังจากที่คอมมิตธุรกรรมตามลำดับ
  • FragmentStrictMode เพิ่ม WrongNestedHierarchyViolation ใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้นการแสดงผลของ Fragment หลัก แต่ไม่ได้เพิ่มลงใน childFragmentManager ของ Fragment หลัก
  • ตอนนี้ API Fragment และ FragmentManager ที่รับ Intent หรือ IntentSender มีคำอธิบายประกอบที่ถูกต้องด้วย @NonNull เพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้หยุดทำงานทันทีเสมอ
  • DialogFragment ตอนนี้ให้สิทธิ์เข้าถึง ComponentDialog พื้นฐานผ่าน requireComponentDialog() API แล้ว
  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.6.1 แล้ว
  • ตอนนี้ Fragment จะขึ้นอยู่กับ SavedState 1.2.1
  • ตอนนี้ Fragment จะขึ้นอยู่กับ ProfileInstaller 1.3.0
  • อาร์ติแฟกต์ fragment-testing-manifest จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง fragment-testing กับ androidx.test

เวอร์ชัน 1.6.0-rc01

10 พฤษภาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-rc01 เวอร์ชัน 1.6.0-rc01 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ทำให้ระบบส่ง ActivityResult พร้อมรหัสคำขอที่ไม่ถูกต้องเมื่อมีการส่งคำขอ startActivityForResult หลายรายการติดต่อกัน (If0b9d, b/249519359)
  • แก้ไขปัญหาที่onBackStackChangeListenerการเรียกกลับถูกส่งสำหรับการทำธุรกรรมที่ไม่ได้เปลี่ยนสแต็กย้อนกลับจริงหากมีการผสมกับการทำธุรกรรมที่เปลี่ยน (I0eb5c, b/279306628)

เวอร์ชัน 1.6.0-beta01

19 เมษายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-beta01 เวอร์ชัน 1.6.0-beta01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • การใช้ postponeEnterTransition ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปรั่วไหลอีกต่อไป (I2ec7d, b/276375110)
  • ตอนนี้ Callback ใหม่ onBackStackChangeStarted และ onBackStackChangeCommitted จะส่ง Fragment เพียงครั้งเดียวเท่านั้น แม้ว่าธุรกรรมหลายรายการจะมี Fragment เดียวกันก็ตาม (Ic6b69)

เวอร์ชัน 1.6.0-alpha09

5 เมษายน 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-alpha09 เวอร์ชัน 1.6.0-alpha09 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • DialogFragment ตอนนี้ให้สิทธิ์เข้าถึง ComponentDialog พื้นฐานผ่าน requireComponentDialog() API แล้ว (I022e3, b/234274777)
  • API ของ Fragment commitNow(), executePendingTransactions() และ popBackStackImmediate() ได้รับการใส่คำอธิบายประกอบด้วย @MainThread ซึ่งหมายความว่าตอนนี้ API ทั้งหมดจะส่งข้อผิดพลาดในการบิลด์เมื่อไม่ได้เรียกใช้จากเทรดหลัก แทนที่จะรอให้เกิดข้อผิดพลาดในรันไทม์ (Ic9665, b/236538905)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องใน FragmentManager ที่การบันทึกและกู้คืนในเฟรมเดียวกันอาจทำให้เกิดข้อขัดข้อง (Ib36af, b/246519668)
  • ตอนนี้ OnBackStackChangedListener onBackStackChangeStarted และ onBackStackChangeCommitted จะเรียกใช้เมื่อมีการเปลี่ยนแปลง FragmentManager Back Stack เท่านั้น (I66055, b/274788957)

เวอร์ชัน 1.6.0-alpha08

22 มีนาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-alpha08 เวอร์ชัน 1.6.0-alpha08 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลงพฤติกรรม

  • เราได้ปรับเวลาของOnBackStackChangedListener.onBackStackChangeCommitedการเรียกกลับให้ดำเนินการก่อนการดำเนินการของ Fragment ซึ่งช่วยให้มั่นใจได้ว่าจะไม่มีการส่งคืนการเรียกกลับไปยัง Fragment ที่ไม่ได้เชื่อมต่อ (I66a76, b/273568280)

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.5.6: แก้ไขปัญหาที่การเรียก clearFragmentResultListener ภายใน setFragmentResultListener จะไม่ทำงานหาก Lifecycle เป็น STARTED อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.6.0-alpha07

8 มีนาคม 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-alpha07 เวอร์ชัน 1.6.0-alpha07 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.5.6: แก้ไขปัญหาที่การนำ Fragment ออกไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทำให้เมนูของกิจกรรมใช้ไม่ได้ (50f098, b/244336571)

เวอร์ชัน 1.6.0-alpha06

22 กุมภาพันธ์ 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-alpha06 เวอร์ชัน 1.6.0-alpha06 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้ระบบจะเรียกใช้onBackStackChangedStartedการเรียกกลับใน FragmentManageronBackStackChangedListener ใหม่ก่อนที่ Fragment จะเริ่มย้ายไปยังสถานะเป้าหมาย (I34726)

เวอร์ชัน 1.6.0-alpha05

8 กุมภาพันธ์ 2023

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-alpha05 เวอร์ชัน 1.6.0-alpha05 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • FragmentManager.OnBackStackChagnedListener ตอนนี้อินเทอร์เฟซมี 2 Callback เพิ่มเติม ได้แก่ onBackStackChangeStarted และ onBackStackChangeCommitted ซึ่งช่วยให้มีข้อมูลและการควบคุมเพิ่มเติมเมื่อมีการเปลี่ยนแปลง Back Stack ใน FragmentManager (Ib7ce5, b/238686802)

การเปลี่ยนแปลง API

  • ตอนนี้ API Fragment และ FragmentManager ที่ใช้ Intent หรือ IntentSender มีคำอธิบายประกอบที่ถูกต้องด้วย @NonNull เพื่อป้องกันการส่งค่า Null เนื่องจากค่า Null จะทำให้ API ของเฟรมเวิร์ก Android ที่เกี่ยวข้องซึ่งเมธอดเหล่านี้เรียกใช้หยุดทำงานทันทีเสมอ (I06fd4)

เวอร์ชัน 1.6.0-alpha04

7 ธันวาคม 2022

ระบบจะถอนการอ้างสิทธิ์androidx.fragment:fragment-*:1.6.0-alpha04 เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentStrictMode เพิ่ม WrongNestedHierarchyViolation ใหม่ที่ตรวจหาเมื่อมีการซ้อน Fragment ย่อยภายในลำดับชั้นการแสดงผลของ Fragment หลัก แต่ไม่ได้เพิ่มลงใน childFragmentManager ของ Fragment หลัก (I72521, b/249299268)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้ Fragment จะคืนค่าสถานะ SavedStateRegistry ก่อน onAttach() เพื่อให้มั่นใจว่าสถานะดังกล่าวจะพร้อมใช้งานจากวิธีการวงจรทั้งหมดที่สูงขึ้น (I1e2b1)

การเปลี่ยนแปลง API

  • อาร์ติแฟกต์ fragment-testing-manifest จะแยกรายการไฟล์ Manifest ออกจากคอมโพเนนต์การทดสอบ Fragment ที่เหลือ ซึ่งหมายความว่าคุณจะทำสิ่งต่อไปนี้ได้
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

ซึ่งจะช่วยหลีกเลี่ยงความขัดแย้งเนื่องจากเวอร์ชันไม่ตรงกันระหว่าง fragment-testing กับ androidx.test(I8e534, b/128612536)

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.5.5: Fragment จะไม่บันทึกสถานะ ViewModel เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอย่างไม่ถูกต้องอีกต่อไป (I10d2b, b/253546214)

เวอร์ชัน 1.6.0-alpha03

5 ตุลาคม 2022

androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03 และ androidx.fragment:fragment-testing:1.6.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.6.0-alpha03 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • ตอนนี้คลาสที่ขยาย DialogFragment จะต้องเรียกใช้ super ในการลบล้าง onDismiss() (I14798, b/238928865)

การแก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซการเรียกกลับของผู้ให้บริการรายใหม่ (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) เพื่อให้มั่นใจว่า Fragment จะได้รับการเรียกกลับที่เหมาะสมเสมอ (I9b380,I34581, (I8dfe6, b/242570955),If9d6b,Id0096,I690b3,I2cba2)

เวอร์ชัน 1.6.0-alpha02

24 สิงหาคม 2022

androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02 และ androidx.fragment:fragment-testing:1.6.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 1.6.0-alpha02 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.5.2: แก้ไขปัญหาที่การดำเนินการธุรกรรม popBackStack() และ replace() พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้ Animation/Animator ที่ไม่ถูกต้อง (Ib1c07, b/214835303)

เวอร์ชัน 1.6.0-alpha01

27 กรกฎาคม 2022

androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01 และ androidx.fragment:fragment-testing:1.6.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.6.0-alpha01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงพฤติกรรม

  • สถานะที่บันทึกไว้ของ Fragment ได้รับการแยกออกเป็นสถานะไลบรารีส่วนตัว (คลาส Parcelable ที่กำหนดเอง) และสถานะที่นักพัฒนาแอปให้ไว้ ซึ่งตอนนี้จะจัดเก็บไว้ใน Bundle เสมอ ซึ่งช่วยให้ระบุตำแหน่งที่มาของสถานะของ Fragment ได้อย่างแม่นยำ (b/207158202)

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.5.1: แก้ไขการถดถอยใน DialogFragmentCallbacksDetector ซึ่งการใช้เวอร์ชัน Lint ที่มาพร้อมกับ AGP 7.4 จะทำให้ Lint ขัดข้อง (b/237567009)

การอัปเดตทรัพยากร Dependency

รุ่น 1.5

เวอร์ชัน 1.5.7

19 เมษายน 2023

androidx.fragment:fragment:1.5.7, androidx.fragment:fragment-ktx:1.5.7 และ androidx.fragment:fragment-testing:1.5.7 เปิดตัวแล้ว เวอร์ชัน 1.5.7 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • การใช้ postponeEnterTransition ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปรั่วไหลอีกต่อไป (I2ec7d, b/276375110)

เวอร์ชัน 1.5.6

22 มีนาคม 2023

androidx.fragment:fragment:1.5.6, androidx.fragment:fragment-ktx:1.5.6 และ androidx.fragment:fragment-testing:1.5.6 เปิดตัวแล้ว เวอร์ชัน 1.5.6 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การนำ Fragment ออกไม่ว่าจะเพิ่มรายการเมนูหรือไม่ก็ตาม จะทำให้เมนูของกิจกรรมไม่ถูกต้อง (50f098, b/244336571)
  • แก้ไขปัญหาที่การเรียก clearFragmentResultListener ภายใน setFragmentResultListener จะไม่ทำงานหาก Lifecycle เป็น STARTED อยู่แล้วและมีผลลัพธ์อยู่แล้ว (If7458)

เวอร์ชัน 1.5.5

7 ธันวาคม 2022

androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5 และ androidx.fragment:fragment-testing:1.5.5 เปิดตัวแล้ว เวอร์ชัน 1.5.5 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • Fragment จะไม่บันทึกสถานะ ViewModel อย่างไม่ถูกต้องเป็นส่วนหนึ่งของสถานะที่บันทึกไว้ของรีจิสทรีมุมมองอีกต่อไป (I10d2b, b/253546214)

เวอร์ชัน 1.5.4

24 ตุลาคม 2022

androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4 และ androidx.fragment:fragment-testing:1.5.4 เปิดตัวแล้ว เวอร์ชัน 1.5.4 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดที่การใช้ FragmentController ที่กำหนดเองกับโฮสต์ที่ไม่ได้ใช้ส่วนติดต่อการเรียกกลับของผู้ให้บริการ (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) และการเรียกใช้ฟังก์ชันการส่งที่เลิกใช้งานแล้วจะส่งไปยัง Fragment ย่อยไม่สำเร็จ (I9b380)

เวอร์ชัน 1.5.3

21 กันยายน 2022

androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3 และ androidx.fragment:fragment-testing:1.5.3 เปิดตัวแล้ว เวอร์ชัน 1.5.3 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดที่ทำให้ Fragment ใน Back Stack ได้รับการเรียกกลับ onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() และ onConfigurationChanged() (I34581, I8dfe6, b/242570955)
  • Fragment ย่อยที่ซ้อนกันจะไม่ได้รับการเรียกกลับ onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() หรือ onConfigurationChanged() หลายรายการอีกต่อไป (I690b3, Id0096, If9d6b, I2cba2)

รุ่น 1.5.2

10 สิงหาคม 2022

androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2 และ androidx.fragment:fragment-testing:1.5.2 เปิดตัวแล้ว เวอร์ชัน 1.5.2 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การดำเนินการธุรกรรม popBackStack() และ replace() พร้อมกันอาจทำให้ Fragment ที่ออกจากระบบเรียกใช้ Animation/Animator ที่ไม่ถูกต้อง (Ib1c07, b/214835303)

รุ่น 1.5.1

27 กรกฎาคม 2022

androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1 และ androidx.fragment:fragment-testing:1.5.1 เปิดตัวแล้ว เวอร์ชัน 1.5.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขการเกิดปัญหาซ้ำใน DialogFragmentCallbacksDetector ซึ่งการใช้เวอร์ชันเครื่องมือวิเคราะห์ซอร์สโค้ดที่มาพร้อมกับ AGP 7.4 จะทำให้เครื่องมือวิเคราะห์ซอร์สโค้ดขัดข้อง (b/237567009)

การอัปเดตทรัพยากร Dependency

  • ตอนนี้ไลบรารี Fragment ขึ้นต่อกันกับ Lifecycle 2.5.1 แล้ว (Id204c)
  • ตอนนี้ไลบรารี Fragment ขึ้นอยู่กับ Activity 1.5.1 แล้ว (I10f07)

เวอร์ชัน 1.5.0

29 มิถุนายน 2022

androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0 และ androidx.fragment:fragment-testing:1.5.0 เปิดตัวแล้ว เวอร์ชัน 1.5.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.4.0

  • การผสานรวม CreationExtras - Fragment ตอนนี้สามารถระบุ ViewModelProvider.Factory แบบไม่เก็บสถานะผ่าน วงจร 2.5.0 ของ CreationExtras ได้แล้ว
  • การผสานรวมกล่องโต้ตอบคอมโพเนนต์ - DialogFragment ตอนนี้ใช้ ComponentDialog ผ่าน Activity 1.5.0 เป็นกล่องโต้ตอบเริ่มต้นที่ onCreateDialog() แสดงผล
  • การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้ - Fragment เริ่มเปลี่ยนวิธีบันทึกสถานะอินสแตนซ์แล้ว ความพยายามนี้มีจุดประสงค์เพื่อช่วยระบุอย่างชัดเจนว่ามีการบันทึกสถานะใดไว้ใน Fragment และแหล่งที่มาของสถานะ การเปลี่ยนแปลงในปัจจุบันมีดังนี้
    • FragmentManager จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงใน Bundle แทนที่จะบันทึกลงใน Parcelable ที่กำหนดเองโดยตรง
    • ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าผ่าน Fragment Result APIs ซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของ FragmentManager
    • ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ FragmentManager ซึ่งช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในบันทึกการแก้ไขข้อบกพร่องของ Fragment ได้

การเปลี่ยนแปลงอื่นๆ

  • FragmentStrictMode มีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้ allowViolation() กับชื่อคลาส
  • เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน ActionBar ของกิจกรรมแล้ว API MenuHost และ MenuProvider ที่เพิ่มเข้ามาใน Activity 1.4.0 มีพื้นผิว API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของแอป ซึ่ง Fragment ควรใช้

เวอร์ชัน 1.5.0-rc01

11 พฤษภาคม 2022

androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01 และ androidx.fragment:fragment-testing:1.5.0-rc01 เปิดตัวแล้ว เวอร์ชัน 1.5.0-rc01 มีคอมมิตเหล่านี้

การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้

  • ตอนนี้ระบบจะบันทึกสถานะที่เชื่อมโยงกับแต่ละ Fragment แยกจากสถานะภายในของ FragmentManager ซึ่งช่วยให้คุณเชื่อมโยงจำนวนสถานะที่บันทึกไว้ซึ่งเชื่อมโยงกับแต่ละ Fragment กับรหัสที่ไม่ซ้ำกันที่อยู่ในการบันทึกการแก้ไขข้อบกพร่องของ Fragment ได้ (a153e0, b/207158202)

เวอร์ชัน 1.5.0-beta01

20 เมษายน 2022

androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01 และ androidx.fragment:fragment-testing:1.5.0-beta01 เปิดตัวแล้ว เวอร์ชัน 1.5.0-beta01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • DialogFragment ได้เพิ่มเมธอด dismissNow ใหม่ที่ใช้ commitNow เพื่อให้เทียบเท่ากับฟังก์ชัน showNow โปรดทราบว่าการดำเนินการนี้จะไม่ทำให้Dialogถูกปิดทันที แต่จะอัปเดตสถานะของ FragmentManager แบบพร้อมกันเท่านั้น (I15c36, b/72644830)

การปรับโครงสร้างสถานะอินสแตนซ์ที่บันทึกไว้

  • FragmentManager จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงใน Bundle แทนที่จะบันทึกลงใน Parcelable ที่กำหนดเองโดยตรง นี่เป็นขั้นตอนแรกในการเพิ่มความโปร่งใสเกี่ยวกับสิ่งที่ Fragments บันทึกไว้จริงๆ (I93807, b/207158202)
  • ตอนนี้ระบบจะบันทึกผลลัพธ์ที่ตั้งค่าผ่าน Fragment Result APIs ซึ่งยังไม่ได้ส่งแยกต่างหากจากสถานะภายในของ FragmentManager ซึ่งจะช่วยให้มีความโปร่งใสเพิ่มเติมเกี่ยวกับผลลัพธ์ที่บันทึกไว้เป็นส่วนหนึ่งของสถานะอินสแตนซ์ที่บันทึกไว้ (I6ea12, b/207158202)

เวอร์ชัน 1.5.0-alpha05

6 เมษายน 2022

androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05 และ androidx.fragment:fragment-testing:1.5.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.5.0-alpha05 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

เวอร์ชัน 1.5.0-alpha04

23 มีนาคม 2022

androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04 และ androidx.fragment:fragment-testing:1.5.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 1.5.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เราได้เลิกใช้งาน Fragment API สำหรับการแสดงเมนูใน ActionBar ของกิจกรรมแล้ว เนื่องจาก API ดังกล่าวเชื่อมโยง Fragment กับกิจกรรมอย่างใกล้ชิดและไม่สามารถทดสอบแยกกันได้ API MenuHost และ MenuProvider ที่เพิ่มเข้ามาใน Activity 1.4.0-alpha01 มีพื้นผิว API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของแอป ซึ่ง Fragment ควรใช้ (I50a59, I20758)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ SavedStateViewFactory รองรับการใช้ CreationExtras แล้วแม้ว่าจะเริ่มต้นด้วย SavedStateRegistryOwner ก็ตาม หากมีการระบุส่วนเสริม ระบบจะไม่สนใจอาร์กิวเมนต์ที่เริ่มต้น (I6c43b, b/224844583)

เวอร์ชัน 1.5.0-alpha03

23 กุมภาพันธ์ 2022

androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03 และ androidx.fragment:fragment-testing:1.5.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.5.0-alpha03 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • ตอนนี้คุณส่ง CreationExtras ไปยังฟังก์ชัน by viewModels() และ by activityViewModels() ได้แล้ว (Ibefe7, b/217601110)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้ DialogFragment ใช้ ComponentDialog เป็นกล่องโต้ตอบเริ่มต้น ที่ onCreateDialog() แสดงผล (If3784, b/217618170)

เวอร์ชัน 1.5.0-alpha02

9 กุมภาพันธ์ 2022

androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02 และ androidx.fragment:fragment-testing:1.5.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 1.5.0-alpha02 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • FragmentStrictMode มีความสามารถในการให้ Fragment ของบุคคลที่สามแบบส่วนตัวข้ามการลงโทษการละเมิดที่เฉพาะเจาะจงได้โดยใช้ allowViolation() กับชื่อคลาส (I8f678)

เวอร์ชัน 1.5.0-alpha01

26 มกราคม 2022

androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01 และ androidx.fragment:fragment-testing:1.5.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.5.0-alpha01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • Fragment ผสานรวมกับ ViewModel CreationExtras ซึ่งเปิดตัวเป็นส่วนหนึ่งของ Lifecycle 2.5.0-alpha01 แล้ว (I3060b, b/207012585)

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.4.1: FragmentContainerView จะไม่ทําให้เกิดข้อยกเว้นสถานะที่ไม่ถูกต้อง อีกต่อไปเมื่อรหัสมุมมองที่สร้างจาก XML มีค่าเป็นลบ (Ic185b, b/213086140)
  • จาก Fragment 1.4.1: เมื่อใช้ ownerProducer แลมบ์ดาที่กำหนดเองกับฟังก์ชัน by viewModels() lazy ตอนนี้จะใช้ defaultViewModelProviderFactory จากเจ้าของนั้นหากไม่ได้ระบุ ViewModelProvider.Factory ที่กำหนดเอง แทนที่จะใช้ Factory ของ Fragment เสมอ (I56170, b/214106513)
  • แก้ไขข้อขัดข้องเมื่อเข้าถึง ViewModel เป็นครั้งแรกจากregisterForActivityResult()การเรียกกลับของ Fragment (Iea2b3)

เวอร์ชัน 1.4

เวอร์ชัน 1.4.1

26 มกราคม 2022

androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1 และ androidx.fragment:fragment-testing:1.4.1 เปิดตัวแล้ว เวอร์ชัน 1.4.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • FragmentContainerView จะไม่ทําให้เกิดข้อยกเว้นสถานะที่ผิดกฎหมาย อีกต่อไปเมื่อรหัสมุมมองที่สร้างจาก XML มีค่าเป็นลบ (Ic185b, b/213086140)
  • เมื่อใช้ ownerProducer แลมบ์ดาที่กำหนดเองกับฟังก์ชัน by viewModels() Lazy ตอนนี้จะใช้ defaultViewModelProviderFactory จากเจ้าของนั้นหากไม่ได้ระบุ ViewModelProvider.Factory ที่กำหนดเอง แทนที่จะใช้ Factory ของ Fragment เสมอ (I56170, b/214106513)

เวอร์ชัน 1.4.0

17 พฤศจิกายน 2021

androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0 และ androidx.fragment:fragment-testing:1.4.0 เปิดตัวแล้ว เวอร์ชัน 1.4.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.3.0

  • FragmentStrictMode API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะส่งข้อความในบันทึกเข้าจอ เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่า FragmentStrictMode.Policy ที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่เรียกใช้ได้ใน FragmentManager ผ่านเมธอด setStrictModePolicy() ใหม่ นโยบายดังกล่าวจะมีผลกับ FragmentManager นั้นและมีผลต่อเนื่องไปยัง FragmentManager ย่อยใดก็ตามที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง ดูโหมดเข้มงวดสำหรับ Fragment
  • FragmentContainerView ตอนนี้มีเมธอด getFragment() ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับ findFragmentById() ที่มีรหัสของ FragmentContainerView แต่จะอนุญาตให้เชื่อมโยงการเรียก

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • ตอนนี้ FragmentScenario ได้ติดตั้งใช้งาน Closeable แล้ว ซึ่งช่วยให้คุณใช้ FragmentScenario กับเมธอด use ของ Kotlin หรือ try-with-resources ได้

  • เพิ่ม FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragment หรือไม่

  • เราได้นำ API เวอร์ชันทดลองของ FragmentManager.enableNewStateManager(boolean) ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน

การซ้อนทับหลายรายการ

FragmentManager จะเก็บ Back Stack ที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม

การเปิดตัวนี้จะขยายกลไกเหล่านี้โดยการจัดหา FragmentManager API ใหม่ 3 รายการ ได้แก่ saveBackStack(String name), restoreBackStack(String name) และ clearBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุกๆ Fragment ที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมและ Fragment ได้ในภายหลัง ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพด้วยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้

saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้มีการย้อนกลับธุรกรรมของ Fragment ทั้งหมดไปยังชื่อที่เฉพาะเจาะจงนั้น ("ป๊อป") และมีการทำลายและนำ Fragment ที่เพิ่มออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้

  • saveBackStack()
  • popBackStack() จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่ saveBackStack() จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้ addToBackStack() กับชื่อที่ตรงกันและไม่ใช่ค่าว่างนั้นก่อนหน้านี้
  • ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะมุมมองของทุก Fragment, เรียก onSaveInstanceState() ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ ViewModel ที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และจะไม่เรียก onCleared() ในอินสแตนซ์เหล่านั้น)

ธุรกรรมย่อยที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้

  • ธุรกรรมของแต่ละ Fragment ต้องใช้ setReorderingAllowed(true) เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้
  • ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับ Back Stack ในช่วงเวลาดังกล่าว
  • ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า FragmentManager จะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว

เช่นเดียวกับ saveBackStack(), restoreBackStack() และ clearBackStack() ซึ่งจะกู้คืนหรือล้าง Back Stack ที่บันทึกไว้ก่อนหน้านี้ตามลำดับ ทั้ง 2 อย่างจะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้

ดูข้อมูลเพิ่มเติมได้ที่สแต็กย้อนกลับหลายรายการ: ข้อมูลเชิงลึก

เวอร์ชัน 1.4.0-rc01

3 พฤศจิกายน 2021

androidx.fragment:fragment:1.4.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก Fragment 1.4.0-beta01 เวอร์ชัน 1.4.0-rc01 มีคอมมิตเหล่านี้

เวอร์ชัน 1.4.0-beta01

27 ตุลาคม 2021

androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 และ androidx.fragment:fragment-testing:1.4.0-beta01 เปิดตัวแล้ว เวอร์ชัน 1.4.0-beta01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Fragment หลักจะส่ง onHiddenChanged() ลง ทั้งลำดับชั้นก่อนที่จะเรียกใช้การเรียกกลับของตัวเอง (Iedc20, b/77504618)
  • ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อเปลี่ยนจาก Fragment ที่มีแป้นพิมพ์เปิดอยู่ไปยัง Fragment ที่มี RecyclerView (I8b842, b/196852211)
  • DialogFragment ตอนนี้ใช้ setReorderingAllowed(true) สำหรับธุรกรรมทั้งหมด ที่สร้างขึ้นเมื่อคุณเรียกใช้ show(), showNow() หรือ dismiss() (Ie2c14)
  • เราได้ย่อคำเตือนของ Lint ที่ยาวมากของ DetachAndAttachFragmentInSameFragmentTransaction เป็น DetachAndAttachSameFragment แล้ว (e9eca3)

เวอร์ชัน 1.4.0-alpha10

29 กันยายน 2021

androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 และ androidx.fragment:fragment-testing:1.4.0-alpha10 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha10 มีคอมมิตเหล่านี้

เครื่องมือวิเคราะห์ซอร์สโค้ด

  • เพิ่มDetachAndAttachFragmentInSameFragmentTransactionคำเตือนของโปรแกรมตรวจสอบโค้ดเพื่อตรวจหาการเรียกทั้ง detach() และ attach() ใน Fragment เดียวกันใน FragmentTransaction เดียวกัน เนื่องจากเมื่อดำเนินการในธุรกรรมเดียวกัน การดำเนินการเสริมเหล่านี้จะหักล้างกันเอง จึงต้องแยกออกเป็นธุรกรรมที่แยกกันเพื่อดำเนินการจริง (aosp/1832956, b/200867930)
  • เพิ่มข้อผิดพลาด Lint FragmentAddMenuProvider สำหรับการแก้ไขการใช้งานวงจรของ Fragment เป็นวงจรของมุมมอง Fragment เมื่อใช้ addMenuProvider API ของ MenuHost (aosp/1830457, b/200326272)

การอัปเดตเอกสารประกอบ

  • ข้อความการเลิกใช้งานสำหรับ API ที่ตอนนี้จัดการโดย Activity Result APIs ซึ่งได้แก่ startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions และ onRequestPermissionsResult ได้รับการขยายรายละเอียดเพิ่มเติมแล้ว (cce80f)
  • ข้อความการเลิกใช้งานสำหรับ onActivityCreated() ทั้ง Fragment และ DialogFragment ได้รับการขยายรายละเอียดเพิ่มเติมทั้งหมดแล้ว (224db4)

เวอร์ชัน 1.4.0-alpha09

15 กันยายน 2021

androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09 และ androidx.fragment:fragment-testing:1.4.0-alpha09 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha09 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถเรียกใช้ clearBackStack(name) เพื่อ ล้างสถานะที่บันทึกไว้ก่อนหน้านี้ด้วย saveBackStack(name) (I70cd7)

การเปลี่ยนแปลง API

  • เราได้เขียนคลาส FragmentContainerView ใหม่ใน Kotlin เพื่อให้มั่นใจว่าฟังก์ชัน getFragment จะพิจารณา ค่า Null อย่างถูกต้อง (If694a, b/189629145)
  • ตอนนี้ FragmentStrictMode เขียนด้วย Kotlin แล้ว (I11767, b/199183506)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่สถานะของ Fragment ซึ่งเพิ่มด้วย setReorderingAllowed(true) แล้ว นำออกทันทีก่อนที่จะดำเนินการธุรกรรมที่รอดำเนินการ จะไม่ได้รับการล้างข้อมูลอย่างถูกต้อง (I8ccb8)

เวอร์ชัน 1.4.0-alpha08

1 กันยายน 2021

androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08 และ androidx.fragment:fragment-testing:1.4.0-alpha08 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha08 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ปรับปรุงUseRequireInsteadOfGetการตรวจสอบ Lint เพื่อจัดการวงเล็บซ้ำได้ดียิ่งขึ้น (I2d865)
  • ปรับปรุงUseGetLayoutInflaterการตรวจสอบ Lint เพื่อรองรับกรณีขอบเพิ่มเติม (Ie5423)

เวอร์ชัน 1.4.0-alpha07

18 สิงหาคม 2021

androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 และ androidx.fragment:fragment-testing:1.4.0-alpha07 เปิดตัวโดยไม่มีการเปลี่ยนแปลงที่สำคัญ เวอร์ชัน 1.4.0-alpha07 มีคอมมิตต่อไปนี้

เวอร์ชัน 1.4.0-alpha06

4 สิงหาคม 2021

androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06 และ androidx.fragment:fragment-testing:1.4.0-alpha06 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha06 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับ Back Stack หลายรายการเมื่อสลับระหว่าง Back Stack อย่างรวดเร็ว ซึ่งจะปรากฏเป็น IllegalStateException ขณะกู้คืน FragmentTransaction หรือเป็น สำเนาที่ 2 ของ Fragment ที่ปรากฏ (I9039f)
  • แก้ไขปัญหาที่ FragmentManager จะเก็บสำเนาของสถานะที่บันทึกไว้ก่อนหน้านี้ ผ่าน saveBackStack() แม้หลังจากกู้คืนสถานะนั้นแล้ว ก็ตาม (Ied212)
  • dismissAllowingStateLoss() เมธอด ของ DialogFragment จะไม่ขัดข้องอีกต่อไปเมื่อคุณเรียกใช้ หลังจากบันทึกสถานะแล้วเมื่อเพิ่ม DialogFragment ผ่านเมธอด show(FragmentTransaction, String) โดยเฉพาะ (I84422)

เวอร์ชัน 1.4.0-alpha05

21 กรกฎาคม 2021

androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05 และ androidx.fragment:fragment-testing:1.4.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha05 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.3.6: ตอนนี้ระบบจะตั้งค่ามุมมองของ Fragment เป็น GONE อย่างถูกต้องเมื่อใช้ hide() เมื่อมุมมองรากมีการตั้งค่า transitionGroup=”true” (aosp/1766655, b/193603427)
  • จาก Fragment 1.3.6: FragmentActivity จะปลดล็อกสถานะที่บันทึกไว้เสมอ เป็นการดำเนินการแรกในวงจร การเรียกกลับของวงจรที่แทนที่ (I6db7a)

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.4.0-alpha04

30 มิถุนายน 2021

androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04 และ androidx.fragment:fragment-testing:1.4.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ FragmentManager ใช้ SavedStateRegistry เบื้องหลังเพื่อบันทึกสถานะ นอกจากนี้ เมธอด saveAllState() และ restoreSavedState() ยังเลิกใช้งานใน FragmentController ด้วย หากใช้ FragmentController เพื่อโฮสต์ Fragment นอก FragmentActivity คุณควรให้ FragmentHostCallbacks ใช้ SavedStateRegistryOwner (Iba68e, b/188734238)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การเรียกใช้ saveBackStack() ซึ่งเป็นส่วนหนึ่งของการรองรับแบ็ก สแต็กหลายรายการจะล้มเหลวเมื่อดำเนินการพร้อมกับ การเรียกใช้ FragmentTransaction ที่ใช้ replace() (I73137)
  • แก้ไขNullPointerExceptionที่ จะเกิดขึ้นหลังจากกู้คืน สแต็กย้อนกลับที่บันทึกไว้ด้วยตนเอง ซึ่งมีธุรกรรมหลายรายการ เมื่อใช้ restoreBackStack() API สำหรับ การรองรับสแต็กย้อนกลับหลายรายการ นอกจากนี้ ยังแก้ไขปัญหาที่ระบบไม่ได้ตรวจสอบ setReorderingAllowed(true) สำหรับธุรกรรมทั้งหมดด้วย (I8c593)
  • แก้ไขปัญหาที่ FragmentManager จะ กู้คืนสถานะที่บันทึกไว้ก่อนหน้านี้ของ Fragment อย่างไม่ถูกต้องต่อไปแม้หลังจากที่นำ Fragment เหล่านั้นออกจาก FragmentManager แล้วก็ตาม ซึ่งทำให้สถานะที่บันทึกไว้ เพิ่มขึ้นเรื่อยๆ เมื่อเวลาผ่านไป (I1fb8e)

เวอร์ชัน 1.4.0-alpha03

16 มิถุนายน 2021

androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 และ androidx.fragment:fragment-testing:1.4.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha03 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เราได้อัปเดตคลาส Fragment StrictMode Violation ทั้งหมดด้วยข้อความแสดงข้อผิดพลาดที่ละเอียดยิ่งขึ้นซึ่งอธิบายรายละเอียดของการละเมิด (b/187871638)
    • FragmentTagUsageViolation ตอนนี้มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งมีคอนเทนเนอร์หลัก ที่มีการเพิ่มคอนเทนเนอร์ย่อย (Ic33a7)
    • WrongFragmentContainerViolation มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงคอนเทนเนอร์ที่ มีการเพิ่ม Fragment (Ib55f8)
    • คลาสกรณีการใช้งานสำหรับ TargetFragmentUsageViolation มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นแล้วในตอนนี้ ซึ่งรวมถึงส่วนที่ ทำให้เกิดการละเมิดและข้อมูลอื่นๆ ที่เกี่ยวข้อง (Icc6ac)
    • คลาสที่ขยาย RetainInstanceUsageViolation จะมีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งรวมถึงส่วน ที่ทำให้เกิดการละเมิด (I6bd55)
    • FragmentReuseViolation มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้น ซึ่งรวมถึงรหัสก่อนหน้าของ Fragment (I28ce2)
    • SetUserVisibleHintViolation มีข้อความแสดงข้อผิดพลาดที่ละเอียดมากขึ้นซึ่งรวมถึงคำใบ้ที่ผู้ใช้มองเห็นซึ่งกำลังตั้งค่า (Ib2d5f)

การเปลี่ยนแปลงพฤติกรรม

  • ยกเลิกการจำกัดการเรียกใช้ fitsSystemWindows ใน FragmentContainerView แล้ว ซึ่งจะไม่ทำให้แอปขัดข้องอีกต่อไป (6b8ddd, b/190622202)

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.3.5: แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันซึ่งเปิดตัวใน Fragment 1.3.4 โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนอย่างถูกต้องแล้ว (ทั้งที่ตั้งค่าโดยตรงผ่าน transitionGroup="true" หรือโดยอ้อมผ่าน transitionName หรือ background) และ องค์ประกอบที่ใช้ร่วมกันจะไม่แสดง IndexOutOfBoundsException อีกต่อไป (I16484, b/188679569, b/188969304)
  • FragmentManager จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายาม ซ่อนการนำ Fragment ออก (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> พยายามขยาย Fragment เข้าไปแล้ว (I5dbbc, b/187871150)
    • FragmentReuseViolation ตอนนี้มี รหัสที่ไม่ซ้ำกันของอินสแตนซ์ก่อนหน้าของ Fragment ที่ทำให้เกิดการละเมิด (I0544d, b/187871150)
    • RetainInstanceUsageViolation ตอนนี้เป็น นามธรรมและมี 2 คลาสย่อย ได้แก่ SetRetainInstanceUsageViolation และ GetRetainInstanceUsageViolation ซึ่งแสดงถึง 2 กรณี สำหรับประเภทการละเมิด (Ic81e5, b/187871150)

การเปลี่ยนแปลงพฤติกรรม

  • FragmentContainerView จะโยนข้อยกเว้นเมื่อพยายามเปลี่ยนแอตทริบิวต์ fitsSystemWindow โดยใช้โปรแกรมหรือผ่าน XML ส่วนแทรกควรได้รับการจัดการโดยมุมมองของแต่ละ Fragment (Ie6651, b/187304502)

เวอร์ชัน 1.4.0-alpha01

18 พฤษภาคม 2021

androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01 และ androidx.fragment:fragment-testing:1.4.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.4.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentContainerView ตอนนี้มีเมธอด getFragment() ซึ่งแสดงผล Fragment ที่เพิ่มลงในคอนเทนเนอร์ล่าสุด ซึ่งใช้ตรรกะเดียวกันกับ findFragmentById() ที่มีรหัสของ FragmentContainerView แต่จะอนุญาตให้เชื่อมโยงการเรียก (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • เพิ่ม FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragment หรือไม่ (I46652)

การซ้อนทับหลายรายการ

FragmentManager จะเก็บ Back Stack ที่ประกอบด้วยธุรกรรมของ Fragment ที่ใช้ addToBackStack() ซึ่งจะช่วยให้คุณแสดงธุรกรรมเหล่านั้นและกลับสู่สถานะก่อนหน้าได้โดยใช้กลไกสำหรับการบันทึกสถานะด้วย Fragment เพื่อให้ Fragment สามารถกู้คืนสถานะได้อย่างเหมาะสม

การเปิดตัวนี้จะขยายกลไกเหล่านี้ด้วยการจัดหา FragmentManager API ใหม่ 2 รายการ ได้แก่ saveBackStack(String name) และ restoreBackStack(String name) API เหล่านี้ใช้ name เดียวกันกับ addToBackStack() เพื่อบันทึกสถานะของ FragmentTransaction และสถานะของทุกๆ Fragment ที่เพิ่มในธุรกรรมเหล่านั้น และช่วยให้คุณสามารถกู้คืนธุรกรรมและ Fragment เหล่านั้นพร้อมกับสถานะของธุรกรรมและ Fragment ได้ในภายหลัง ซึ่งช่วยให้คุณ "สลับ" ระหว่างสแต็กย้อนกลับหลายรายการได้อย่างมีประสิทธิภาพด้วยการบันทึกสแต็กย้อนกลับปัจจุบันและกู้คืนสแต็กย้อนกลับที่บันทึกไว้

saveBackStack() ทำงานคล้ายกับ popBackStack() ตรงที่ทำงานแบบไม่พร้อมกันและส่งผลให้มีการย้อนกลับธุรกรรมของ Fragment ทั้งหมดไปยังชื่อที่เฉพาะเจาะจงนั้น ("ป๊อป") และมีการทำลายและนำ Fragment ที่เพิ่มออก แต่มีความแตกต่างในบางประเด็นที่สำคัญดังนี้

  • saveBackStack()
  • popBackStack() จะแสดงธุรกรรมทั้งหมดในสแต็กย้อนกลับหากไม่พบชื่อที่ระบุในสแต็กย้อนกลับหรือหากมีการระบุชื่อเป็นค่าว่าง แต่ saveBackStack() จะไม่ดำเนินการใดๆ หากคุณไม่ได้ทำธุรกรรม Fragment โดยใช้ addToBackStack() กับชื่อที่ตรงกันและไม่ใช่ค่าว่างนั้นก่อนหน้านี้
  • ระบบจะบันทึกสถานะของ Fragment ทั้งหมดที่เพิ่มจากธุรกรรมเหล่านั้น ซึ่งหมายความว่าระบบจะจัดเก็บสถานะมุมมองของทุก Fragment, เรียก onSaveInstanceState() ของทุก Fragment และกู้คืนสถานะดังกล่าว รวมถึงเก็บอินสแตนซ์ ViewModel ที่เชื่อมโยงกับ Fragment เหล่านั้นไว้ (และจะไม่เรียก onCleared() ในอินสแตนซ์เหล่านั้น)

ธุรกรรมย่อยที่ใช้กับ saveBackStack() ต้องเป็นไปตามเกณฑ์ต่อไปนี้

  • ธุรกรรมของแต่ละ Fragment ต้องใช้ setReorderingAllowed(true) เพื่อให้มั่นใจว่าสามารถกู้คืนธุรกรรมเป็นแบบการดำเนินการเดียวได้
  • ชุดธุรกรรมที่บันทึกไว้ต้องมีข้อมูลครบถ้วน (กล่าวคือ ต้องไม่อ้างอิงถึง Fragment ใดๆ นอกชุดธุรกรรมนั้นอย่างชัดเจน) เพื่อให้มั่นใจว่าสามารถกู้คืนได้ในภายหลัง ไม่ว่าการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับ Back Stack ในช่วงเวลาดังกล่าว
  • ไม่มี Fragment ที่บันทึกไว้ซึ่งเป็น Fragment ที่เก็บรักษาไว้หรือมี Fragment ที่เก็บรักษาไว้ในชุด Fragment ย่อยแบบทรานซิทีฟเพื่อให้แน่ใจว่า FragmentManager จะไม่แสดงการอ้างอิงถึง Fragment ที่บันทึกไว้หลังจากบันทึก Back Stack แล้ว

เช่นเดียวกับ saveBackStack() restoreBackStack() จะไม่ทำอะไรเลยหากคุณไม่ได้เรียกใช้ saveBackStack() ด้วยชื่อเดียวกันก่อนหน้านี้ (b/80029773)

StrictMode ของ Fragment

FragmentStrictMode API มีการตรวจสอบรันไทม์ที่ช่วยให้คุณยืนยันได้ว่าแอปหรือไลบรารีที่คุณใช้ไม่ได้เรียกใช้ Fragment API ที่เลิกใช้งานแล้ว เมื่อตรวจพบการละเมิด คุณสามารถเลือกที่จะส่งข้อความในบันทึกเข้าจอ เรียกใช้ Listener ที่กำหนดเอง หรือทำให้แอปขัดข้องได้ โดยสามารถตั้งค่า FragmentStrictMode.Policy ที่ควบคุมการตรวจสอบที่เปิดใช้และ "การลงโทษ" ที่เรียกใช้ได้ใน FragmentManager ผ่านเมธอด setStrictModePolicy() ใหม่ นโยบายดังกล่าวจะมีผลกับ FragmentManager นั้นและมีผลต่อเนื่องไปยัง FragmentManager ย่อยใดก็ตามที่ไม่ได้ตั้งค่านโยบายเฉพาะของตนเอง (#123, #131, #150, b/143774122)

  • detectFragmentReuse() จะตรวจหาว่ามีการเพิ่มอินสแตนซ์ Fragment ที่นำออกไปก่อนหน้านี้กลับเข้าไปใน FragmentManager หรือไม่ คุณไม่ควรโต้ตอบหรือเก็บข้อมูลอ้างอิงถึงอินสแตนซ์ Fragment หลังจากที่อินสแตนซ์ดังกล่าวถูกทำลายและนำออกจาก FragmentManager แล้ว (#142, b/153738653)
  • detectFragmentTagUsage() จะตรวจหาเมื่อคุณใช้แท็ก <fragment> ใน XML ของเลย์เอาต์ คุณควรใช้ FragmentContainerView เสมอเมื่อขยาย Fragment เป็นส่วนหนึ่งของเลย์เอาต์ (#141, b/153738235)
  • detectWrongFragmentContainer() จะตรวจจับเมื่อคุณเพิ่ม Fragment ลงใน Container ที่ไม่ใช่ FragmentContainerView คุณควรใช้ FragmentContainerView เป็นคอนเทนเนอร์สำหรับ Fragment ในเลย์เอาต์เสมอ (#146, b/181137036)
  • detectRetainInstanceUsage() จะตรวจจับเมื่อคุณใช้ API setRetainInstance() หรือ getRetainInstance() ที่เลิกใช้งานแล้ว (#140, b/153737954)
  • detectSetUserVisibleHint() จะตรวจหาเมื่อคุณใช้ setUserVisibleHint() API ที่เลิกใช้งานแล้ว (#136, b/153738974)
  • detectTargetFragmentUsage() จะตรวจจับเมื่อคุณใช้ API setTargetFragment(), getTargetFragment() หรือ getTargetRequestCode() ที่เลิกใช้งานแล้ว (#139, b/153737745)

การเปลี่ยนแปลง API

  • เราได้นำ API เวอร์ชันทดลองของ FragmentManager.enableNewStateManager(boolean) ออกแล้ว และตอนนี้เครื่องมือจัดการสถานะใหม่เป็นตัวเลือกเดียวที่พร้อมใช้งาน (I90036, b/162776418)
  • ตอนนี้ FragmentScenario ได้ติดตั้งใช้งาน Closeable แล้ว ซึ่งช่วยให้คุณใช้ FragmentScenario กับเมธอด use ของ Kotlin หรือ try-with-resources ได้ (#121, b/143774122)

การตรวจสอบ Lint ใหม่

  • UseGetLayoutInflaterการตรวจสอบ Lint จะแสดงคำเตือนเมื่อใช้ LayoutInflater.from(Context) ภายใน DialogFragment - คุณควรใช้วิธี getLayoutInflater() ของ DialogFragment เสมอเพื่อรับ LayoutInflater ที่เหมาะสม (#156, b/170781346)
  • ตอนนี้ DialogFragmentCallbacksDetector การตรวจสอบ Lint จะแสดงคำเตือนเมื่อเรียกใช้ setOnCancelListener หรือ setOnDismissListener ในเมธอด onCreateDialog() ของ DialogFragment ซึ่งเป็นของ DialogFragment เอง และคุณควรลบล้าง 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 ระบบจะไม่ส่ง Inset อย่างไม่มีกำหนดอีกต่อไป ซึ่งจะแก้ไขปัญหาเกี่ยวกับอินสแตนซ์ BottomNavigationBar และ FloatingActionButton (I1bb78, b/186012452)
  • จาก Fragment 1.3.4: ตอนนี้คุณสามารถดึงข้อมูล Parcelable จากผลลัพธ์ของ Fragment bundle ได้หลังจากกระบวนการสิ้นสุดลง (I65932, b/187443158)
  • จาก Fragment 1.3.4: เมื่อทำการเปลี่ยนฉากองค์ประกอบที่ใช้ร่วมกันใน ViewGroup หาก ViewGroup มี transitionGroup ตั้งค่าเป็น false ตอนนี้จะเปลี่ยนฉากได้อย่างถูกต้องแล้ว (I99675)

การมีส่วนร่วมจากภายนอก

เวอร์ชัน 1.3

เวอร์ชัน 1.3.6

21 กรกฎาคม 2021

androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6 และ androidx.fragment:fragment-testing:1.3.6 เปิดตัวแล้ว เวอร์ชัน 1.3.6 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.4.0-alpha03: FragmentManager จะไม่ขัดข้องอีกต่อไปเมื่อคุณพยายามซ่อน Fragment ที่กำลังนำออก (I573dd, b/183634730)
  • ตอนนี้ระบบจะตั้งค่ามุมมองของ Fragment เป็น GONE อย่างถูกต้องเมื่อใช้ hide() เมื่อมุมมองรากมีการตั้งค่า transitionGroup=”true” (aosp/1766655, b/193603427)
  • FragmentActivity จะปลดล็อกสถานะที่บันทึกไว้เสมอ เป็นการดำเนินการแรกในโค้ดเรียกกลับของวงจร ที่แทนที่ (I6db7a)

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.3.5

16 มิถุนายน 2021

androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5 และ androidx.fragment:fragment-testing:1.3.5 เปิดตัวแล้ว เวอร์ชัน 1.3.5 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยในการเปลี่ยนภาพองค์ประกอบแบบใช้ร่วมกันที่เปิดตัวใน Fragment 1.3.4 โดย aosp/1679887 ตอนนี้ Fragment จัดการกลุ่มการเปลี่ยนอย่างถูกต้องแล้ว (ทั้งที่ตั้งค่าโดยตรงผ่าน transitionGroup="true" หรือโดยอ้อมผ่าน transitionName หรือ background) และ องค์ประกอบที่ใช้ร่วมกันจะไม่แสดง IndexOutOfBoundsException อีกต่อไป (I16484, b/188679569, b/188969304)

เวอร์ชัน 1.3.4

18 พฤษภาคม 2021

androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4 และ androidx.fragment:fragment-testing:1.3.4 เปิดตัวแล้ว เวอร์ชัน 1.3.4 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.3.3 เมื่อใช้ ViewTreeViewModelStoreOwner.get() API กับ ViewModelProvider หรือเมธอด Jetpack Compose ของ viewModel() ภายใน Fragment เมื่อใช้ Hilt ตอนนี้ Use Case เหล่านี้ใช้ ViewModelProvider.Factory ที่ Fragment ของคุณระบุอย่างถูกต้องหากมีการลบล้าง getDefaultViewModelProviderFactory() (เช่นเดียวกับที่ Fragment ที่มีคำอธิบายประกอบ @AndroidEntryPoint ทำ) หากคุณไม่ลบล้างเมธอดดังกล่าว ระบบจะสร้าง SavedStateViewModelFactory ที่บันทึกและคืนค่าสถานะควบคู่ไปกับมุมมองของ Fragment เป็นค่าเริ่มต้น (I5cbfa, b/186097368)
  • เมื่อใช้ FragmentContainerView ใน API 29 การแทรกจะไม่ส่งต่อไปอย่างไม่มีกำหนดอีกต่อไป ซึ่งจะแก้ไขปัญหาเกี่ยวกับอินสแตนซ์ BottomNavigationBar และ FloatingActionButton (I1bb78, b/186012452)
  • ตอนนี้คุณสามารถดึงข้อมูล Parcelable จากผลลัพธ์ของ Fragment ใน Bundle หลังจากกระบวนการสิ้นสุดลงได้แล้ว (I65932, b/187443158)
  • เมื่อทำการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันใน ViewGroup หากตั้งค่า transitionGroup เป็น false ตอนนี้ก็จะเปลี่ยนอย่างถูกต้องแล้ว (I99675)

เวอร์ชัน 1.3.3

21 เมษายน 2021

androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3 และ androidx.fragment:fragment-testing:1.3.3 เปิดตัวแล้ว เวอร์ชัน 1.3.3 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้การใช้ SavedStateViewModelFactory จะใช้งานได้ เมื่อใช้กับ SavedStateRegistryOwner ที่ได้จาก การใช้ ViewTreeSavedStateRegistryOwner.get() กับ มุมมองของ Fragment (I21acf, b/181577191)

การแก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.3.2 ซึ่งจะทำให้ภาพเคลื่อนไหว popEnter ไม่ทำงานเมื่อเปิด FragmentTransaction ที่มีการดำเนินการ setPrimaryNavFragment เช่น การดำเนินการที่ใช้โดย NavHostFragment (I38c87, b/183877426)
  • FragmentContainerView ตอนนี้จะช่วยให้มั่นใจได้ว่า Fragment ทุกรายการจะได้รับชุดใหม่ของ WindowInsets ซึ่งทำให้ตอนนี้แต่ละ Fragment สามารถใช้ Inset ได้อย่างอิสระ (I63f68, b/172153900)
  • DialogFragment ตอนนี้จะจัดการกรณีที่มีการเพิ่ม Fragment ของ Child ลงใน Container ที่มีรหัสเดียวกับ Container ในคลาส Dialog ที่กำหนดเองได้อย่างถูกต้องแล้ว ซึ่งจะช่วยแก้ไขปัญหาลำดับชั้นการแสดงผลเมื่อนำรหัสที่ใช้ภายในโดยกล่องโต้ตอบ เช่น BottomSheetDialog กลับมาใช้ซ้ำ (Ie6279, b/180021387)
  • FragmentManager.dump() จะเยื้องส่วนแรกในรายการส่วนที่ใช้งานอยู่อย่างถูกต้อง (If5c33, b/183705451)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • ตอนนี้ตัวจัดการสถานะ Fragment ใหม่จะจัดการการเปลี่ยน ฉากขาออกด้วยการดำเนินการซ่อนได้อย่างถูกต้อง (I9e4de, b/184830265)

เวอร์ชัน 1.3.2

24 มีนาคม 2021

androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2 และ androidx.fragment:fragment-testing:1.3.2 เปิดตัวแล้ว เวอร์ชัน 1.3.2 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • เมื่อเรียกใช้ทั้งการดำเนินการ popBackStack() และ commit() พร้อมกัน การดำเนินการสุดท้ายจะกำหนดทิศทางสำหรับการเคลื่อนไหวทั้งหมด แทนที่จะเป็นการเรียกใช้การเคลื่อนไหวป๊อปอัปบางรายการและการเคลื่อนไหวเข้า บางรายการ (I7072e, b/181142246)
  • การดูภายในลำดับชั้นขององค์ประกอบที่ใช้ร่วมกันจะไม่ล้างชื่อการเปลี่ยนภาพอีกต่อไป เมื่อทำการเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกัน (I4d4a6, b/179934757)

การอัปเดตทรัพยากร Dependency

  • ตอนนี้ Fragment ขึ้นอยู่กับ Activity 1.2.2 แล้ว ซึ่งแก้ไขปัญหาเกี่ยวกับการตรวจสอบ Lint ของ InvalidFragmentVersionForActivityResult Activity เมื่อใช้ Fragment 1.3.1 ขึ้นไป
  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.3.1 แล้ว

เวอร์ชัน 1.3.1

10 มีนาคม 2021

androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1 และ androidx.fragment:fragment-testing:1.3.1 เปิดตัวแล้ว เวอร์ชัน 1.3.1 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้กล่องโต้ตอบภายใน DialogFragment สามารถเข้าถึง ViewTree owners ผ่าน DecorView เพื่อให้มั่นใจว่าสามารถใช้ DialogFragment กับ ComposeView ได้ (Ib9290, b/180691023)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะแสดง Fragment ที่ขยายเป็นกิจกรรม RESUMED ที่มีอยู่แล้วโดยใช้ FragmentContainerView อย่างถูกต้องหลังจากมีการเปลี่ยนแปลงการกำหนดค่า (Ie14c8, b/180538371)
  • ไม่มี } ที่ส่วนท้ายของ Fragment toString() อีกต่อไป (I54705, b/177761088)
  • ตอนนี้เมธอดที่ลบล้างใน FragmentActivity จะรับช่วง เอกสารประกอบ Java ของเมธอดพื้นฐานอย่างถูกต้อง (I736ce, b/139548782)
  • เอกสารสำหรับ setFragmentResult และ setFragmentResultListener ได้อัปเดตเอกสารพารามิเตอร์เพื่อแสดงให้เห็นว่าระบบไม่รับค่า Null อีกต่อไป (I990ba, b/178348386)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • แก้ไขปัญหาหน่วยความจำรั่วไหลใน Fragment ที่เกิดจาก mFocusedView (Ib4e9e, b/179925887)
  • ตอนนี้ Fragment จะเรียกใช้ onCreateOptionsMenu อย่างถูกต้องเมื่อใช้ ธุรกรรมการแสดง/ซ่อน (I8bce8, b/180255554)
  • ตอนนี้ส่วนย่อยย่อยที่มีการเปลี่ยนฉากซึ่งเริ่มก่อนที่จะวางเลย์เอาต์ส่วนย่อยจะเข้าถึงRESUMEDได้อย่างถูกต้อง (Ic11e6, b/180825150)
  • ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก <fragment> จะไปถึง RESUMED เสมอ (I452ac, (I9fa49)

การอัปเดตทรัพยากร Dependency

เวอร์ชัน 1.3.0

10 กุมภาพันธ์ 2021

androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0 และ androidx.fragment:fragment-testing:1.3.0 เปิดตัวแล้ว เวอร์ชัน 1.3.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.2.0

  • State Manager ใหม่: การเขียนใหม่ภายในที่สำคัญของ FragmentManager ได้แก้ไขปัญหามากมายเกี่ยวกับการเรียกใช้เหตุการณ์วงจร การแสดงภาพเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการกับ Fragment ที่เลื่อนออกไป
  • การผสานรวม Activity Result API: เพิ่มการรองรับ ActivityResultRegistry API ที่เปิดตัวใน Activity 1.2.0 เพื่อจัดการ startActivityForResult()+onActivityResult() รวมถึงโฟลว์ requestPermissions()+onRequestPermissionsResult() โดยไม่ต้องแทนที่เมธอดใน Fragment นอกเหนือจากการให้ Hook สำหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว

    • รุ่นนี้แก้ไขปัญหาหลายอย่างเกี่ยวกับรหัสคำขอที่ไม่ถูกต้องและการส่งคำขอสิทธิ์ที่ทำให้ Activity Result API ใช้งานไม่ได้ใน FragmentActivity เวอร์ชันก่อนหน้า คุณต้องอัปเกรดเป็น Fragment 1.3.0 เพื่อใช้ Activity Result API ใน FragmentActivity หรือ AppCompatActivity
  • Fragment Result API: เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน FragmentManager ซึ่งใช้ได้กับ Fragment ของลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ใน Navigation และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะ STARTED เป็นอย่างน้อย เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้วเพื่อรองรับ API ใหม่เหล่านี้ ดูรับผลลัพธ์โดยใช้ Fragment Result API

  • FragmentOnAttachListener: เราเลิกใช้งานการเรียกกลับ onAttachFragment() ใน FragmentActivity และ Fragment แล้ว เราได้เพิ่ม FragmentOnAttachListener ใหม่เพื่อให้เป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์ onAttachFragment() ให้กับ Listener ที่แยกต่างหากและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ลงใน FragmentManager อื่นๆ นอกเหนือจาก FragmentManager ขององค์ประกอบย่อยโดยตรง

  • FragmentScenarioการปรับปรุง: คลาส FragmentScenario จากอาร์ติแฟกต์ fragment-testing ได้รับการเขียนใหม่ใน Kotlin และได้รับการปรับปรุงหลายอย่าง ดังนี้

    • FragmentScenario ใช้ setMaxLifecycle() เพื่อติดตั้งใช้งาน moveToState() เพื่อให้มั่นใจว่าจะมีลักษณะการทำงานที่สอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐาน
    • FragmentScenario ตอนนี้รองรับการตั้งค่า Lifecycle.State เริ่มต้นเพื่อรองรับการยืนยันสถานะของ Fragment ก่อนที่จะย้ายไปยัง Lifecycle.State แต่ละรายการเป็นครั้งแรก
    • ตอนนี้มีทางเลือกแทน FragmentScenario API ของ onFragment ในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ Kotlin withFragment ซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันนี้จะส่งต่อข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุ
  • ViewTree การสนับสนุน: Fragment รองรับ API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View) และ ViewTreeSavedStateRegistryOwner ที่เพิ่มเข้ามาใน Lifecycle 2.3.0 และ SavedState 1.1.0 แล้ว เพื่อให้ส่งคืน Fragment เป็น ViewModelStoreOwner รวมถึง SavedStateRegistryOwner และ LifecycleOwner ที่เชื่อมโยงกับ view Lifecycle ของ Fragment เมื่อใช้ View ภายใน Fragment

  • TRANSIT_ การเปลี่ยนแปลงภาพเคลื่อนไหว: ตอนนี้เอฟเฟกต์เริ่มต้นของส่วน TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE จะใช้ Animator แทน Animation ตอนนี้แหล่งข้อมูลที่ใช้สร้างแอนิเมเตอร์เหล่านี้เป็นแบบส่วนตัวแล้ว

  • setRetainInstance() การเลิกใช้งาน: เราเลิกใช้งานเมธอด setRetainInstance() ใน Fragment แล้ว การเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่ใช่ Fragment ที่เก็บไว้ และแยกสถานะที่ต้องการเก็บไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหล ขณะเดียวกันก็ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและทำลายสถานะที่เก็บไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของ ViewModel และการเรียกกลับ onCleared() ที่ได้รับ)

  • การเลิกใช้งานอะแดปเตอร์ ViewPager 1: เมื่อเปิดตัว ViewPager2 1.0.0 คลาส FragmentPagerAdapter และ FragmentStatePagerAdapter สำหรับการโต้ตอบกับ ViewPager จึงถูกเลิกใช้งาน ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2

เวอร์ชัน 1.3.0-rc02

27 มกราคม 2021

androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02 และ androidx.fragment:fragment-testing:1.3.0-rc02 เปิดตัวแล้ว เวอร์ชัน 1.3.0-rc02 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่DialogFragmentกล่องโต้ตอบหลักDialogFragmentจะปรากฏเหนือDialogFragmentกล่องโต้ตอบย่อยDialogFragmentหลังจากเปลี่ยนการกำหนดค่า ตอนนี้กล่องโต้ตอบย่อยจะปรากฏเหนือกล่องโต้ตอบหลักเสมอ (I30806, b/177439520)
  • แก้ไขปัญหาที่การดำเนินการ hide ด้วย Animation จะทำให้เศษซ่อนกะพริบที่ส่วนท้ายของภาพเคลื่อนไหว (I57e22, b/175417675)
  • ตอนนี้ Fragment ที่มีการเปลี่ยนฉากซึ่งเพิ่มก่อนที่จะแนบลำดับชั้นการแสดงผลจะเข้าถึง RESUMED ได้อย่างถูกต้อง (I1fc1d, b/177154873)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • ตอนนี้มุมมองของ Fragment Lifecycle จัดการกรณีที่มุมมองของ Fragment ถูกทำลายก่อนที่ Lifecycle จะไปถึง CREATED ได้อย่างถูกต้องแล้ว ซึ่งจะหลีกเลี่ยงข้อยกเว้นที่ระบุว่า "ไม่มีเหตุการณ์จาก INITIALIZED" (eda2bd, b/176138645)
  • ตอนนี้ Fragment ที่ใช้ Animator จะปรากฏตามลำดับที่ถูกต้องเมื่อใช้ FragmentContainerView (Id9aa3, b/176089197)

เวอร์ชัน 1.3.0-rc01

16 ธันวาคม 2020

androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01 และ androidx.fragment:fragment-testing:1.3.0-rc01 เปิดตัวแล้ว เวอร์ชัน 1.3.0-rc01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • onPrepareOptionsMenu() จะใช้ตรรกะเดียวกันกับ onCreateOptionsMenu() และจะไม่เรียกใช้เมื่อ Fragment หลัก เรียกใช้ setMenuVisibility(false) อีกต่อไป (Id7de8, b/173203654)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • แก้ไขการรั่วไหลและอาร์ติแฟกต์ภาพเมื่อเพิ่ม Fragment ที่มี Animation ลงใน FragmentContainerView แล้วขัดจังหวะการเพิ่มนั้นด้วยการดำเนินการป๊อป (I952d8)
  • แก้ไขปัญหาที่มุมมองของ Fragment จะ ยังคงอยู่ในลำดับชั้นของมุมมองหากมีการแทนที่ในระหว่างเมธอด onCreate() หรือ onViewCreated() (I8a7d5)
  • ตอนนี้ระบบจะคืนค่าโฟกัสไปยังมุมมองรากของ Fragment อย่างถูกต้องเมื่อมีการกลับมาทำงานต่อ (Ifc84b)
  • ตอนนี้การรวมการดำเนินการป๊อปและการแทนที่ในธุรกรรม Fragment เดียวกันจะแสดงภาพเคลื่อนไหวที่เหมาะสม (Ifd4e4, b/170328691)

เวอร์ชัน 1.3.0-beta02

2 ธันวาคม 2020

androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 และ androidx.fragment:fragment-testing:1.3.0-beta02 เปิดตัวแล้ว เวอร์ชัน 1.3.0-beta02 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • FragmentScenario ได้รับการแปลงเป็น Kotlin อย่างสมบูรณ์แล้วในขณะที่ยังคงความเข้ากันได้ของแหล่งที่มาและไบนารีผ่านการใช้อินเทอร์เฟซฟังก์ชันของ Kotlin 1.4 สำหรับ FragmentAction (I19d31)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้คุณสามารถใช้ FragmentContainerView ที่ไม่ได้ขยาย Fragment โดยใช้แอตทริบิวต์ class หรือ android:name นอก FragmentActivity ได้แล้ว (Id4397, b/172266337)
  • ตอนนี้การพยายามตั้งค่าวงจรสูงสุดของ Fragment เป็น DESTROYED จะทำให้เกิด IllegalArgumentException (Ie7651, b/170765622)
  • ตอนนี้การเริ่มต้น FragmentScenario ด้วยสถานะ DESTROYED จะทำให้เกิด IllegalArgumentException (I73590, b/170765622)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • แก้ไขปัญหาที่มุมมองจะไม่ถึงสถานะสุดท้ายหากคุณขัดจังหวะการเปลี่ยน Fragment ที่ใช้ Animator หรือตัวเลือกใดตัวเลือกหนึ่งของ TRANSIT_FRAGMENT_ (I92426, b/169874632)
  • แก้ไขปัญหาที่ทำให้ไม่สามารถทำลาย Fragment ที่มี Animation ออกอย่างถูกต้อง (I83d65)
  • ตอนนี้การออกจาก Fragment ที่มีการกลับเอฟเฟกต์จะยกเลิกและรีสตาร์ทอย่างถูกต้องด้วยเอฟเฟกต์การเข้าที่เหมาะสม (I62226, b/167092035)
  • แก้ไขปัญหาที่การออก Animator จาก hide() ไม่ทำงาน (Id7ffe)
  • ตอนนี้ Fragment จะปรากฏอย่างถูกต้องเมื่อเลื่อนออกไปแล้วเริ่มทันที (Ie713b, b/170022857)
  • Fragment ที่นำมุมมองที่โฟกัสออกในระหว่างภาพเคลื่อนไหวจะไม่พยายามคืนค่าโฟกัสในมุมมองที่แยกออกมาอีกต่อไปเมื่อถึง RESUMED (I38c65, b/172925703)

การมีส่วนร่วมจากภายนอก

  • FragmentFactory จะแคชคลาสของ Fragment แยกกันสำหรับอินสแตนซ์ ClassLoader ที่แตกต่างกัน ขอขอบคุณ Simon Schiller (#87, b/113886460)

เวอร์ชัน 1.3.0-beta01

1 ตุลาคม 2020

androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 และ androidx.fragment:fragment-testing:1.3.0-beta01 เปิดตัวแล้ว เวอร์ชัน 1.3.0-beta01 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • setMaxLifecycle() ตอนนี้รองรับการตั้งค่าสถานะ Lifecycle เป็น INITIALIZING ตราบใดที่ยังไม่ได้ย้ายชิ้นส่วนไปยัง CREATED (b/159662173)

การเปลี่ยนแปลง API

การเปลี่ยนแปลงพฤติกรรม

  • ไฟล์ทรัพยากรของ Fragment ได้รับการตั้งค่าเป็นส่วนตัวอย่างถูกต้อง (aosp/1425237)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก <fragment> จะรอจนกว่าจะมีการเพิ่มมุมมองลงในคอนเทนเนอร์อย่างถูกต้อง ก่อนที่จะเปลี่ยนเป็นสถานะ STARTED (I02f4c)
  • ตอนนี้ฟอรัมที่มองเห็นได้และจากนั้นsetMaxLifecycle()ถึงCREATEDจะเรียกใช้เอฟเฟกต์การออกได้อย่างถูกต้อง (b/165822335)
  • การนำ Fragment ที่แยกออกมาซึ่งไม่ได้เพิ่มลงใน Back Stack จะไม่ทำให้เกิดหน่วยความจำรั่วไหลอีกต่อไป ขอขอบคุณ Nicklas Ansman Giertz (b/166489383)
  • ตอนนี้ Fragment ที่ใช้งานอยู่จะมี FragmentManager ที่ไม่ใช่ Null เสมอ และ Fragment ที่มี FragmentManager ที่ไม่ใช่ Null จะถือว่าใช้งานอยู่เสมอ (aosp/1422346)
  • ตอนนี้เอฟเฟกต์เริ่มต้นของส่วนย่อย TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE จะใช้ Animator แทน Animation (b/166155034)

การแก้ไขข้อบกพร่องใหม่ใน State Manager

  • ตอนนี้ Fragment จะคืนค่าสถานะโฟกัสของมุมมองอย่างถูกต้องจาก ก่อนที่จะเริ่มภาพเคลื่อนไหว (Icc256)
  • ตอนนี้ Fragment ที่มีการเปลี่ยนองค์ประกอบที่ใช้ร่วมกันเท่านั้นจะ ทําเอฟเฟกต์พิเศษให้เสร็จสมบูรณ์อย่างถูกต้อง ซึ่งหมายความว่า Fragment จะย้ายไปยัง สถานะสุดท้ายจริงๆ (Iaebc7, b/166658128)
  • ตอนนี้ระบบจะนำมุมมอง Fragment ออกจากคอนเทนเนอร์ ก่อนที่จะทำลายเสมอ (Id5876)
  • ตอนนี้ State Manager ใหม่จะนำมุมมอง Fragment ที่ออกไปออกอย่างสม่ำเสมอก่อนที่จะเพิ่มมุมมอง Fragment ที่เข้ามา (I41a6e)
  • ตอนนี้เครื่องมือจัดการสถานะใหม่จะพิจารณาการเปลี่ยนแปลงที่ชัดเจนในระดับการเข้าถึงของมุมมอง Fragment ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของ Fragment ที่เข้าเป็น INVISIBLE ก่อนที่ภาพเคลื่อนไหวจะเริ่ม มุมมองนั้นจะยังคงมองไม่เห็น (b/164481490)
  • ตอนนี้ Fragment จะให้ความสำคัญกับ Animators มากกว่า Animations ซึ่งหมายความว่า Fragment ที่มีทั้ง 2 อย่างจะเรียกใช้เฉพาะ Animator และไม่สนใจ Animation (b/167579557)
  • ตัวจัดการสถานะใหม่จะไม่ทำให้ Fragment กะพริบเมื่อใช้ภาพเคลื่อนไหวตอนเข้าอีกต่อไป (b/163084315)

ปัญหาที่ทราบ

เมื่อใช้เครื่องมือจัดการสถานะใหม่ หากคุณกดกลับขณะที่กำลังป้อนเอฟเฟกต์พิเศษแทนที่จะกลับไปยัง Fragment ก่อนหน้า ระบบจะไม่เพิ่ม Fragment เก่าอีกเลย ซึ่งจะส่งผลให้หน้าจอว่างเปล่า (b/167259187, b/167092035, b/168442830)

เวอร์ชัน 1.3.0-alpha08

19 สิงหาคม 2020

androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08 และ androidx.fragment:fragment-testing:1.3.0-alpha08 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha08 มีคอมมิตต่อไปนี้

New State Manager

การเปิดตัวนี้รวมถึงการปรับโครงสร้างครั้งใหญ่ของการจัดการสถานะภายในของ FragmentManager ซึ่งส่งผลต่อการเรียกใช้เมธอดวงจร การเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการธุรกรรมที่เลื่อนออกไป ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่บล็อกโพสต์ Fragments: Rebuilding the Internals (b/139536619, b/147749580)

  • คุณใช้ API experimental ใน FragmentManager.enableNewStateManager(boolean) เพื่อควบคุมว่า FragmentManager จะใช้เครื่องมือจัดการสถานะใหม่หรือไม่ (I7b6ee)

ปัญหาต่อไปนี้จะได้รับการแก้ไขเมื่อใช้เครื่องมือจัดการสถานะใหม่เท่านั้น

  • ตอนนี้ระบบจะหยุดส่วนก่อนหน้าของreplaceการดำเนินการอย่างถูกต้องก่อนที่จะเริ่มส่วนใหม่ (b/161654580)
  • ตอนนี้ Fragment จะป้องกันไม่ให้แอนิเมชันหลายรายการที่แข่งขันกันแสดงใน Fragment เดียวกัน เพื่อหลีกเลี่ยงกรณีที่ Animation จะลบล้างเอฟเฟกต์ Transition ทั้งหมด หรือกรณีที่ Animator และ Transition ใน Fragment เดียวจะทำงานพร้อมกัน (b/149569323)
  • ตอนนี้ระบบจะเรียกใช้ enterTransition และ exitTranstion ของทุกส่วนที่เข้าและออก แทนที่จะเรียกใช้เฉพาะส่วนที่เข้าล่าสุดและส่วนที่ออกแรก (b/149344150)
  • ตอนนี้ส่วนย่อยที่เลื่อนออกไปจะไม่ติดอยู่ที่สถานะ CREATED อีกต่อไป แต่จะย้ายไปที่ STARTED พร้อมกับส่วนย่อยอื่นๆ แทน (b/129035555)
  • แก้ไขปัญหาที่ FragmentManager จะดำเนินการตามลำดับไม่ถูกต้องเมื่อรวมธุรกรรมที่เลื่อนการเรียงลำดับใหม่กับธุรกรรมที่ไม่ได้เรียงลำดับใหม่ (b/147297731)
  • การป๊อปหลายๆ Fragment พร้อมกันจะไม่ทำให้ Fragment ระหว่างกลางปรากฏชั่วคราวเมื่อเลื่อน Fragment อีกต่อไป (b/37140383)
  • FragmentManager จะแสดงผลข้อมูลที่ถูกต้องเมื่อเรียกใช้ findFragmentById() หรือ findFragmentByTag() จากภายในโค้ดเรียกกลับ onAttachFragment() (b/153082833)
  • Fragment จะไม่เรียกใช้ onCreateView() ใน Fragment ที่กำลังถูกทำลายอีกต่อไปเมื่อมีการเลื่อนการแทนที่ Fragment (b/143915710)
  • ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อพยายามรวมอินสแตนซ์ของเฟรมเวิร์ก Transition และ AndroidX Transition จะกล่าวถึง Fragment ที่มีการเปลี่ยนที่ไม่ถูกต้อง (b/155574969)

การเปลี่ยนแปลงพฤติกรรม

  • ตอนนี้คุณสามารถเรียกใช้ launch() ใน ActivityResultLauncher ในเมธอดวงจร onCreate() ของ Fragment ได้แล้ว (b/161464278)
  • ตอนนี้การเรียกใช้ registerForActivityResult() หลังจาก onCreate() จะทำให้เกิดข้อยกเว้นที่ระบุว่าไม่อนุญาตให้ดำเนินการนี้ แทนที่จะไม่แสดงผลลัพธ์อย่างเงียบๆ หลังจากมีการเปลี่ยนแปลงการกำหนดค่า (b/162255449)
  • FragmentActivity ตอนนี้ใช้ OnContextAvailableListener API ที่เปิดตัวใน Activity 1.2.0-alpha08 เพื่อคืนค่าสถานะของ FragmentManager Listener ที่เพิ่มลงในคลาสย่อยของ FragmentActivity จะทำงานหลังจาก Listener นี้ (I513da)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะพิจารณา ActivityOptions ที่ส่งผ่านเมื่อใช้ startIntentSenderForResult() แล้ว (b/162247961)

ปัญหาที่ทราบ

  • เมื่อใช้เครื่องมือจัดการสถานะใหม่ การตั้งค่าระดับการมองเห็นของมุมมองรากของ Fragment โดยตรงหลังจาก onViewCreated() และก่อน onResume() จะส่งผลให้ FragmentManager ซึ่งควบคุมระดับการมองเห็นของมุมมองรากแทนที่ระดับการมองเห็นที่คุณตั้งค่าไว้ วิธีแก้ปัญหาชั่วคราวคือคุณควรใช้การดำเนินการ hide() และ show() เสมอเพื่อเปลี่ยนระดับการเข้าถึงของ Fragment (b/164481490)

เวอร์ชัน 1.3.0-alpha07

22 กรกฎาคม 2020

androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07 และ androidx.fragment:fragment-testing:1.3.0-alpha07 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha07 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentScenario รองรับการตั้งค่าสถานะวงจร เริ่มต้นของ CREATED, STARTED หรือ RESUMED แทนที่จะย้าย Fragment ไปยังสถานะ RESUMED เสมอ (b/159662750)
  • เพิ่มทางเลือกแทน FragmentScenario API ของ onFragment ในรูปแบบของเมธอดส่วนขยายที่ทำให้เป็นจริงของ Kotlin withFragment ซึ่งช่วยให้คุณแสดงค่าได้ โดยเฉพาะอย่างยิ่ง ฟังก์ชันนี้จะส่งต่อข้อยกเว้นที่เกิดขึ้นในบล็อกที่ระบุ (b/158697631)

การเปลี่ยนแปลงพฤติกรรม

  • FragmentScenario ใช้ setMaxLifecycle() เพื่อติดตั้งใช้งาน moveToState() เพื่อให้มั่นใจว่าจะมีลักษณะการทำงานที่สอดคล้องกันใน API ทุกระดับ และแยกสถานะของ Fragment ออกจาก Activity พื้นฐาน (b/156527405)
  • ตอนนี้ SavedStateRegistryOwner ที่ ViewTreeSavedStateRegistryOwner ส่งคืนจะเชื่อมโยงกับวงจรของมุมมอง Fragment แล้ว ซึ่งจะช่วยให้มั่นใจได้ว่าระบบจะบันทึกและกู้คืนสถานะของ Fragment พร้อมกับมุมมองของ Fragment (b/158503763)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Fragment จะรอให้มุมมองของ Fragment แนบก่อนที่จะเรียกใช้ ViewCompat.requestApplyInsets() เพื่อหลีกเลี่ยงกรณีที่คำขอแทรกถูกทิ้ง (b/158095749)
  • การเรียก clearFragmentResultListener จะล้าง เครื่องสังเกตการณ์วงจรอย่างถูกต้องแล้ว (b/159274993)

เวอร์ชัน 1.3.0-alpha06

10 มิถุนายน 2020

androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06 และ androidx.fragment:fragment-testing:1.3.0-alpha06 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha06 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เราเลิกใช้งาน Callback onAttachFragment() ใน FragmentActivity และ Fragment แล้ว เราได้เพิ่ม FragmentOnAttachListener ใหม่เพื่อ เป็นทางเลือกที่ยืดหยุ่นมากขึ้น ซึ่งช่วยให้สามารถมอบสิทธิ์ ของ onAttachFragment() ให้กับ Listener ที่แยกกันและทดสอบได้ รวมถึงรองรับการเพิ่ม Listener ลงใน FragmentManager อื่นๆ นอกเหนือจาก FragmentManager ขององค์ประกอบย่อยโดยตรง (I06d3d)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ Fragment หลักจะมีการคืนค่าสถานะมุมมองก่อน Fragment ย่อย ซึ่งจะแก้ไขปัญหาการจัดลำดับภาพหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อ DialogFragment จะแสดง DialogFragment อื่นเป็น Fragment ย่อย (b/157195715)
  • แก้ไขปัญหาที่UseRequireInsteadOfGetการตรวจสอบ Lint ไม่จัดการการใช้งานที่เชื่อมโยงของตัวดำเนินการ ?. และ !! อย่างถูกต้อง (b/157677616)

เวอร์ชัน 1.3.0-alpha05

20 พฤษภาคม 2020

androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05 และ androidx.fragment:fragment-testing:1.3.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha05 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

การเปลี่ยนแปลง API

  • ตอนนี้ API setFragmentResult() และ setFragmentResultListener() จะใช้ Bundle และ FragmentResultListener ที่ไม่ใช่ค่าว่างตามลำดับ หากต้องการล้างผลลัพธ์หรือ Listener ที่ตั้งค่าไว้ก่อนหน้านี้อย่างชัดเจน ให้ใช้วิธีการใหม่ clearFragmentResult() และ clearFragmentResultListener() (b/155416778)
  • ตอนนี้เราได้ทำเครื่องหมายส่วนขยาย setFragmentResultListener() Kotlin ที่ใช้ Lambda เป็น inline แล้ว (b/155323404)

การเปลี่ยนแปลงพฤติกรรม

  • startActivityForResult(), startIntentSenderForResult() และ requestPermissions ที่เลิกใช้งานไปก่อนหน้านี้ใน Fragment จะใช้ ActivityResultRegistry ภายใน ซึ่งจะยกเลิกข้อจำกัดในการใช้เฉพาะบิตล่าง (ต่ำกว่า 0xFFFF) สำหรับรหัสคำขอเมื่อใช้ API เหล่านั้น (b/155518741)

การอัปเดตเอกสารประกอบ

  • ขยายเอกสารประกอบเกี่ยวกับตัวสร้าง Fragment(@LayoutRes int) และ DialogFragment(@LayoutRes int) เพื่อชี้แจงว่าควรเรียกใช้จากตัวสร้างที่ไม่มีอาร์กิวเมนต์ของคลาสย่อยเมื่อใช้ FragmentFactory เริ่มต้น (b/153042497)

เวอร์ชัน 1.3.0-alpha04

29 เมษายน 2020

androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04 และ androidx.fragment:fragment-testing:1.3.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha04 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน FragmentManager ซึ่งใช้ได้กับ Fragment ของลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ใน Navigation และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง Fragment ของคุณเท่านั้นในขณะที่ Fragment นั้นอยู่ในสถานะ STARTED เป็นอย่างน้อย (b/149787344)

การเปลี่ยนแปลง API

  • เราเลิกใช้งาน API ของ Fragment เป้าหมายแล้ว หากต้องการส่งข้อมูลระหว่าง Fragment คุณควรใช้ Fragment Result API ใหม่แทน (b/149787344)
  • เราได้เลิกใช้งาน API startActivityForResult()/onActivityResult() และ requestPermissions()/onRequestPermissionsResult() ใน Fragment แล้ว โปรดใช้ Activity Result APIs (aosp/1290887)
  • การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องจาก Activity 1.2.0-alpha04: เราได้เปลี่ยนชื่อเมธอด prepareCall() เป็น registerForActivityResult() (aosp/1278717)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะหยุด getViewLifecycleOwner() ของ Fragment ก่อนที่จะเรียกใช้ onSaveInstanceState() ซึ่งเป็นการจำลองลักษณะการทำงานของวงจรของ Fragment (b/154645875)
  • ตอนนี้การเรียกใช้ setMenuVisibility(false) ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุไว้อย่างถูกต้องแล้ว (b/153593580)
  • แก้ไข illegalStateException เมื่อเพิ่ม Fragment ลงในลำดับชั้นมุมมองของ DialogFragment ด้วย FragmentContainerView (b/154366601)
  • getDefaultViewModelProviderFactory() ใน Fragment จะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์ Fragment นอกกิจกรรม (b/153762914)

เวอร์ชัน 1.3.0-alpha03

1 เมษายน 2020

androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 และ androidx.fragment:fragment-testing:1.3.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha03 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้prepareCallใน Fragment เป็น final แล้ว (b/152439361)

การแก้ไขข้อบกพร่อง

  • แก้ไขการเกิดปัญหาซ้ำที่เกิดขึ้นใน Fragment 1.3.0-alpha02 เมื่อใช้ BottomSheetDialogFragment (b/151652127, aosp/1263328, aosp/1265163)
  • แก้ไขข้อขัดข้องเมื่อใช้ prepareCall จาก Fragment หลังจากเปลี่ยนการกำหนดค่า (b/152137004)
  • แก้ไขปัญหาที่ระบบไม่สนใจการเปลี่ยนองค์ประกอบที่แชร์และการเปลี่ยนฉากขาออกเมื่อใช้ setTargetFragment() (b/152023196)
  • จาก Fragment 1.2.4: อัปเดตกฎ ProGuard ของ Fragment เพื่ออนุญาตการปกปิดโค้ดของ Fragment ที่เก็บไว้ (b/151605338)
  • จาก Fragment 1.2.4: ปิดใช้FragmentLiveDataObserveกฎ Lint ในคลาส DialogFragment เนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ จึงทำให้ใช้ this หรือ viewLifecycleOwner ได้อย่างปลอดภัยเมื่อเรียกใช้ observe (b/151765086)

การเปลี่ยนแปลงทรัพยากร Dependency

  • Fragment ขึ้นอยู่กับ Activity 1.2.0-alpha03 ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result API ที่เปิดตัวใน Activity 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 ที่เปิดตัวใน Activity 1.2.0-alpha02 เพื่อจัดการ startActivityForResult()+onActivityResult() รวมถึงโฟลว์ requestPermissions()+onRequestPermissionsResult() โดยไม่ต้องลบล้างเมธอดใน Fragment นอกเหนือจากการจัดเตรียม Hook สำหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว (b/125158199)

การเปลี่ยนแปลง API

  • DialogFragment มีเครื่องมือสร้างที่ใช้ @LayoutRes ซึ่งระบุเลย์เอาต์ที่ onCreateView() ควรขยายตามค่าเริ่มต้น (b/150327080)
  • ตอนนี้เลิกใช้เมธอด onActivityCreated() แล้ว โค้ดที่แตะมุมมองของ Fragment ควรทำใน onViewCreated() (ซึ่งเรียกใช้ก่อน onActivityCreated() ทันที) และโค้ดการเริ่มต้นอื่นๆ ควรอยู่ใน onCreate() หากต้องการรับการเรียกกลับเมื่อonCreate()ของกิจกรรมเสร็จสมบูรณ์แล้วโดยเฉพาะ คุณควรลงทะเบียน LifeCycleObserver ใน Lifecycle ของกิจกรรมใน onAttach() และนำออกเมื่อได้รับการเรียกกลับ onCreate() (b/144309266)

การแก้ไขข้อบกพร่อง

  • จาก Fragment 1.2.3: แก้ไขข้อบกพร่องใน DialogFragment ที่ทำให้เกิด StackOverflowError เมื่อเรียก getLayoutInflater() จากภายใน onCreateDialog() (b/117894767, aosp/1258664)
  • จาก Fragment 1.2.3: ลดขอบเขตของกฎ ProGuard ที่รวมไว้ของ Fragment เพื่อให้มั่นใจว่าสามารถลบคลาส Fragment ที่ไม่ได้ใช้ออกได้ (b/149665169)
  • จาก Fragment 1.2.3: แก้ไขผลบวกที่ผิดพลาดในการตรวจสอบ UseRequireInsteadOfGet Lint เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163)
  • จาก Fragment 1.2.3: FragmentContainerView จะไม่ส่ง UnsupportedOperationException อีกต่อไปเมื่อใช้เครื่องมือสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์ (b/149707833)

ปัญหาที่ทราบ

  • BottomSheetDialogFragment ไม่สามารถวางกล่องโต้ตอบบนหน้าจอได้อย่างถูกต้องอีกต่อไป (b/151652127)

เวอร์ชัน 1.3.0-alpha01

4 มีนาคม 2020

androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01 และ androidx.fragment:fragment-testing:1.3.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ ViewTreeLifecycleOwner.get(View) API ที่เพิ่มใน Lifecycle 2.3.0-alpha01 เพื่อให้แสดง viewLifecycleOwner ของ Fragment เป็น LifecycleOwner สำหรับ View ใดก็ตามที่ onCreateView() แสดง (aosp/1182955)

การเปลี่ยนแปลง API

  • เลิกใช้เมธอด setRetainInstance() ใน Fragment แล้ว การเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการคงสถานะที่เชื่อมโยงกับกิจกรรม, Fragment และกราฟการนำทางได้ ซึ่งช่วยให้นักพัฒนาแอปใช้ Fragment ปกติที่ไม่ใช่ Fragment ที่เก็บไว้ และแยกสถานะที่ต้องการเก็บไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาทั่วไปของการรั่วไหล ขณะเดียวกันก็ยังคงคุณสมบัติที่มีประโยชน์ของการสร้างและทำลายสถานะที่เก็บไว้เพียงครั้งเดียว (กล่าวคือ ตัวสร้างของ ViewModel และการเรียกกลับ onCleared() ที่ได้รับ) (b/143911815)
  • เมื่อเปิดตัว ViewPager2 1.0.0 เราได้เลิกใช้งานคลาส FragmentPagerAdapter และ FragmentStatePagerAdapter สำหรับการโต้ตอบกับ ViewPager แล้ว ดูย้ายข้อมูลจาก ViewPager ไปยัง ViewPager2 (b/145132715)

การแก้ไขข้อบกพร่อง

  • ตอนนี้กฎ ProGuard ของ Fragment จะเก็บเฉพาะตัวสร้างเริ่มต้นของคลาส Fragment ที่ใช้เท่านั้น ไม่ใช่สำหรับอินสแตนซ์ Fragment ทั้งหมด ซึ่งแก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.2.1 (b/149665169
  • require___() กฎ Lint ที่เพิ่มใน Fragment 1.2.2 จะไม่แสดงผลลบลวงสำหรับตัวแปรภายในที่ใช้ชื่อเดียวกันกับชื่อพร็อพเพอร์ตี้ Kotlin ที่ซ่อนอยู่ (เช่น view) (b/149891163)
  • FragmentContainerView จะไม่แสดง UnsupportedOperationException อีกต่อไปเมื่อใช้ตัวอย่างเลย์เอาต์ใน Android Studio (b/149707833)
  • แก้ไขปัญหาที่ระบบจะไม่สร้างและทำลาย Fragment ที่เก็บไว้ซึ่งเพิ่มหลังจากบันทึกสถานะอย่างต่อเนื่องหลังจากการเปลี่ยนแปลงการกำหนดค่าแต่ละครั้ง (b/145832397)

เวอร์ชัน 1.2.5

เวอร์ชัน 1.2.5

10 มิถุนายน 2020

androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5 และ androidx.fragment:fragment-testing:1.2.5 เปิดตัวแล้ว เวอร์ชัน 1.2.5 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะหยุด getViewLifecycleOwner() ของ Fragment ก่อนที่จะเรียกใช้ onSaveInstanceState() ซึ่งเป็นการจำลองลักษณะการทำงานของวงจรของ Fragment ฟีเจอร์นี้เคยเปิดตัวใน Fragment 1.3.0-alpha04 มาก่อน (b/154645875)
  • ตอนนี้การเรียกใช้ setMenuVisibility(false) ใน Fragment จะเปลี่ยนระดับการมองเห็นของเมนูที่ Fragment ย่อยระบุไว้อย่างถูกต้องแล้ว ฟีเจอร์นี้เคยเปิดตัวใน Fragment 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 ของ Fragment เพื่ออนุญาตการปกปิดโค้ดของ Fragment ที่เก็บไว้ (b/151605338)
  • ปิดใช้FragmentLiveDataObserveกฎ Lint ในคลาส DialogFragment เนื่องจากวงจรของคลาสและวงจรของมุมมองจะซิงค์กันเสมอ ทำให้ใช้ this หรือ viewLifecycleOwner ได้อย่างปลอดภัยเมื่อเรียกใช้ observe (b/151765086)

เวอร์ชัน 1.2.3

เวอร์ชัน 1.2.3

18 มีนาคม 2020

androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3 และ androidx.fragment:fragment-testing:1.2.3 เปิดตัวแล้ว เวอร์ชัน 1.2.3 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องใน DialogFragment ที่ทำให้เกิด StackOverflowError เมื่อโทรหา getLayoutInflater() จากภายใน onCreateDialog() (b/117894767, aosp/1258665)
  • ลดขอบเขตของกฎ ProGuard ที่รวมไว้ของ Fragment เพื่อให้มั่นใจว่าระบบจะลบคลาส Fragment ที่ไม่ได้ใช้ออกได้ (b/149665169)
  • แก้ไขผลการตรวจหาที่ผิดพลาดใน UseRequireInsteadOfGet Lint check เมื่อใช้ชื่อตัวแปรภายในที่ซ่อนชื่อพร็อพเพอร์ตี้ Kotlin (b/149891163)
  • FragmentContainerView จะไม่แสดง UnsupportedOperationException สำหรับการใช้ตัวสร้างที่ไม่ถูกต้องในการแสดงตัวอย่างเลย์เอาต์อีกต่อไป (b/149707833)

เวอร์ชัน 1.2.2

เวอร์ชัน 1.2.2

19 กุมภาพันธ์ 2020

androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 และ androidx.fragment:fragment-testing:1.2.2 เปิดตัวแล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้

การตรวจสอบ Lint ใหม่

  • เครื่องมือวิเคราะห์ซอร์สโค้ดแนะนำให้ใช้ viewLifecycleOwner เป็น LifecycleOwner ในการเรียกใช้ OnBackPressedDispatcher ใน onCreateView(), onViewCreated() และ onActivityCreated() (b/142117657)
  • เพิ่มการตรวจสอบ Lint ใหม่ที่ยืนยันว่าคุณใช้ debugImplementation ที่ถูกต้องเมื่อใช้ชิ้นงาน fragment-testing (b/141500106)
  • ตอนนี้ Fragment จะแนะนำให้ใช้เมธอด require___() ที่เชื่อมโยงเพื่อรับข้อความแสดงข้อผิดพลาดที่อธิบายได้ดีกว่าแทน checkNotNull(get___()), requireNonNull(get___()) หรือ get___()!! สำหรับ Fragment API ทั้งหมดที่มีทั้ง get และ require ที่เทียบเท่า (aosp/1202883)

การแก้ไขข้อบกพร่อง

  • แก้ไขไฟล์ ProGuard ของ Fragment เพื่อหลีกเลี่ยงคำเตือน R8 (b/148963981)
  • ปรับปรุงการตรวจสอบ Lint ที่มีอยู่ซึ่งแนะนําให้ใช้ viewLifecycleOwner เมื่อใช้ observe เพื่อจัดการเวอร์ชันของเมธอดส่วนขยาย livedata-ktx ของ observe ด้วย (b/148996309)
  • แก้ไขการจัดรูปแบบสำหรับการตรวจสอบ Lint หลายรายการ (aosp/1157012)

การมีส่วนร่วมจากภายนอก

  • ขอขอบคุณ Zac Sweers ที่มีส่วนร่วมในการตรวจสอบ Lint ของ require___() ในนามของ Slack (aosp/1202883)

เวอร์ชัน 1.2.1

เวอร์ชัน 1.2.1

5 กุมภาพันธ์ 2020

androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 และ androidx.fragment:fragment-testing:1.2.1 เปิดตัวแล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ตอนนี้ ProGuard จะเก็บตัวสร้างเริ่มต้นของ Fragment ที่เพิ่มผ่านเมธอด add และ replace ซึ่งใช้อินสแตนซ์ Class (หรือเวอร์ชัน Kotlin ที่ได้รับการทำให้เป็นจริง) ไว้ (b/148181315)
  • FragmentStatePagerAdapter และ FragmentPagerAdapter จะไม่ดักจับข้อยกเว้นที่ FragmentManager สร้างขึ้นเมื่อเรียกใช้ finishUpdate() อีกต่อไป (aosp/1208711)
  • แก้ไขปัญหาที่ FragmentManager.findFragment() ไม่ทำงานกับส่วนที่เพิ่มผ่านแท็ก <fragment> (b/147784323)
  • ตอนนี้ Fragment ที่ขยายโดยใช้แท็ก <fragment> จะได้รับการเรียกใช้ onInflate() ก่อน onCreate() เสมอเมื่ออยู่ในเลย์เอาต์ (aosp/1215856)
  • การเรียก toString() ในอินสแตนซ์ FragmentManager จะไม่ทำให้เกิด NullPointerException อีกต่อไปเมื่อ Activity ถูกทำลายไปแล้ว (b/148189412)

การเปลี่ยนแปลงทรัพยากร Dependency

เวอร์ชัน 1.2.0

เวอร์ชัน 1.2.0

22 มกราคม 2020

androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0 และ androidx.fragment:fragment-testing:1.2.0 เปิดตัวแล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.1.0

  • FragmentContainerView: FragmentContainerView เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก ซึ่งจะแทนที่การใช้ FrameLayout หรือเลย์เอาต์อื่นๆ นอกจากนี้ยังรองรับ class, android:name และ android:tag ที่ไม่บังคับเดียวกันกับแท็ก <fragment> แต่ใช้ FragmentTransaction ปกติเพื่อเพิ่มส่วนย่อยเริ่มต้นนี้แทนเส้นทางโค้ดที่กำหนดเองซึ่ง <fragment> ใช้
  • onDestroyView()เวลา: ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวขาออก การเปลี่ยนเฟรมเวิร์กขาออก และการเปลี่ยน AndroidX ขาออก (เมื่อใช้ Transition 1.3.0) เสร็จสมบูรณ์ก่อนที่จะเรียก onDestroyView()
  • อิงตามคลาส add() และ replace(): เพิ่มการโอเวอร์โหลดใหม่ของ add() และ replace() ใน FragmentTransaction ที่ใช้ Class<? extends Fragment> และอาร์กิวเมนต์ Bundle ที่ไม่บังคับ วิธีการเหล่านี้ใช้ FragmentFactory เพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่น fragmentTransaction.replace<YourFragment>(R.id.container)) ลงใน fragment-ktx ด้วย
  • การผสานรวม Lifecycle ViewModel SavedState: ตอนนี้ SavedStateViewModelFactory เป็น Factory เริ่มต้นที่ใช้เมื่อใช้ by viewModels(), by activityViewModels(), เครื่องมือสร้าง ViewModelProvider หรือ ViewModelProviders.of() กับ Fragment
  • การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated()
  • getFragmentManager()การเลิกใช้งาน: เราได้เลิกใช้งานเมธอด getFragmentManager() และ requireFragmentManager() ใน Fragment แล้ว และแทนที่ด้วยเมธอด getParentFragmentManager() เดียว ซึ่งจะส่งคืน FragmentManager ที่ไม่ใช่ Null ที่เพิ่ม Fragment เข้าไป (คุณใช้ isAdded() เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่)
  • การเลิกใช้งานFragmentManager.enableDebugLogging(): เราได้เลิกใช้งานเมธอดแบบคงที่ FragmentManager.enableDebugLogging แล้ว ตอนนี้ FragmentManager จะใช้ Log.isLoggable() สำหรับแท็ก FragmentManager ซึ่งช่วยให้คุณเปิดใช้การบันทึก DEBUG หรือ VERBOSE ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง

ปัญหาที่ทราบ

  • ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์ class หรือ android:name ใน FragmentContainerView โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎ keep สำหรับคลาส Fragment แต่ละคลาสด้วยตนเอง (b/142601969)
  • เมื่อเพิ่ม NavHostFragment โดยใช้ class หรือ android:name ใน XML ที่มี FragmentContainerView คุณจะใช้ findNavController() ใน onCreate() ของกิจกรรมไม่ได้ (b/142847973)

เวอร์ชัน 1.2.0-rc05

8 มกราคม 2020

androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05 และ androidx.fragment:fragment-testing:1.2.0-rc05 เปิดตัวแล้ว เวอร์ชัน 1.2.0-rc05 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยใน Fragment 1.2.0-rc04 เมื่อใช้แท็ก <fragment> ซึ่งทำให้มีการเรียกใช้ onViewCreated() อย่างไม่ถูกต้องในระหว่างการทำลายกิจกรรม (b/146290333)
  • ตอนนี้ระบบจะล้างส่วนที่เพิ่มด้วยแท็ก <fragment> อย่างถูกต้องแม้ว่าบางครั้งจะอยู่ในเลย์เอาต์เท่านั้น (เช่น อยู่ในเลย์เอาต์แนวนอนเท่านั้น) ด้วยเหตุนี้ ตอนนี้ระบบจึงย้าย Fragment เหล่านี้ไปยัง CREATED อย่างถูกต้องแม้ว่าจะไม่ได้อยู่ในเลย์เอาต์ก็ตาม แทนที่จะสร้างอินสแตนซ์แต่ไม่เคยย้ายผ่านเมธอดวงจรของ Fragment (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 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขการเปลี่ยนแปลงลักษณะการทำงานโดยไม่ตั้งใจซึ่ง Fragment ที่ถูกนำออกไปแล้วยังคงแสดงผลโดย findFragmentById() / findFragmentByTag() ขณะที่ภาพเคลื่อนไหว/การเปลี่ยนฉากขาออกทำงานอยู่ (b/143982969, aosp/1167585)
  • ตอนนี้ระบบจะหยุด Fragment ของบุตรหลานอย่างถูกต้องก่อน Fragment ของผู้ปกครองเมื่อกิจกรรมที่มี Fragment ของบุตรหลานเรียกใช้ onSaveInstanceState() (b/144380645)
  • แก้ไขปัญหาที่ระบบทำเครื่องหมายว่ามุมมองไม่ถูกต้อง INVISIBLE หลังจากป๊อป Fragment ที่ซ่อนอยู่ (b/70793925)
  • ตอนนี้การเปลี่ยนภาพองค์ประกอบที่ใช้ร่วมกันของ Fragment จะจัดการ View ที่หมุน ปรับขนาด ฯลฯ ได้แล้ว (b/142835261)

การอัปเดตเอกสารประกอบ

  • ปรับปรุงเอกสารการเลิกใช้งานเกี่ยวกับ setUserVisibleHint() (b/143897055)
  • ปรับปรุงเอกสารประกอบเกี่ยวกับ setFragmentFactory() และ getFragmentFactory() เพื่อระบุให้ดียิ่งขึ้นว่าการตั้งค่า FragmentFactory จะส่งผลต่อ FragmentManager ของ Fragment ย่อยด้วย (aosp/1170095)

การเปลี่ยนแปลงทรัพยากร Dependency

  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 และ Activity 1.1.0-rc03

เวอร์ชัน 1.2.0-rc02

7 พฤศจิกายน 2019

androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02 และ androidx.fragment:fragment-testing:1.2.0-rc02 เปิดตัวแล้ว เวอร์ชัน 1.2.0-rc02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • เมื่ออยู่ใน Kotlin ตอนนี้ LintFix สำหรับการใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated() (เปิดตัวใน Fragment 1.2.0-rc01) จะใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ Kotlin viewLifecycleOwner แทน getViewLifecycleOwner() (aosp/1143821)

เวอร์ชัน 1.2.0-rc01

23 ตุลาคม 2019

androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01 และ androidx.fragment:fragment-testing:1.2.0-rc01 เปิดตัวแล้ว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentContainerView รองรับแอตทริบิวต์ class นอกเหนือจาก android:name แล้ว ซึ่งเป็นการจำลองฟังก์ชันการทำงานของแท็ก <fragment> (b/142722242)
  • เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated() (b/137122478)

แก้ไขข้อบกพร่อง

  • ตอนนี้ Callback onDismiss และ onCancel ใน DialogFragment รับประกันว่า DialogInterface ที่ส่งไปยัง Callback เหล่านี้จะไม่ใช่ค่า Null และ getDialog() จะแสดงผลค่าที่ไม่ใช่ Null เมื่อมีการเรียกใช้ (b/141974033)
  • FragmentContainerView จะเพิ่ม Fragment ที่กำหนดโดย class หรือ android:name เป็นส่วนหนึ่งของการขยาย เพื่อให้มั่นใจว่า findFragmentById() และ findFragmentByTag() จะทำงานได้ทันทีหลังจากนั้น (b/142520327)
  • แก้ไข IllegalStateException ใน FragmentContainerView เนื่องจากมีการบันทึกสถานะ (b/142580713)
  • แก้ไข UnsupportedOperationException ใน FragmentContainerView เมื่อมีการปกปิดโค้ดของคลาส FragmentContainerView (b/142657034)

ปัญหาที่ทราบ

  • ProGuard จะไม่เก็บ Fragment ที่อ้างอิงผ่านแอตทริบิวต์ class หรือ android:name ใน FragmentContainerView โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎ keep สำหรับคลาส Fragment แต่ละคลาสด้วยตนเอง เราได้ปิดใช้กฎ Lint ที่แนะนำให้ย้ายไปใช้ FragmentContainerView จนกว่าจะมีการแก้ไขผ่าน aapt2 (b/142601969)

เวอร์ชัน 1.2.0-beta02

11 ตุลาคม 2019

androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02 และ androidx.fragment:fragment-testing:1.2.0-beta02 เปิดตัวแล้ว เวอร์ชัน 1.2.0-beta02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ onInflate() ของ Fragment ไม่ได้รับแอตทริบิวต์ที่เหมาะสมจาก FragmentContainerView ซึ่งทำให้เกิดกรณีที่ใช้งานไม่ได้ เช่น NavHostFragment (b/142421837)

เวอร์ชัน 1.2.0-beta01

9 ตุลาคม 2019

androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01 และ androidx.fragment:fragment-testing:1.2.0-beta01 เปิดตัวแล้ว เวอร์ชัน 1.2.0-beta01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • FragmentContainerView เพิ่มการรองรับการเพิ่ม Fragment เริ่มต้นพร้อมการรองรับเพิ่มเติมสำหรับแอตทริบิวต์ XML android:name และ android:tag ที่ไม่บังคับ FragmentContainerView ใช้ FragmentTransaction ปกติเบื้องหลังเพื่อเพิ่ม Fragment เริ่มต้น ซึ่งช่วยให้ดำเนินการ FragmentTransaction เพิ่มเติมใน FragmentContainerView ได้ และเปิดใช้การใช้ View Binding สำหรับเลย์เอาต์<fragment> (b/139830628, b/141177981)
  • ตอนนี้ Fragment มีคำเตือนของ Lint ซึ่งเสนอวิธีแก้ไขด่วนเพื่อแทนที่ <fragment> ด้วย FragmentContainerView (b/139830056)

แก้ไขข้อบกพร่อง

  • แก้ไขClassCastExceptionเมื่อใช้androidx.transition (b/140680619)
  • เมื่อใช้ Transition 1.3.0-beta01 ตอนนี้ Fragment จะรอให้ทรานซิชัน androidx.transition เสร็จสิ้น (นอกเหนือจากทรานซิชันและภาพเคลื่อนไหวของเฟรมเวิร์ก ซึ่งได้รับการแก้ไขใน Fragment 1.2.0-alpha03 และ Fragment 1.2.0-alpha02 ตามลำดับ) ก่อนที่จะส่ง onDestroyView() (aosp/1119841)
  • เมื่อใช้ Transition 1.3.0-beta01 ตอนนี้ Fragment จะยกเลิกทรานซิชัน androidx.transition อย่างถูกต้องก่อนที่จะเริ่มทรานซิชัน / ภาพเคลื่อนไหวใหม่ในคอนเทนเนอร์เดียวกัน (aosp/1119841)
  • แก้ไขปัญหาใน API 17 และต่ำกว่าเมื่อใช้androidx.transitionการเปลี่ยนฉากในมุมมองรากของ Fragment เมื่อใช้ FragmentContainerView (b/140361893)
  • ตอนนี้อาร์ติแฟกต์ fragment-testing ขึ้นอยู่กับ AndroidX Test 1.2.0 แล้ว ซึ่งแก้ไขปัญหาความไม่เข้ากันกับ Espresso 3.2.0 เวอร์ชันล่าสุด (b/139100149)
  • นำการใช้งาน Log.w ใน FragmentManager ออกแล้ว (aosp/1126468)

ปัญหาที่ทราบ

  • onInflate() ของ Fragment ไม่ได้รับแอตทริบิวต์ที่เหมาะสมจาก FragmentContainerView ซึ่งทำให้เกิดกรณีที่ใช้งานไม่ได้ เช่น NavHostFragment (b/142421837)

เวอร์ชัน 1.2.0-alpha04

18 กันยายน 2019

androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04 และ androidx.fragment:fragment-testing:1.2.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 1.2.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เมธอด getFragmentManager() และ requireFragmentManager() ใน Fragment ถูกเลิกใช้งานแล้วและแทนที่ด้วยเมธอด getParentFragmentManager() เดียว ซึ่งจะแสดงผล FragmentManager ที่ไม่ใช่ค่าว่างซึ่งมีการเพิ่ม Fragment (คุณใช้ isAdded() เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่) (b/140574496)
  • เลิกใช้เมธอด FragmentManager.enableDebugLogging แบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้ Log.isLoggable() สำหรับแท็ก FragmentManager แล้ว ซึ่งช่วยให้คุณเปิดใช้การบันทึก DEBUG หรือ VERBOSE ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง (aosp/1116591)

แก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะทำลาย Fragment อย่างถูกต้องในขณะที่ภาพเคลื่อนไหวขาออกใน Fragment อื่นๆ กำลังทำงานอยู่ (b/140574199)
  • แก้ไขปัญหาที่ Fragment จะเรียกใช้ Activity.findViewById() ในกรณีที่ก่อนหน้านี้ไม่ได้เรียกใช้ (aosp/1116431)

เวอร์ชัน 1.2.0-alpha03

5 กันยายน 2019

androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 และ androidx.fragment:fragment-testing:1.2.0-alpha03 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลง API

  • FragmentContainerView เปลี่ยนชื่อเป็น final แล้ว (b/140133091)

แก้ไขข้อบกพร่อง

  • ตอนนี้ FragmentContainerView จะกลับลำดับการวาดได้อย่างถูกต้องเมื่อนำ Fragment ออกจาก Back Stack (b/139104187)
  • แก้ไขปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งป๊อป Fragment และเพิ่ม Fragment ใหม่พร้อมกัน (b/111659726)
  • ตอนนี้ Fragment จะรอให้การเปลี่ยนผ่านเสร็จสิ้น (นอกเหนือจากภาพเคลื่อนไหว ซึ่งได้รับการแก้ไขใน Fragment 1.2.0-alpha02) ก่อนที่จะส่ง onDestroyView() (b/138741697)

เวอร์ชัน 1.2.0-alpha02

7 สิงหาคม 2019

androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 และ androidx.fragment:fragment-testing:11.2.0-alpha02 ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ขณะนี้ SavedStateViewModelFactory เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้ by viewModels(), by activityViewModels(), ตัวสร้าง ViewModelProvider หรือ ViewModelProviders.of() ที่มี Fragment (b/135716331)
  • ภาพเคลื่อนไหวเริ่มต้นเมื่อใช้ TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADE กับ setTransition ใน FragmentTransaction ได้รับการอัปเดตให้ตรงกับภาพเคลื่อนไหวที่กิจกรรมใช้ในอุปกรณ์ Android 10 (aosp/1012812, aosp/1014730)

การเปลี่ยนแปลง API

  • เปิดตัว FragmentContainerView เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก โดยแทนที่การใช้งาน FrameLayout ฯลฯ เนื่องจากจะแก้ไขปัญหาการจัดลำดับ Z ของภาพเคลื่อนไหวและการส่งการแทรกหน้าต่างไปยัง Fragment (b/37036000, aosp/985243, b/136494650)
  • เพิ่มเมธอด FragmentManager.findFragment(View) แบบคงที่เพื่อดึงข้อมูล Fragment ที่มีจากมุมมองที่ Fragment ขยาย นอกจากนี้ ยังมีส่วนขยาย Kotlin ใน fragment-ktx ด้วย (aosp/1090757)
  • เพิ่มการโอเวอร์โหลดใหม่ของ add() และ replace() ใน FragmentTransaction ที่ใช้ Class<? extends Fragment> และอาร์กิวเมนต์ Bundle ที่ไม่บังคับ วิธีการเหล่านี้ใช้ FragmentFactory เพื่อสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม นอกจากนี้ เรายังได้เพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ทำให้เป็นจริง (เช่น fragmentTransaction.replace<YourFragment>(R.id.container)) ลงใน fragment-ktx ด้วย (b/126124987)
  • เพิ่มคำอธิบายประกอบ @MainThread ลงในFragmentการเรียกกลับของวงจร (b/127272564)
  • API ที่เกี่ยวข้องกับชื่อเบรดคัมบ์ใน FragmentTransaction และ FragmentManager.BackStackEntry เลิกใช้งานแล้ว (b/138252944)
  • เลิกใช้เมธอด setTransitionStyle ใน FragmentTransaction แล้ว (aosp/1011537)
  • เมธอดหลายรายการใน FragmentManager ไม่abstract อีกต่อไป FragmentManager ยังคงเป็น abstract และไม่ควรสร้างอินสแตนซ์หรือขยายโดยตรง คุณควรรับอินสแตนซ์ที่มีอยู่จาก getSupportFragmentManager(), getChildFragmentManager() ฯลฯ ต่อไป

แก้ไขข้อบกพร่อง

  • จาก Fragment 1.1.0-rc04: ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858)
  • จาก Fragment 1.1.0-rc03: แก้ปัญหาที่การเรียกใช้ postponeEnterTransition() ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)
  • จาก Fragment 1.1.0-rc02: แก้ไขข้อขัดข้องใน FragmentPagerAdapter และ FragmentStatePagerAdapter เมื่อนำรายการปัจจุบันออก (b/137209870)
  • ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง onDestroyView() (b/136110528)
  • ตอนนี้ระบบจะจัดการภาพเคลื่อนไหวของ Fragment จาก Fragment ย่อยและ Fragment ที่สืบทอดมาอย่างถูกต้องเมื่อสร้างภาพเคลื่อนไหวของ Fragment หลัก (b/116675313)
  • แก้ไข NullPointerException เมื่อใช้การเปลี่ยนองค์ประกอบที่แชร์และรวมการดำเนินการป๊อปอัปและการเพิ่ม (b/120507394)
  • เพิ่มวิธีแก้ปัญหาชั่วคราวสำหรับ IllegalStateException เมื่อใช้ FragmentPagerAdapter และ FragmentStatePagerAdapter ในการทดสอบ Robolectric (b/137201343)

เวอร์ชัน 1.2.0-alpha01

2 กรกฎาคม 2019

androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 และ androidx.fragment:fragment-testing:1.2.0-alpha01 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ FragmentManager จะเรียกใช้ requestApplyInsets() หลังจากแนบมุมมองของ Fragment และก่อนเรียกใช้ onViewCreated() โดยตรง เพื่อให้มั่นใจว่ามุมมองของคุณจะมีระยะขอบที่ถูกต้องเสมอ (b/135945162)

แก้ไขข้อบกพร่อง

  • แก้ไขNullPointerExceptionเมื่อเปิดFragmentTransactionที่ใช้ setPrimaryNavigationFragment() ก่อน replace() (b/134673465)

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0

5 กันยายน 2019

androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 และ androidx.fragment:fragment-testing:1.1.0 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0

  • fragment-testing: อาร์ติแฟกต์ fragment-testing มีคลาส FragmentScenario สำหรับทดสอบ Fragment แยกกัน ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการทดสอบ Fragment ของแอป
  • FragmentFactory: ตอนนี้คุณตั้งค่า FragmentFactory ใน FragmentManager เพื่อจัดการการสร้างอินสแตนซ์ของ Fragment ได้แล้ว ซึ่งจะช่วยลดข้อกำหนดที่เข้มงวดในการมีตัวสร้างที่ไม่มีอาร์กิวเมนต์
  • ตัวแทนพร็อพเพอร์ตี้ Kotlin สำหรับ ViewModel: อาร์ติแฟกต์ fragment-ktx มีตัวแทนพร็อพเพอร์ตี้ Kotlin 2 รายการ ได้แก่ by viewModels() สำหรับเข้าถึง ViewModel ที่เชื่อมโยงกับ Fragment แต่ละรายการ และ by activityViewModels() สำหรับเข้าถึง ViewModel ที่กำหนดขอบเขตไว้ในกิจกรรม
  • วงจรสูงสุด: ตอนนี้คุณตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้แล้วโดยเรียกใช้ setMaxLifecycle() ใน FragmentTransaction ซึ่งมาแทนที่ setUserVisibleHint() ที่เลิกใช้งานไปแล้ว FragmentPagerAdapter และ FragmentStatePagerAdapter มีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้
  • ตัวสร้าง FragmentActivity LayoutId: ตอนนี้คลาสย่อยของ FragmentActivity สามารถเรียกตัวสร้างใน FragmentActivity ที่ใช้รหัส R.layout ได้ ซึ่งระบุเลย์เอาต์ที่ควรตั้งค่าเป็นมุมมองเนื้อหาแทนการเรียก setContentView() ใน onCreate() การดำเนินการนี้จะไม่เปลี่ยนแปลงข้อกำหนดที่ว่าคลาสย่อยต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์
  • ตัวสร้าง Fragment LayoutId: ตอนนี้คลาสย่อยของ Fragment สามารถเรียกตัวสร้างใน Fragment ที่ใช้รหัส R.layout ได้โดยไม่บังคับ ซึ่งจะระบุเลย์เอาต์ที่ควรใช้สำหรับ Fragment นี้แทนการลบล้าง onCreateView() คุณกำหนดค่าเลย์เอาต์ที่ขยายได้ใน onViewCreated()
  • เลื่อนเวลาด้วยการหมดเวลา: มีการเพิ่มการโอเวอร์โหลดใหม่ของ postponeEnterTransition() ซึ่งใช้การหมดเวลา

เวอร์ชัน 1.1.0-rc04

7 สิงหาคม 2019

androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 และ androidx.fragment:fragment-testing:1.1.0-rc04 ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • ตอนนี้ Fragment จะยกเลิกการเปลี่ยนฉากที่เลื่อนออกไปได้อย่างถูกต้องเมื่อมีการป๊อป Fragment (b/138251858)

เวอร์ชัน 1.1.0-rc03

19 กรกฎาคม 2019

androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 และ androidx.fragment:fragment-testing:1.1.0-rc03 ออกอากาศแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่การเรียกใช้ postponeEnterTransition() ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้า (b/137797118)

เวอร์ชัน 1.1.0-rc02

17 กรกฎาคม 2019

androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 และ androidx.fragment-testing:fragment:1.1.0-rc02 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • แก้ไขข้อขัดข้องใน FragmentPagerAdapter และ FragmentStatePagerAdapter เมื่อนำรายการปัจจุบันออก (b/137209870)

เวอร์ชัน 1.1.0-rc01

2 กรกฎาคม 2019

androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01 และ androidx.fragment:fragment-testing:1.1.0-rc01 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • ตอนนี้ฟร็อกเมนต์จะอัปเดตระดับการมองเห็นอย่างถูกต้องเมื่อใช้การดำเนินการ show() หรือ hide() ขณะที่การเปลี่ยนฉากกำลังทำงานอยู่ (b/133385058)
  • แก้ไขNullPointerExceptionเมื่อเปิดFragmentTransactionที่ใช้ setPrimaryNavigationFragment() ก่อน replace() (b/134673465)

เวอร์ชัน 1.1.0-beta01

5 มิถุนายน 2019

androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01 และ androidx.fragment:fragment-testing:1.1.0-beta01 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

แก้ไขข้อบกพร่อง

  • ตอนนี้ androidx.lifecycle.Lifecycle การเรียกกลับ (ที่เกี่ยวข้องกับ STARTED, RESUMED, PAUSED, STOPPED และ DESTROYED โดยเฉพาะ) สำหรับ Fragment ที่ซ้อนกันจะซ้อนกันอย่างถูกต้องแล้ว (b/133497591)
  • ตอนนี้อินสแตนซ์ OnBackPressedCallback ที่ลงทะเบียนใน onCreate() ของ Fragment จะมีความสำคัญสูงกว่า FragmentManager ของ Fragment ย่อยอย่างเหมาะสม (b/133175997)
  • ระบบจะไม่แสดงภาพเคลื่อนไหวของ Fragment ย่อยอีกต่อไปเมื่อมีการแทนที่ Fragment หลัก (b/121017790)
  • ตอนนี้ระบบจะไม่สนใจภาพเคลื่อนไหวและการเปลี่ยนฉากของ Fragment เมื่อใช้ animateLayoutChanges="true" ซึ่งจะช่วยแก้ไขปัญหาที่ Fragment ไม่ถูกทำลายอย่างถูกต้อง (b/116257087)

เวอร์ชัน 1.1.0-alpha09

16 พฤษภาคม 2019

androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09 และ androidx.fragment:fragment-testing:1.1.0-alpha09 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลง API

  • ตอนนี้ Fragment จะได้รับการเรียกกลับไปยังเมธอด onPrimaryNavigationFragmentChanged(boolean) ใหม่เมื่อ Fragment การนำทางหลักมีการเปลี่ยนแปลง aosp/960857

แก้ไขข้อบกพร่อง

  • ตอนนี้ระบบจะนำรายการเมนูที่ Fragment ย่อยขยายออกไปออกอย่างถูกต้องเมื่อนำ Fragment หลักออก b/131581013

เวอร์ชัน 1.1.0-alpha08

7 พฤษภาคม 2019

androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 และ androidx.fragment:fragment-testing:1.1.0-alpha08 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

รุ่นนี้ใช้ร่วมกับ Preferences 1.1.0-alpha01 ถึง 1.1.0-alpha04 ไม่ได้ โปรดอัปเกรดเป็น Preferences 1.1.0-alpha05 เมื่อใช้ Fragment เวอร์ชันนี้

ฟีเจอร์ใหม่

  • เพิ่มการโอเวอร์โหลดใหม่ของ postponeEnterTransition() ที่ใช้การหมดเวลา หลังจากนั้น Fragment จะเรียกใช้ startPostponedEnterTransition() โดยอัตโนมัติ b/120803208

การเปลี่ยนแปลง API

  • การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ระบบได้นำเมธอด FragmentFactory instantiate ที่เลิกใช้งานไปก่อนหน้านี้ซึ่งรับ Bundle ออกแล้ว aosp/953856
  • การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: เปลี่ยนชื่อค่าคงที่ RESUME_ONLY_CURRENT_FRAGMENT และ USE_SET_USER_VISIBLE_HINT ใน FragmentPagerAdapter และ FragmentStatePagerAdapter เป็น BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT และ BEHAVIOR_SET_USER_VISIBLE_HINT ตามลำดับ aosp/954782

แก้ไขข้อบกพร่อง

  • Fragment ที่มีวงจรจำกัดผ่าน setMaxLifecycle() จะไม่กลับมาทำงานต่อก่อนที่จะถึงสถานะสุดท้ายอีกต่อไป b/131557151
  • เมื่อใช้ setMaxLifecycle(Lifecycle.State.CREATED) ระบบจะทำลายมุมมองของ Fragment อย่างถูกต้อง aosp/954180

เวอร์ชัน 1.1.0-alpha07

25 เมษายน 2019

androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07 และ androidx.fragment:fragment-testing:1.1.0-alpha07 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้คุณสามารถตั้งค่าสถานะวงจรสูงสุดสำหรับ Fragment ได้โดยเรียกใช้ setMaxLifecycle() ใน FragmentTransaction ซึ่งมาแทนที่ setUserVisibleHint() ที่เลิกใช้งานไปแล้ว FragmentPagerAdapter และ FragmentStatePagerAdapter มีเครื่องมือสร้างใหม่ที่ช่วยให้คุณเปลี่ยนไปใช้ลักษณะการทำงานใหม่ได้ (b/129780800)

การเปลี่ยนแปลง API

  • moveToState(STARTED) ใน FragmentScenario จะเรียกใช้ได้ในอุปกรณ์ที่ใช้ API 24 ขึ้นไปเท่านั้น (b/129880016)

การเปลี่ยนแปลงพฤติกรรม

  • จาก (b/129907905) เศษส่วนใน Back Stack จะไม่ได้รับการเรียกกลับไปยัง onCreateView() เมื่อมีการสร้างกิจกรรมโฮสติ้งขึ้นใหม่ ตอนนี้ระบบจะเรียกใช้ onCreateView() เมื่อ Fragment ปรากฏเท่านั้น (กล่าวคือ มีการนำ Back Stack ออก)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเมื่อใช้แท็ก <fragment> ใน XML และตัวสร้าง contentLayoutId ของ FragmentActivity หรือ AppCompatActivity (b/129907905)
  • แก้ไขปัญหาที่ระบบจะไม่ย้าย Fragment ใน Back Stack ไปยัง CREATED อย่างน้อยหลังจากเปลี่ยนการกำหนดค่า ซึ่งทำให้ ViewModel และ Fragment ย่อยที่เก็บไว้ไม่ได้รับการกำจัดอย่างถูกต้อง (b/129593351)
  • แก้ไขข้อขัดข้องใน restoreSaveState ซึ่งเกิดจากการซิงค์ข้อมูลที่ไม่ตรงกันของ Fragment ที่เก็บไว้หลังจากบันทึกสถานะอินสแตนซ์แล้ว (b/130433793) (aosp/947824)
  • แก้ไขปัญหาที่ระบบจะไม่เรียกใช้ OnBackPressedCallback ที่เพิ่มด้วยวงจร Fragment หาก FragmentManager มี Back Stack ดูรายละเอียดเพิ่มเติมได้ที่ androidx.activity 1.0.0-alpha07 (aosp/948209)
  • Fragment จะไม่บังคับใช้ LAYER_TYPE_HARDWARE สำหรับภาพเคลื่อนไหวอีกต่อไป หากต้องการภาพเคลื่อนไหวเลเยอร์ฮาร์ดแวร์โดยเฉพาะ โปรดตั้งค่าเป็นส่วนหนึ่งของภาพเคลื่อนไหว (b/129486478)

เวอร์ชัน 1.1.0-alpha06

3 เมษายน 2019

androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06 และ androidx.fragment:fragment-testing:1.1.0-alpha06 เปิดตัวแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ข้อยกเว้นที่ FragmentManager สร้างขึ้นจะมีชื่อของ Fragment ในข้อความด้วย (b/67759402)

การเปลี่ยนแปลง API

  • Fragment และ FragmentActivity มีตัวสร้างที่ 2 ซึ่งใช้ @LayoutRes int ซึ่งจะแทนที่ลักษณะการทำงานก่อนหน้าในการใส่คำอธิบายประกอบคลาสด้วย @ContentView แนวทางนี้ใช้ได้ทั้งในโมดูลแอปและโมดูลไลบรารี (b/128352521)
  • ตอนนี้ onActivityResult() ของ FragmentActivity มีการทำเครื่องหมายเป็น @CallSuper อย่างถูกต้องแล้ว (b/127971684)
  • เราเลิกใช้งานเมธอด instantiate ของ FragmentFactory ที่รับอาร์กิวเมนต์ Bundle แล้ว และแอปควรใช้โอเวอร์โหลด instantiate ใหม่ที่ไม่รับ Bundle (b/128836103)
  • ตอนนี้มีการใส่คำอธิบายประกอบเมธอด FragmentScenario อย่างถูกต้องด้วย @StyleRes แล้ว (aosp/924193)
  • FragmentTabHost เลิกใช้งานแล้ว (b/127971835)
  • ระบบได้นำ getThemedContext() ของ FragmentActivity ออกแล้ว (aosp/934078)

แก้ไขข้อบกพร่อง

  • แก้ไขการถดถอยใน 1.1.0-alpha05 ที่ทำให้ Fragment ขาเข้ากะพริบบนหน้าจอ (b/129405432)
  • แก้ไขปัญหาที่ส่วนการนำทางหลักจะหายไปหลังจากชุดการดำเนินการ popBackStack+replace+popBackStack (b/124332597)
  • แก้ไขปัญหาเมื่อใช้@ContentViewตัวสร้างในกิจกรรมเมื่อกู้คืนสถานะ Fragment (b/127313094)
  • แก้ไขตรรกะของ setTargetFragment() เมื่อแทนที่ Fragment เป้าหมายที่มีอยู่ด้วย Fragment ที่ยังไม่ได้แนบกับ FragmentManager (aosp/932156)

เวอร์ชัน 1.1.0-alpha05

13 มีนาคม 2019

androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05 และ androidx.fragment:fragment-testing:1.1.0-alpha05 เปิดตัวแล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ตอนนี้ระบบจะแคชการค้นหาคำอธิบายประกอบ @ContentView แล้ว (b/123709449)

การเปลี่ยนแปลงพฤติกรรม

  • การเรียก remove(), hide(), show(), detach() และ setPrimaryNavigationFragment() โดยแนบ Fragment กับ FragmentManager อื่นจะทำให้เกิด IllegalStateException แทนที่จะล้มเหลวโดยไม่มีการแจ้งเตือน (aosp/904301)

แก้ไขข้อบกพร่อง

  • onNewIntentสำหรับ FragmentActivity มีการทำเครื่องหมายอย่างถูกต้องด้วย @CallSuper (b/124120586) แล้ว
  • แก้ไขปัญหาที่อาจมีการเรียกใช้ onDismiss() ของ DialogFragment 2 ครั้งเมื่อใช้ getDialog().dismiss() หรือ getDialog().cancel() (b/126563750)

เวอร์ชัน 1.1.0-alpha04

7 กุมภาพันธ์ 2019

androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 และ androidx.fragment:fragment-testing 1.1.0-alpha04 เปิดตัวแล้ว

ฟีเจอร์ใหม่

  • เพิ่มการรองรับคำอธิบายประกอบคลาส @ContentView ที่ช่วยให้คุณระบุได้ว่าควรขยายไฟล์ XML ของเลย์เอาต์ใดแทนการลบล้าง onCreateView() เราขอแนะนำให้ดูงานที่เกี่ยวข้องใน onViewCreated() (aosp/837619)
  • fragment-testing ตอนนี้ขึ้นอยู่กับ androidx.test:core-ktx 1.1.0 แบบเสถียร (b/121209673)
  • ตอนนี้คุณใช้ openActionBarOverflowOrOptionsMenu กับ FragmentScenario เพื่อทดสอบเมนูตัวเลือกที่โฮสต์ Fragment (b/121126668) ได้แล้ว

การเปลี่ยนแปลง API

  • เพิ่มเมธอด requireArguments() ซึ่งจะแสดงผล @NonNull Bundle หรือส่ง IllegalStateException (b/121196360)
  • เพิ่มหมายเหตุว่าไม่ควรลบล้าง getLifecycle(), getViewLifecycleOwner() และ getViewLifecycleOwnerLiveData() และจะมีการกำหนดค่าเหล่านี้เป็นค่าสุดท้ายในรุ่นต่อๆ ไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างเมธอดนี้ (aosp/880714)
  • เพิ่มหมายเหตุว่าไม่ควรลบล้าง getViewModelStore() และจะถือเป็นค่าสุดท้ายในรุ่นต่อๆ ไป โปรดส่งคำขอฟีเจอร์หากคุณกำลังลบล้างเมธอดนี้ (aosp/880713)
  • แก้ไขปัญหาความเข้ากันได้แบบไบนารีกับ Fragment รุ่นก่อนหน้า (aosp/887877) (aosp/889834)

แก้ไขข้อบกพร่อง

  • ระบบจะล้างข้อมูลที่อยู่ในส่วนเป้าหมายอย่างถูกต้องเมื่อคุณส่ง null ไปยัง setTargetFragment() (aosp/849969)
  • แก้ไขปัญหาที่บางครั้ง Fragment เป้าหมายไม่พร้อมใช้งานในหรือหลัง onDestroy() (b/122312935)
  • ตอนนี้ระบบจะเรียกใช้ onDismiss() ของ DialogFragment ก่อน onDestroy() (aosp/874133) (aosp/890734)

เวอร์ชัน 1.1.0-alpha03

17 ธันวาคม 2018

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment ใช้ BundleSavedStateRegistryOwner และขึ้นอยู่กับไลบรารี SavedState ที่เพิ่งเปิดตัว [aosp/824380]
  • เพิ่มby activityViewModelsตัวแทนพร็อพเพอร์ตี้ Kotlin เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับ Activity ที่มี [b/119050253]
  • เราได้ขยายby viewModelsตัวแทนพร็อพเพอร์ตี้ Kotlin เพื่อใช้เมธอด 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
  • ตอนนี้ Fragment ที่กู้คืนจากสถานะอินสแตนซ์ที่บันทึกไว้จะได้รับ Bundle [b/119794496] ที่ไม่ใช่ค่าว่างเสมอ
  • Fragment ที่นำออกจะไม่นำออบเจ็กต์ Lifecycle มาใช้ซ้ำอีกต่อไปหากมีการเพิ่มอีกครั้ง [b/118880674]

เวอร์ชัน 1.1.0-alpha02

3 ธันวาคม 2018

ฟีเจอร์ใหม่

  • ตอนนี้ส่วนขยาย Kotlin ของ FragmentScenario ช่วยให้คุณใช้ Lambda ในการสร้าง Fragment แทนการส่งอินสแตนซ์ FragmentFactory ได้แล้ว (aosp/812913)

แก้ไขข้อบกพร่อง

  • แก้ไข IllegalStateException เมื่อใช้ Fragment ที่ซ้อนกันใน Back Stack (b/119256498)
  • แก้ไขการขัดข้องเมื่อใช้ FragmentScenario.recreate() กับ FragmentFactory (aosp/820540)
  • แก้ไขปัญหาที่เข้าถึง Fragment เป้าหมายไม่ได้หลังจากนำ Fragment ออกแล้ว (aosp/807634)

เวอร์ชัน 1.1.0-alpha01

5 พฤศจิกายน 2018

นี่คือรุ่นแรกของ fragment-testing อาร์ติแฟกต์และ FragmentScenario ซึ่งสร้างขึ้นจาก androidx.test:core APIs ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการทดสอบ Fragment

ฟีเจอร์ใหม่

  • คลาส FragmentScenario ใหม่สำหรับการทดสอบ Fragment แบบแยก
  • ตอนนี้คุณตั้งค่า FragmentFactory ใน FragmentManager ใดก็ได้เพื่อควบคุมวิธี การสร้างอินสแตนซ์ Fragment ใหม่
  • เพิ่ม by viewModels() Kotlin property delegate ใหม่สําหรับการดึงข้อมูล ViewModels จาก Fragment
  • ตอนนี้ระบบจะยกเลิกเหตุการณ์อินพุตที่รอดำเนินการ (เช่น การคลิก) ใน onStop() ของ Fragment

การเปลี่ยนแปลง API

  • ขยายคำอธิบายประกอบความสามารถในการเว้นว่างอย่างมากใน Fragment API surface

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ทำให้การดำเนินการ Fragment ล้มเหลวจากภายใน LiveData (b/77944637)

ปัญหาที่ทราบ

  • คุณจะเข้าถึง Target Fragment ไม่ได้หลังจากนำ Fragment ออกจาก FragmentManager แล้ว
  • fragment-testing ขึ้นอยู่กับ androidx.test:core:1.0.0-beta01 แทนที่จะเป็น androidx.test:core:1.0.0 ที่ถูกต้อง