ส่วนย่อย

แบ่งกลุ่มแอปออกเป็นหน้าจอหลายๆ หน้าจอที่เป็นอิสระซึ่งโฮสต์อยู่ภายในกิจกรรม
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
30 ตุลาคม 2024 1.8.5 - - -

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

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

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

Groovy

dependencies {
    def fragment_version = "1.8.5"

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

Kotlin

dependencies {
    val fragment_version = "1.8.5"

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

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

ความคิดเห็น

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

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

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

เวอร์ชัน 1.8

เวอร์ชัน 1.8.5

30 ตุลาคม 2024

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

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

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

เวอร์ชัน 1.8.4

2 ตุลาคม 2024

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

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

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

เวอร์ชัน 1.8.3

4 กันยายน 2024

ปล่อย androidx.fragment:fragment-*:1.8.3 แล้ว เวอร์ชัน 1.8.3 มีการคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.8.2

24 กรกฎาคม 2024

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

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

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

เวอร์ชัน 1.8.1

26 มิถุนายน 2024

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

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

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

เวอร์ชัน 1.8.0

12 มิถุนายน 2024

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

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

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

เวอร์ชัน 1.8.0-rc01

29 พฤษภาคม 2024

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

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

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

เวอร์ชัน 1.8.0-beta01

14 พฤษภาคม 2024

ปล่อย androidx.fragment:fragment-*:1.8.0-beta01 แล้ว เวอร์ชัน 1.8.0-beta01 มีการคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.8.0-alpha02

17 เมษายน 2024

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

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

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

เวอร์ชัน 1.8.0-alpha01

3 เมษายน 2024

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

ฟีเจอร์ใหม่

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

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

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

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

เวอร์ชัน 1.7

เวอร์ชัน 1.7.1

14 พฤษภาคม 2024

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

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

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

เวอร์ชัน 1.7.0

1 พฤษภาคม 2024

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

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

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

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

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

อาร์ติแฟกต์ Compose ไม่ได้

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

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

  class ExampleFragment : Fragment() {

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

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

เวอร์ชัน 1.7.0-rc02

17 เมษายน 2024

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

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

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

เวอร์ชัน 1.7.0-rc01

3 เมษายน 2024

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

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

เวอร์ชัน 1.7.0-beta01

20 มีนาคม 2024

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

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

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

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

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

เวอร์ชัน 1.7.0-alpha10

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

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

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

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

เวอร์ชัน 1.7.0-alpha09

24 มกราคม 2024

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

อาร์ติแฟกต์การคอมโพสิต์ของส่วนย่อย

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

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

class ExampleFragment : Fragment() {

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

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.7.0-alpha08

10 มกราคม 2024

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

ล้างข้อมูล

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

เวอร์ชัน 1.7.0-alpha07

29 พฤศจิกายน 2023

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

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

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

เวอร์ชัน 1.7.0-alpha06

4 ตุลาคม 2023

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

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

เวอร์ชัน 1.7.0-alpha05

20 กันยายน 2023

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.7.0-alpha04

6 กันยายน 2023

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

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

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

เวอร์ชัน 1.7.0-alpha03

23 สิงหาคม 2023

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

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

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

เวอร์ชัน 1.7.0-alpha02

9 สิงหาคม 2023

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

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

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

เวอร์ชัน 1.7.0-alpha01

7 มิถุนายน 2023

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

ฟีเจอร์ใหม่

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

เวอร์ชัน 1.6

เวอร์ชัน 1.6.2

1 พฤศจิกายน 2023

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

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

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

เวอร์ชัน 1.6.1

26 กรกฎาคม 2023

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

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

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

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

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

เวอร์ชัน 1.6.0

7 มิถุนายน 2023

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

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

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

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

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

เวอร์ชัน 1.6.0-rc01

10 พฤษภาคม 2023

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

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

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

เวอร์ชัน 1.6.0-beta01

19 เมษายน 2023

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

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

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

เวอร์ชัน 1.6.0-alpha09

5 เมษายน 2023

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha08

22 มีนาคม 2023

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

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

  • ระบบได้ปรับเวลาของ OnBackStackChangedListener.onBackStackChangeCommited callback ให้ทำงานก่อนการดำเนินการกับข้อมูลโค้ดที่แยกส่วน วิธีนี้ช่วยให้มั่นใจว่าระบบจะไม่ส่งผ่านข้อมูลโค้ดที่แยกออกไปยังการเรียกกลับ (I66a76, b/273568280)

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

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

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

เวอร์ชัน 1.6.0-alpha07

8 มีนาคม 2023

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

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

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

เวอร์ชัน 1.6.0-alpha06

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

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

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

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

เวอร์ชัน 1.6.0-alpha05

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

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.6.0-alpha04

7 ธันวาคม 2022

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha03

5 ตุลาคม 2022

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha02

24 สิงหาคม 2022

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

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

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

เวอร์ชัน 1.6.0-alpha01

27 กรกฎาคม 2022

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

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

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

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

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

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

รุ่น 1.5

เวอร์ชัน 1.5.7

19 เมษายน 2023

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

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

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

เวอร์ชัน 1.5.6

22 มีนาคม 2023

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

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

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

เวอร์ชัน 1.5.5

7 ธันวาคม 2022

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

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

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

เวอร์ชัน 1.5.4

24 ตุลาคม 2022

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

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

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

เวอร์ชัน 1.5.3

21 กันยายน 2022

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

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

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

รุ่น 1.5.2

10 สิงหาคม 2022

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

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

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

รุ่น 1.5.1

27 กรกฎาคม 2022

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

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

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

การอัปเดตทรัพยากรที่เกี่ยวข้อง

  • ตอนนี้ไลบรารี FRG จะขึ้นอยู่กับ Lifecycle 2.5.1 (Id204c)
  • ตอนนี้คลังข้อมูลโค้ดโค้ดจะขึ้นอยู่กับ Activity 1.5.1 (I10f07)

เวอร์ชัน 1.5.0

29 มิถุนายน 2022

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

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

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

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

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

เวอร์ชัน 1.5.0-rc01

11 พฤษภาคม 2022

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

การจัดโครงสร้างใหม่ของสถานะอินสแตนซ์ที่บันทึกไว้

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

เวอร์ชัน 1.5.0-beta01

20 เมษายน 2022

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

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

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

การเปลี่ยนโครงสร้างภายในอินสแตนซ์ที่บันทึกไว้

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

เวอร์ชัน 1.5.0-alpha05

6 เมษายน 2022

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

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

เวอร์ชัน 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 MenuHost และ MenuProvider ที่เพิ่มใน Activity 1.4.0-alpha01 มอบแพลตฟอร์ม API ที่เทียบเท่าซึ่งทดสอบได้และรับรู้ถึงวงจรของรายการที่ควรใช้กับ FRG (I50a59, I20758)

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

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

เวอร์ชัน 1.5.0-alpha03

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

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

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

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

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

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

เวอร์ชัน 1.5.0-alpha02

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

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

ฟีเจอร์ใหม่

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

เวอร์ชัน 1.5.0-alpha01

26 มกราคม 2022

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.4

เวอร์ชัน 1.4.1

26 มกราคม 2022

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

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

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

เวอร์ชัน 1.4.0

17 พฤศจิกายน 2021

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

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

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

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

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

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

กองซ้อนที่ย้อนกลับหลายกอง

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

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

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

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

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

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

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

ดูข้อมูลเพิ่มเติมได้ที่กองซ้อนย้อนกลับหลายกอง: เจาะลึก

เวอร์ชัน 1.4.0-rc01

3 พฤศจิกายน 2021

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

เวอร์ชัน 1.4.0-beta01

27 ตุลาคม 2021

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

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

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

เวอร์ชัน 1.4.0-alpha10

29 กันยายน 2021

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

Lint

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

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

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

เวอร์ชัน 1.4.0-alpha09

15 กันยายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha08

1 กันยายน 2021

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

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

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

เวอร์ชัน 1.4.0-alpha07

18 สิงหาคม 2021

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

เวอร์ชัน 1.4.0-alpha06

4 สิงหาคม 2021

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

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

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

เวอร์ชัน 1.4.0-alpha05

21 กรกฎาคม 2021

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

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

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

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

เวอร์ชัน 1.4.0-alpha04

30 มิถุนายน 2021

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha03

16 มิถุนายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha02

2 มิถุนายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha01

18 พฤษภาคม 2021

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

ฟีเจอร์ใหม่

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

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

กองซ้อนที่ย้อนกลับหลายกอง

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

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

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

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

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

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

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

Fragment StrictMode

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

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

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

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

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

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

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

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

เวอร์ชัน 1.3

เวอร์ชัน 1.3.6

21 กรกฎาคม 2021

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

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

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

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

เวอร์ชัน 1.3.5

16 มิถุนายน 2021

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

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

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

เวอร์ชัน 1.3.4

18 พฤษภาคม 2021

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

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

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

เวอร์ชัน 1.3.3

21 เมษายน 2021

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

ฟีเจอร์ใหม่

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

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

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

การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่

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

เวอร์ชัน 1.3.2

24 มีนาคม 2021

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

การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่

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

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

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

เวอร์ชัน 1.3.1

10 มีนาคม 2021

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

ฟีเจอร์ใหม่

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

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

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

การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่

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

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

เวอร์ชัน 1.3.0

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

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

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

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

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

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

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

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

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

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

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

เวอร์ชัน 1.3.0-rc02

27 มกราคม 2021

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

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

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

การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่

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

เวอร์ชัน 1.3.0-rc01

16 ธันวาคม 2020

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

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

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

แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ

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

เวอร์ชัน 1.3.0-beta02

2 ธันวาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

การแก้ไขข้อบกพร่องของเครื่องมือจัดการสถานะใหม่

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

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

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

เวอร์ชัน 1.3.0-beta01

1 ตุลาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

แก้ไขข้อบกพร่องใหม่จากผู้จัดการสถานะ

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

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

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

เวอร์ชัน 1.3.0-alpha08

19 สิงหาคม 2020

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

เครื่องมือจัดการสถานะใหม่

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

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

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

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

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

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

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

  • ข้ามผ่าน ActivityOptions เมื่อใช้ startIntentSenderForResult() แล้ว (b/162247961)

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

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

เวอร์ชัน 1.3.0-alpha07

22 กรกฎาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.3.0-alpha06

10 มิถุนายน 2020

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.3.0-alpha05

20 พฤษภาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

เวอร์ชัน 1.3.0-alpha04

29 เมษายน 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.3.0-alpha03

1 เมษายน 2020

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

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

  • ตอนนี้วิธีการ prepareCall ใน Fragment เปลี่ยนเป็น final แล้ว (b/152439361)

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

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

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

  • ข้อมูลโค้ดที่ฝังจะขึ้นอยู่กับ กิจกรรม 1.2.0-alpha03 ซึ่งมีการปรับปรุงที่สำคัญใน Activity Result API ที่เปิดตัวในกิจกรรม 1.2.0-alpha02

เวอร์ชัน 1.3.0-alpha02

18 มีนาคม 2020

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

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ ActivityResultRegistry API ที่เปิดตัวใน Activity 1.2.0-alpha02 เพื่อจัดการกับโฟลว์ startActivityForResult()+onActivityResult() และ requestPermissions()+onRequestPermissionsResult() โดยไม่ต้องลบล้างเมธอดใน Fregment นอกเหนือจากการระบุฮุกสําหรับการทดสอบโฟลว์เหล่านี้ ดูการรับผลลัพธ์จากกิจกรรมที่อัปเดตแล้ว (b/125158199)

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

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

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

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

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

  • BottomSheetDialogFragment ไม่ได้จัดตำแหน่งกล่องโต้ตอบบนหน้าจออย่างเหมาะสมอีกต่อไป (b/151652127)

เวอร์ชัน 1.3.0-alpha01

4 มีนาคม 2020

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

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ ViewTreeLifecycleOwner.get(View) API ที่เพิ่มในวงจร 2.3.0-alpha01 เพื่อให้แสดงผล viewLifecycleOwner ของข้อมูลโค้ดเป็น LifecycleOwner สำหรับมุมมองที่ onCreateView() แสดง (aosp/1182955)

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

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

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

  • ตอนนี้กฎ ProGuard ของ Fragment จะเก็บเฉพาะคลาส Constructor เริ่มต้น Fragment ที่ใช้เท่านั้นแทนที่จะเก็บสำหรับอินสแตนซ์ Fragment ทั้งหมด ซึ่งเป็นการแก้ไขการถดถอยที่เกิดขึ้นใน Fragment 1.2.1 (b/149665169
  • กฎ Lint require___() ที่เพิ่มลงใน 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() ของข้อมูลโค้ดจะหยุดลงก่อนที่จะเรียก onSaveInstanceState() ซึ่งสอดคล้องกับลักษณะการทำงานของวงจรของข้อมูลโค้ด ก่อนหน้านี้ฟีเจอร์นี้เปิดตัวในส่วนที่ 1.3.0-alpha04 (b/154645875)
  • ตอนนี้การเรียก setMenuVisibility(false) ในข้อมูลโค้ดจะเปลี่ยนการแสดงผลของเมนูที่ข้อมูลโค้ดย่อยระบุอย่างถูกต้อง ก่อนหน้านี้ฟีเจอร์นี้เปิดตัวในส่วนที่ 1.3.0-alpha04 (b/153593580)

เวอร์ชัน 1.2.4

เวอร์ชัน 1.2.4

1 เมษายน 2020

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

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

  • อัปเดตกฎ ProGuard ของข้อมูลโค้ดเพื่ออนุญาตให้มีการสร้างความสับสนให้กับข้อมูลโค้ดที่เก็บไว้ (b/151605338)
  • ปิดใช้กฎ Lint FragmentLiveDataObserve ในคลาส DialogFragment เนื่องจากวงจรชีวิตของคลาสและวงจรชีวิตของมุมมองจะซิงค์กันเสมอ ทำให้สามารถใช้ this หรือ viewLifecycleOwner ได้อย่างปลอดภัยเมื่อเรียกใช้ observe (b/151765086)

เวอร์ชัน 1.2.3

เวอร์ชัน 1.2.3

18 มีนาคม 2020

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

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

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

เวอร์ชัน 1.2.2

เวอร์ชัน 1.2.2

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

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

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

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

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

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

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

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

เวอร์ชัน 1.2.1

เวอร์ชัน 1.2.1

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

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

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

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

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

เวอร์ชัน 1.2.0

เวอร์ชัน 1.2.0

22 มกราคม 2020

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

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

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

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

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

เวอร์ชัน 1.2.0-rc05

8 มกราคม 2020

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

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

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

เวอร์ชัน 1.2.0-rc04

18 ธันวาคม 2019

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

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

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

เวอร์ชัน 1.2.0-rc03

4 ธันวาคม 2019

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

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

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

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

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

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

  • ตอนนี้ Fragment ขึ้นอยู่กับ Lifecycle 2.2.0-rc03, Lifecycle ViewModel 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)

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

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

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

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

เวอร์ชัน 1.2.0-beta02

11 ตุลาคม 2019

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

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

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

เวอร์ชัน 1.2.0-beta01

9 ตุลาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.2.0-alpha04

18 กันยายน 2019

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

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

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

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

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

เวอร์ชัน 1.2.0-alpha03

5 กันยายน 2019

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

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

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

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

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

เวอร์ชัน 1.2.0-alpha02

7 สิงหาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.2.0-alpha01

2 กรกฎาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0

5 กันยายน 2019

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

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

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

เวอร์ชัน 1.1.0-rc04

7 สิงหาคม 2019

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

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

  • ตอนนี้ระบบยกเลิกการเปลี่ยนที่เลื่อนออกไปอย่างถูกต้องแล้วในฟragments ที่ปรากฏขึ้น (b/138251858)

เวอร์ชัน 1.1.0-rc03

19 กรกฎาคม 2019

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

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

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

เวอร์ชัน 1.1.0-rc02

17 กรกฎาคม 2019

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

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

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

เวอร์ชัน 1.1.0-rc01

2 กรกฎาคม 2019

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

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

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

เวอร์ชัน 1.1.0-beta01

5 มิถุนายน 2019

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

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

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

เวอร์ชัน 1.1.0-alpha09

16 พฤษภาคม 2019

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

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

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

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

  • ตอนนี้ระบบจะนำรายการเมนูที่ขยายโดย FRGMENT ย่อยออกอย่างถูกต้องเมื่อนำ FRGMENT หลักออกแล้ว b/131581013

เวอร์ชัน 1.1.0-alpha08

7 พฤษภาคม 2019

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

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha07

25 เมษายน 2019

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

ฟีเจอร์ใหม่

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

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

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

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

  • ผลที่ตามมาของ (b/129907905) คือ ข้อมูลโค้ดที่คอมไพล์แล้วในกองซ้อนด้านหลังจะไม่ได้รับการเรียกกลับไปยัง onCreateView() เมื่อสร้างกิจกรรมโฮสติ้งขึ้นมาใหม่ ตอนนี้ onCreateView() จะเรียกเฉพาะเมื่อมีการทำให้แสดงข้อมูลในรายการย่อย (นั่นคือมีการป๊อปสแต็กด้านหลัง)

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

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

เวอร์ชัน 1.1.0-alpha06

3 เมษายน 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha05

13 มีนาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha04

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

androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 และ androidx.fragment:fragment-testing 1.1.0-alpha04 เผยแพร่แล้ว

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha03

17 ธันวาคม 2018

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha02

3 ธันวาคม 2018

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.1.0-alpha01

5 พฤศจิกายน 2018

นี่เป็นรุ่นแรกของ fragment-testing artifact และ FragmentScenario ซึ่งสร้างขึ้นจาก androidx.test:core APIs ดูรายละเอียดเพิ่มเติมในเอกสารประกอบการทดสอบข้อมูลโค้ด

ฟีเจอร์ใหม่

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

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

  • ขยายคำอธิบายประกอบของค่าว่าง (Nullability) ทั่วทั้งแพลตฟอร์ม Fragment API อย่างมาก

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

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

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

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