ส่วนย่อย

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

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

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

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

ดึงดูด

dependencies {
    def fragment_version = "1.8.9"

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

Kotlin

dependencies {
    val fragment_version = "1.8.9"

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

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

ความคิดเห็น

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

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

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา

เวอร์ชัน 1.8

เวอร์ชัน 1.8.9

13 สิงหาคม 2025

androidx.fragment:fragment-*:1.8.9 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.9 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.8

4 มิถุนายน 2025

androidx.fragment:fragment-*:1.8.8 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.8 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.7

20 พฤษภาคม 2025

androidx.fragment:fragment-*:1.8.7 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.7 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.6

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

androidx.fragment:fragment-*:1.8.6 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.6 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.5

30 ตุลาคม 2024

androidx.fragment:fragment-*:1.8.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.5 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.4

2 ตุลาคม 2024

androidx.fragment:fragment-*:1.8.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.4 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.3

4 กันยายน 2024

androidx.fragment:fragment-*:1.8.3 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.3 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.2

24 กรกฎาคม 2024

androidx.fragment:fragment-*:1.8.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.2 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.1

26 มิถุนายน 2024

androidx.fragment:fragment-*:1.8.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.1 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.0

12 มิถุนายน 2024

androidx.fragment:fragment-*:1.8.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.0-rc01

29 พฤษภาคม 2024

androidx.fragment:fragment-*:1.8.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.0-beta01

14 พฤษภาคม 2024

androidx.fragment:fragment-*:1.8.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.0-alpha02

17 เมษายน 2024

androidx.fragment:fragment-*:1.8.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.8.0-alpha01

3 เมษายน 2024

androidx.fragment:fragment-*:1.8.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.8.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

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

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

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

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 1.7

เวอร์ชัน 1.7.1

14 พฤษภาคม 2024

androidx.fragment:fragment-*:1.7.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.1 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.7.0

1 พฤษภาคม 2024

androidx.fragment:fragment-*:1.7.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0 มีการคอมมิตเหล่านี้

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

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

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

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

Fragment Compose Artifact

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

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

  class ExampleFragment : Fragment() {

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

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

เวอร์ชัน 1.7.0-rc02

17 เมษายน 2024

androidx.fragment:fragment-*:1.7.0-rc02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-rc02 มีการเปลี่ยนแปลงเหล่านี้

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

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

เวอร์ชัน 1.7.0-rc01

3 เมษายน 2024

androidx.fragment:fragment-*:1.7.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 1.7.0-beta01

20 มีนาคม 2024

androidx.fragment:fragment-*:1.7.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-beta01 มีการคอมมิตเหล่านี้

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

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

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

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

เวอร์ชัน 1.7.0-alpha10

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

androidx.fragment:fragment-*:1.7.0-alpha10 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha10 มีคอมมิตต่อไปนี้

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

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

เวอร์ชัน 1.7.0-alpha09

24 มกราคม 2024

androidx.fragment:fragment-*:1.7.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha09 มีคอมมิตต่อไปนี้

Fragment Compose Artifact

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

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

class ExampleFragment : Fragment() {

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

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.7.0-alpha08

10 มกราคม 2024

androidx.fragment:fragment-*:1.7.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha08 มีคอมมิตเหล่านี้

ล้างข้อมูล

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

เวอร์ชัน 1.7.0-alpha07

29 พฤศจิกายน 2023

androidx.fragment:fragment-*:1.7.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha07 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.7.0-alpha06

4 ตุลาคม 2023

androidx.fragment:fragment-*:1.7.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha06 มีคอมมิตเหล่านี้

การอัปเดตการขึ้นต่อกัน

  • เราได้อัปเดต Fragment ให้ขึ้นอยู่กับ animateToStart API ใหม่ที่เพิ่มเข้ามาใน 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 แรกในสแต็กย้อนกลับของ Fragment Manager และทำให้ Activity เสร็จสิ้นเมื่อใช้การย้อนกลับของระบบผ่านการไปยังส่วนต่างๆ แบบ 3 ปุ่มหรือท่าทางสัมผัสการย้อนกลับที่คาดการณ์ได้ (I0664b, b/295231788)

เวอร์ชัน 1.7.0-alpha02

9 สิงหาคม 2023

androidx.fragment:fragment-*:1.7.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.7.0-alpha02 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.7.0-alpha01

7 มิถุนายน 2023

androidx.fragment:fragment-*:1.7.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชันนี้ได้รับการพัฒนาในสาขาภายใน

ฟีเจอร์ใหม่

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

เวอร์ชัน 1.6

เวอร์ชัน 1.6.2

1 พฤศจิกายน 2023

androidx.fragment:fragment-*:1.6.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.2 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.6.1

26 กรกฎาคม 2023

androidx.fragment:fragment-*:1.6.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.1 มีคอมมิตเหล่านี้

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

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

การอัปเดตการขึ้นต่อกัน

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

เวอร์ชัน 1.6.0

7 มิถุนายน 2023

androidx.fragment:fragment-*:1.6.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0 มีคอมมิตเหล่านี้

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

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

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

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

เวอร์ชัน 1.6.0-rc01

10 พฤษภาคม 2023

androidx.fragment:fragment-*:1.6.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-rc01 มีคอมมิตต่อไปนี้

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

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

เวอร์ชัน 1.6.0-beta01

19 เมษายน 2023

androidx.fragment:fragment-*:1.6.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-beta01 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.6.0-alpha09

5 เมษายน 2023

androidx.fragment:fragment-*:1.6.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha09 มีคอมมิตต่อไปนี้

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

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

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

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

เวอร์ชัน 1.6.0-alpha08

22 มีนาคม 2023

androidx.fragment:fragment-*:1.6.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha08 มีคอมมิตเหล่านี้

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

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

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

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

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 1.6.0-alpha07

8 มีนาคม 2023

androidx.fragment:fragment-*:1.6.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha07 มีคอมมิตต่อไปนี้

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

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

เวอร์ชัน 1.6.0-alpha06

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

androidx.fragment:fragment-*:1.6.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha06 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.6.0-alpha05

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

androidx.fragment:fragment-*:1.6.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.6.0-alpha04

7 ธันวาคม 2022

androidx.fragment:fragment-*:1.6.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.6.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha03

5 ตุลาคม 2022

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha02

24 สิงหาคม 2022

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

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

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

เวอร์ชัน 1.6.0-alpha01

27 กรกฎาคม 2022

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

การอัปเดตการขึ้นต่อกัน

รุ่น 1.5

เวอร์ชัน 1.5.7

19 เมษายน 2023

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

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

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

เวอร์ชัน 1.5.6

22 มีนาคม 2023

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

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

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

เวอร์ชัน 1.5.5

7 ธันวาคม 2022

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

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

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

เวอร์ชัน 1.5.4

24 ตุลาคม 2022

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

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

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

เวอร์ชัน 1.5.3

21 กันยายน 2022

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

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

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

รุ่น 1.5.2

10 สิงหาคม 2022

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

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

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

รุ่น 1.5.1

27 กรกฎาคม 2022

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

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

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

การอัปเดตการขึ้นต่อกัน

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

เวอร์ชัน 1.5.0

29 มิถุนายน 2022

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

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

  • การผสานรวม CreationExtras - ตอนนี้ Fragment สามารถระบุ ViewModelProvider.Factory แบบไม่มีสถานะผ่าน Lifecycle 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 ที่กำหนดเอง แทนที่จะใช้โรงงานของ Fragment เสมอ (I56170, b/214106513)
  • แก้ไขข้อขัดข้องเมื่อเข้าถึง ViewModel เป็นครั้งแรกจากแฮนเดิลการเรียกกลับ registerForActivityResult() ของ Fragment (Iea2b3)

เวอร์ชัน 1.4

เวอร์ชัน 1.4.1

26 มกราคม 2022

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

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

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

เวอร์ชัน 1.4.0

17 พฤศจิกายน 2021

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

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

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

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

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

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

การย้อนกลับหลายครั้ง

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

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

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

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

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

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

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

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

เวอร์ชัน 1.4.0-rc01

3 พฤศจิกายน 2021

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

เวอร์ชัน 1.4.0-beta01

27 ตุลาคม 2021

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

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

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

เวอร์ชัน 1.4.0-alpha10

29 กันยายน 2021

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

Lint

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

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

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

เวอร์ชัน 1.4.0-alpha09

15 กันยายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha08

1 กันยายน 2021

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

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

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

เวอร์ชัน 1.4.0-alpha07

18 สิงหาคม 2021

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

เวอร์ชัน 1.4.0-alpha06

4 สิงหาคม 2021

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

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

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

เวอร์ชัน 1.4.0-alpha05

21 กรกฎาคม 2021

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

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

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

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 1.4.0-alpha04

30 มิถุนายน 2021

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha03

16 มิถุนายน 2021

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

ฟีเจอร์ใหม่

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

เวอร์ชัน 1.4.0-alpha02

2 มิถุนายน 2021

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

ฟีเจอร์ใหม่

  • ตอนนี้ FragmentStrictMode จะบันทึกการละเมิดเสมอเมื่อเปิดใช้การบันทึกผ่าน FragmentManager ไม่ว่านโยบายโหมดเข้มงวดที่ใช้อยู่จะเป็นอะไรก็ตาม (I02df6, b/187872638)
  • FragmentStrictMode ตอนนี้รองรับการยกเว้นFragmentบางชั้นเรียนจากViolationโหมดเข้มงวดแล้ว ซึ่งจะช่วยให้ชั้นเรียนนั้นหลีกเลี่ยงการลงโทษได้ (Ib4e5d, b/184786736)

  • เราได้ขยายFragmentStrictModeคลาส Violation เพื่อเพิ่มข้อมูลโครงสร้างตามการละเมิดแต่ละครั้ง ซึ่งจะช่วยให้คุณยืนยันได้อย่างชัดเจนว่าอะไรเป็นสาเหตุของการละเมิดพร้อมกับส่วนที่ละเมิด (If5118, b/187871150) โดยแต่ละ Violation จะมีข้อมูลต่อไปนี้

    • WrongFragmentContainerViolation มีViewGroupที่Fragmentพยายามเพิ่ม (I83c75, b/187871150)
    • TargetFragmentUsageViolationได้รับการขยายเป็น SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation และ GetTargetFragmentRequestCodeUsageViolation โดย SetTargetFragmentUsageViolation มีทั้งโค้ดคำขอและโค้ดส่วนเป้าหมาย (I741b4, b/187871150)
    • ตอนนี้ SetUserVisibleHintViolation มีค่าบูลีนที่ส่งไปยัง setUserVisibleHint() แล้ว (I00585, b/187871150)
    • FragmentTagUsageViolation มี ViewGroup ที่แท็ก <fragment> พยายามขยาย Fragment เข้าไป (I5dbbc, b/187871150)
    • FragmentReuseViolation ตอนนี้มี รหัสที่ไม่ซ้ำกันของอินสแตนซ์ก่อนหน้าของ Fragment ที่ทำให้เกิดการละเมิด (I0544d, b/187871150)
    • RetainInstanceUsageViolation ตอนนี้เป็น นามธรรมและมี 2 คลาสย่อย ได้แก่ SetRetainInstanceUsageViolation และ GetRetainInstanceUsageViolation ซึ่งแสดงถึง 2 กรณี สำหรับประเภทการละเมิด (Ic81e5, b/187871150)

การเปลี่ยนแปลงลักษณะการทำงาน

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

เวอร์ชัน 1.4.0-alpha01

18 พฤษภาคม 2021

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

ฟีเจอร์ใหม่

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

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

การย้อนกลับหลายครั้ง

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

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

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

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

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

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

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

StrictMode ของ Fragment

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

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

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

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

  • UseGetLayoutInflaterการตรวจสอบ Lint จะแสดงคำเตือนเมื่อใช้ LayoutInflater.from(Context) ภายใน DialogFragment - คุณควรใช้วิธี getLayoutInflater() ของ DialogFragment เสมอเพื่อให้ได้ LayoutInflater ที่เหมาะสม (#156, b/170781346)
  • DialogFragmentCallbacksDetectorการตรวจสอบ Lint จะแจ้งเตือนเมื่อเรียกใช้ setOnCancelListener หรือ setOnDismissListener ในเมธอด onCreateDialog() ของ DialogFragment ซึ่งเป็นเจ้าของ Listener เหล่านี้ และคุณควรลบล้าง onCancel() และ onDismiss() เพื่อรับการเรียกกลับเหล่านี้DialogFragment (#171, b/181780047, b/187524311)

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

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

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

เวอร์ชัน 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)

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 1.3.5

16 มิถุนายน 2021

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

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

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

เวอร์ชัน 1.3.4

18 พฤษภาคม 2021

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

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

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

เวอร์ชัน 1.3.3

21 เมษายน 2021

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

ฟีเจอร์ใหม่

  • ตอนนี้ SavedStateViewModelFactory ทำงานได้แล้ว เมื่อใช้กับ SavedStateRegistryOwner ที่ส่งคืนโดย ใช้ ViewTreeSavedStateRegistryOwner.get() กับ มุมมองของ Fragment (I21acf, b/181577191)

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

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

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

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

เวอร์ชัน 1.3.2

24 มีนาคม 2021

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

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

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

การอัปเดตการขึ้นต่อกัน

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

เวอร์ชัน 1.3.1

10 มีนาคม 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

การอัปเดตการขึ้นต่อกัน

เวอร์ชัน 1.3.0

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

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

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

  • State Manager ใหม่: การเขียนใหม่ภายในที่สำคัญของ FragmentManager ได้แก้ไขปัญหามากมายเกี่ยวกับการเรียกใช้เหตุการณ์วงจรการใช้งาน ภาพเคลื่อนไหวและการเปลี่ยนฉาก รวมถึงวิธีจัดการกับ Fragment ที่เลื่อนออกไป
  • การผสานรวม Activity Result API: เพิ่มการรองรับ API ActivityResultRegistry ที่เปิดตัวใน 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 ซึ่งใช้ได้กับส่วนลำดับชั้น (บน/ย่อย), DialogFragment และ Fragment ในการนำทาง และช่วยให้มั่นใจได้ว่าจะมีการส่งผลลัพธ์ไปยัง 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_ การเปลี่ยนแปลงภาพเคลื่อนไหว: ตอนนี้เอฟเฟกต์เริ่มต้นของ Fragment, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE จะใช้ Animator แทน Animation ตอนนี้ทรัพยากรที่ใช้สร้างภาพเคลื่อนไหวเหล่านี้เป็นแบบส่วนตัวแล้ว

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

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

เวอร์ชัน 1.3.0-rc02

27 มกราคม 2021

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

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

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

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

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

เวอร์ชัน 1.3.0-rc01

16 ธันวาคม 2020

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

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

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

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

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

เวอร์ชัน 1.3.0-beta02

2 ธันวาคม 2020

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

ฟีเจอร์ใหม่

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

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

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

เวอร์ชัน 1.3.0-beta01

1 ตุลาคม 2020

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

ฟีเจอร์ใหม่

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

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

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

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

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

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

เวอร์ชัน 1.3.0-alpha08

19 สิงหาคม 2020

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

New State Manager

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

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

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

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

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

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

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

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

เวอร์ชัน 1.3.0-alpha03

1 เมษายน 2020

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

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

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

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

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

การเปลี่ยนแปลงการขึ้นต่อกัน

  • Fragment ขึ้นอยู่กับ Activity 1.2.0-alpha03 ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result API ที่เปิดตัวใน 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)
  • แก้ไขปัญหาที่ระบบจะไม่สร้างชิ้นส่วนที่เก็บไว้ซึ่งเพิ่มหลังจากบันทึกสถานะอย่างต่อเนื่อง แล้วทำลายหลังจากเปลี่ยนการกำหนดค่าแต่ละครั้ง (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 ใหม่

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

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

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

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

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

เวอร์ชัน 1.2.1

เวอร์ชัน 1.2.1

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

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

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

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

การเปลี่ยนแปลงการขึ้นต่อกัน

เวอร์ชัน 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 ด้วย
  • การผสานรวม ViewModel ของ Lifecycle กับ SavedState: ตอนนี้ SavedStateViewModelFactory เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้ by viewModels(), by activityViewModels(), ตัวสร้าง ViewModelProvider หรือ ViewModelProviders.of() กับ Fragment
  • การตรวจสอบ Lint ใหม่: เพิ่มการตรวจสอบ Lint ใหม่เพื่อให้แน่ใจว่าคุณใช้ getViewLifecycleOwner() เมื่อสังเกต LiveData จาก onCreateView(), onViewCreated() หรือ onActivityCreated()
  • getFragmentManager()การเลิกใช้งาน: เราได้เลิกใช้งานเมธอด getFragmentManager() และ requireFragmentManager() ใน Fragment แล้ว และแทนที่ด้วยเมธอด getParentFragmentManager() เมธอดเดียว ซึ่งจะแสดงผล FragmentManager ที่ไม่ใช่ค่าว่างซึ่ง Fragment เพิ่มเข้าไป (คุณใช้ isAdded() เพื่อพิจารณาว่าเรียกใช้ได้อย่างปลอดภัยหรือไม่)
  • FragmentManager.enableDebugLogging() การเลิกใช้งาน: เราได้เลิกใช้งานเมธอดแบบคงที่ FragmentManager.enableDebugLogging แล้ว ตอนนี้ FragmentManager จะใช้ Log.isLoggable() สำหรับแท็ก FragmentManager ซึ่งช่วยให้คุณเปิดใช้การบันทึก DEBUG หรือ VERBOSE ได้โดยไม่ต้องคอมไพล์แอปอีกครั้ง

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

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

เวอร์ชัน 1.2.0-rc05

8 มกราคม 2020

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

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

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

เวอร์ชัน 1.2.0-rc04

18 ธันวาคม 2019

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

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

  • ปรับภาพเคลื่อนไหวสำหรับ TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE และ TRANSIT_FRAGMENT_FADE เพื่อหลีกเลี่ยงปัญหาด้านภาพ (b/145468417)

เวอร์ชัน 1.2.0-rc03

4 ธันวาคม 2019

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

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

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

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

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

การเปลี่ยนแปลงการขึ้นต่อกัน

  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.2.0-rc03, Lifecycle ViewModel 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 โดยอัตโนมัติ คุณจึงต้องเพิ่มกฎการเก็บรักษาสำหรับคลาส 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 ที่เกี่ยวข้องกับชื่อ Breadcrumb ใน FragmentTransaction และ FragmentManager.BackStackEntry เลิกใช้งานแล้ว (b/138252944)
  • เราเลิกใช้เมธอด setTransitionStyle ใน FragmentTransaction แล้ว (aosp/1011537)
  • เมธอดหลายรายการใน FragmentManager ไม่abstract อีกต่อไป FragmentManager ยังคงเป็น abstract และไม่ควรสร้างอินสแตนซ์หรือขยายโดยตรง คุณควรรับอินสแตนซ์ที่มีอยู่จาก getSupportFragmentManager(), getChildFragmentManager() ฯลฯ ต่อไป

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

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

เวอร์ชัน 1.2.0-alpha01

2 กรกฎาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0

5 กันยายน 2019

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

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

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

เวอร์ชัน 1.1.0-rc04

7 สิงหาคม 2019

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

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

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

เวอร์ชัน 1.1.0-rc03

19 กรกฎาคม 2019

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

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

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

เวอร์ชัน 1.1.0-rc02

17 กรกฎาคม 2019

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

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

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

เวอร์ชัน 1.1.0-rc01

2 กรกฎาคม 2019

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

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

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

เวอร์ชัน 1.1.0-beta01

5 มิถุนายน 2019

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

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

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

เวอร์ชัน 1.1.0-alpha09

16 พฤษภาคม 2019

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha08

7 พฤษภาคม 2019

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

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha07

25 เมษายน 2019

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

ฟีเจอร์ใหม่

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

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

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

เวอร์ชัน 1.1.0-alpha06

3 เมษายน 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha05

13 มีนาคม 2019

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

ฟีเจอร์ใหม่

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

การเปลี่ยนแปลงลักษณะการทำงาน

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

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

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

เวอร์ชัน 1.1.0-alpha04

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

androidx.fragment:fragment 1.1.0-alpha04 androidx.fragment:fragment-ktx 1.1.0-alpha04 และ androidx.fragment:fragment-testing 1.1.0-alpha04 ออกอากาศแล้ว

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha03

17 ธันวาคม 2018

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment ใช้ BundleSavedStateRegistryOwner และขึ้นอยู่กับไลบรารี SavedState ที่เพิ่งเปิดตัว [aosp/824380]
  • เพิ่มby activityViewModelsตัวแทนพร็อพเพอร์ตี้ Kotlin เพื่อดึงข้อมูล ViewModel ที่เชื่อมโยงกับ Activity ที่มี [b/119050253]
  • by viewModels ตัวแทนพร็อพเพอร์ตี้ Kotlin ได้รับการขยายให้ใช้วิธีแลมบ์ดาที่ไม่บังคับเพื่อรับ ViewModelStoreOwner ซึ่งช่วยให้คุณส่ง Fragment หลักหรือ ViewModelStoreOwner ที่กำหนดเองอื่นๆ ด้วยโค้ด เช่น val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

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

  • FragmentScenario ตอนนี้คุณระบุธีมได้แล้ว เช่น Theme.AppCompat [b/119054431] นี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
  • เพิ่มเมธอด requireView() ซึ่งจะแสดงผล @NonNull View หรือส่ง IllegalStateException [b/120241368]
  • เพิ่มrequireParentFragment()เมธอดที่ส่งคืน @NonNull Fragment หรือส่ง IllegalStateException [b/112103783]

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

  • แก้ไข IllegalStateException: บันทึกสถานะไม่สำเร็จ b/120814739
  • ตอนนี้ Fragment ที่กู้คืนจากสถานะอินสแตนซ์ที่บันทึกไว้จะได้รับ Bundle [b/119794496] ที่ไม่ใช่ค่าว่างเสมอ
  • Fragment ที่นำออกจะไม่นำออบเจ็กต์ Lifecycle กลับมาใช้ซ้ำหากมีการเพิ่มอีกครั้ง [b/118880674]

เวอร์ชัน 1.1.0-alpha02

3 ธันวาคม 2018

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.1.0-alpha01

5 พฤศจิกายน 2018

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

ฟีเจอร์ใหม่

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

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

  • ขยายคำอธิบายประกอบการยอมรับค่า Null ได้อย่างมากใน Fragment API Surface

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

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

ปัญหาที่ทราบแล้ว

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