ส่วนย่อย

แบ่งกลุ่มแอปออกเป็นหน้าจอหลายๆ หน้าจอที่เป็นอิสระซึ่งโฮสต์อยู่ภายในกิจกรรม
อัปเดตล่าสุด รุ่นที่เสถียร ตัวเลือกถอนการอ้างสิทธิ์ รุ่นเบต้า รุ่นอัลฟ่า
24 กรกฎาคม 2024 1.8.2 - - -

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

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

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

ดึงดูด

dependencies {
    def fragment_version = "1.8.2"

    // 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.2"

    // 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")
}

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

ความคิดเห็น

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

สร้างรายการใหม่

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

เวอร์ชัน 1.8

เวอร์ชัน 1.8.2

24 กรกฎาคม 2024

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

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

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

เวอร์ชัน 1.8.1

26 มิถุนายน 2024

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

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

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

เวอร์ชัน 1.8.0

12 มิถุนายน 2024

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

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

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

เวอร์ชัน 1.8.0-rc01

29 พฤษภาคม 2024

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

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

  • ตอนนี้ Callback onBackStackChangeCancelled ในอินเทอร์เฟซ FragmentManagers OnBackStackChangedListener จะเริ่มทำงานโดยเป็นส่วนหนึ่งของการดำเนินการใน FragmentManager โดยจะย้ายให้เข้าไปใกล้ขึ้นสอดคล้องกับระยะเวลาของ Callback ของ 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 หรือ Seekable Androidx Transition เท่านั้น วิธีนี้แก้ปัญหาที่การยกเลิกธุรกรรมที่ค้นหาได้บางส่วนอาจทำให้หน้าจอดำได้ (I43037, b/339169168)

เวอร์ชัน 1.8.0-alpha02

17 เมษายน 2024

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

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

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

เวอร์ชัน 1.8.0-alpha01

3 เมษายน 2024

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

ฟีเจอร์ใหม่

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

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

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

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

เวอร์ชัน 1.7

เวอร์ชัน 1.7.1

14 พฤษภาคม 2024

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

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

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

เวอร์ชัน 1.7.0

1 พฤษภาคม 2024

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

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

  • ตอนนี้ Fragment จะรองรับการกลับมาในแอปตามการคาดการณ์เมื่อใช้ Animator หรือเมื่อใช้การเปลี่ยนเป็น AndroidX 1.5.0 วิธีนี้จะช่วยให้ผู้ใช้สามารถใช้ท่าทางสัมผัสย้อนกลับเพื่อดูส่วนย่อยก่อนหน้าโดยการมองหา Animator/การเปลี่ยน ก่อนตัดสินใจทำธุรกรรมผ่านการทำท่าทางสัมผัสให้เสร็จสมบูรณ์หรือยกเลิก
ระบบทรานซิชัน ทรัพยากร XML รองรับการย้อนกลับที่คาดการณ์ได้
Animation R.anim ไม่
Animator R.animator ใช่
เฟรมเวิร์ก Transition R.transition ไม่
AndroidX Transition ที่มีการเปลี่ยนรุ่น 1.4.1 หรือน้อยกว่า R.transition ไม่
AndroidX 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 ของโฮสต์ประเภททั่วไปของโฮสต์ตรงกับค่า Null ของประเภทการแสดงผล onGetHost() (I40af5)

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

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

เวอร์ชัน 1.7.0-alpha10

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

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

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

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

เวอร์ชัน 1.7.0-alpha09

24 มกราคม 2024

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

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

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

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

class ExampleFragment : Fragment() {

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

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.7.0-alpha08

10 มกราคม 2024

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

ล้างข้อมูล

เวอร์ชัน 1.7.0-alpha07

29 พฤศจิกายน 2023

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

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

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

เวอร์ชัน 1.7.0-alpha06

4 ตุลาคม 2023

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

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

เวอร์ชัน 1.7.0-alpha05

20 กันยายน 2023

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.7.0-alpha04

6 กันยายน 2023

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

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

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

เวอร์ชัน 1.7.0-alpha03

23 สิงหาคม 2023

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

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

  • แก้ไขปัญหาเกี่ยวกับ Fragments เมื่อใช้การย้อนกลับแบบคาดการณ์ที่ทำให้ส่วนย่อยแรกในสแต็กหลังของตัวจัดการส่วนย่อยถูกข้ามและกิจกรรมที่จะเสร็จสิ้นเมื่อใช้ระบบกลับผ่านการนำทางแบบ 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) หรือไม่มีการเปลี่ยนเลย Fragments จะรอจนกว่าท่าทางสัมผัสจะเสร็จสมบูรณ์ก่อนที่จะดำเนินการการย้อนกลับ (I8100C)

เวอร์ชัน 1.7.0-alpha01

7 มิถุนายน 2023

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

ฟีเจอร์ใหม่

  • ตอนนี้ Fragment จะรองรับการกลับมาในแอปตามการคาดการณ์เมื่อใช้ 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 แล้วก็ตาม ซึ่งจะทำให้ระบบนำสถานะที่แคชไว้ดังกล่าวมาใช้ซ้ำหากอินสแตนซ์ของ Fragment นั้นอยู่บนสแต็กด้านหลังเมื่อใช้ API ของ Back Stacks หลายรายการเพื่อบันทึกและกู้คืน Fragment นั้น (I71288, b/246289075)

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

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

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

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

เวอร์ชัน 1.6.0-rc01

10 พฤษภาคม 2023

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

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

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

เวอร์ชัน 1.6.0-beta01

19 เมษายน 2023

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

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

  • การใช้ postponeEnterTransition ที่มีระยะหมดเวลาแล้วแทนที่ Fragment ที่เลื่อนออกไปจะไม่ทำให้ Fragment ที่เลื่อนออกไปอีกต่อไป (I2ec7d, b/276375110)
  • ตอนนี้ Callback onBackStackChangeStarted และ onBackStackChangeCommitted ใหม่จะส่งส่วนย่อยเพียงครั้งเดียวเท่านั้น แม้ว่าธุรกรรมหลายรายการจะมีส่วนย่อยเดียวกันก็ตาม (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)
  • แฟรกเมนต์ commitNow(), executePendingTransactions() และ API ของ 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 มีคอมมิตเหล่านี้

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha07

8 มีนาคม 2023

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

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

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

เวอร์ชัน 1.6.0-alpha06

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

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

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

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

เวอร์ชัน 1.6.0-alpha05

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

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

ฟีเจอร์ใหม่

  • ตอนนี้อินเทอร์เฟซ FragmentManager.OnBackStackChagnedListener มี Callback เพิ่มเติมอีก 2 รายการ คือ onBackStackChangeStarted และ onBackStackChangeCommitted ซึ่งอนุญาตให้มีข้อมูลเพิ่มเติมและการควบคุมเมื่อมีการเปลี่ยนแปลง Back Stack ใน 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)

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

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

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

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

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

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

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

เวอร์ชัน 1.6.0-alpha03

5 ตุลาคม 2022

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

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

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

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

  • แก้ไขการถดถอยที่เกิดจากการผสานรวมอินเทอร์เฟซ 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 มีคอมมิตเหล่านี้

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

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

เวอร์ชัน 1.6.0-alpha01

27 กรกฎาคม 2022

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

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

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

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

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

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

รุ่น 1.5

เวอร์ชัน 1.5.7

19 เมษายน 2023

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

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

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

เวอร์ชัน 1.5.6

22 มีนาคม 2023

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

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

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

เวอร์ชัน 1.5.5

7 ธันวาคม 2022

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

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

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

เวอร์ชัน 1.5.4

24 ตุลาคม 2022

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

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

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

เวอร์ชัน 1.5.3

21 กันยายน 2022

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

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

  • แก้ไขข้อผิดพลาดที่ทำให้ Fragment ในสแต็กด้านหลังได้รับ Callback onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() และ onConfigurationChanged() (I34581, I8dfe6, b/242570955)
  • Fragment ย่อยที่ซ้อนกันจะไม่ได้รับ Callback ของ 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)

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

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

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

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

เวอร์ชัน 1.5.0-rc01

11 พฤษภาคม 2022

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

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

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

เวอร์ชัน 1.5.0-beta01

20 เมษายน 2022

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

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

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

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

  • ตอนนี้ FragmentManager จะบันทึกสถานะอินสแตนซ์ที่บันทึกไว้ลงใน Bundle แทนที่จะบันทึกใน Parcelable ที่กำหนดเองโดยตรง ขั้นตอนนี้เป็นขั้นตอนแรกในการเพิ่มความโปร่งใสของข้อมูลที่ Fragments บันทึกไว้ (I93807, b/207158202)
  • ตอนนี้ผลลัพธ์ที่ตั้งค่าผ่าน Fragment Result 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 ของกิจกรรมแล้ว เนื่องจากมีการเชื่อมโยง Fragment API กับกิจกรรมอย่างแน่นหนาและไม่สามารถทดสอบแยกกันได้ API MenuHost และ MenuProvider ที่เพิ่มลงในกิจกรรม 1.4.0-alpha01 จะมี API ที่เทียบเท่าตามวงจรที่ทดสอบได้ซึ่งทดสอบได้ ซึ่ง Fragment ควรใช้ (I50a59, I20758)

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

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

เวอร์ชัน 1.5.0-alpha03

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

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

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

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

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

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

เวอร์ชัน 1.5.0-alpha02

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

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

ฟีเจอร์ใหม่

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

เวอร์ชัน 1.5.0-alpha01

26 มกราคม 2022

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.4

เวอร์ชัน 1.4.1

26 มกราคม 2022

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

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

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

เวอร์ชัน 1.4.0

17 พฤศจิกายน 2021

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

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

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

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

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

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

แบ็กสแต็กหลายรายการ

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

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

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

  • saveBackStack() เป็นราคาที่ครอบคลุมเสมอ
  • ซึ่งต่างจาก popBackStack() ซึ่งจะแสดงธุรกรรมทั้งหมดในกลุ่มแบ็กสแต็กหากไม่พบชื่อที่ระบุในแบ็กสแต็กหรือหากมีการระบุชื่อค่าว่าง saveBackStack() จะไม่ดำเนินการใดๆ หากคุณยังไม่เคยทำธุรกรรม Fragment ด้วย 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)
  • ตอนนี้แป้นพิมพ์จะปิดโดยอัตโนมัติเมื่อออกจาก ส่วนย่อยที่มีแป้นพิมพ์ที่เปิดอยู่ไปยังส่วนย่อยที่มีมุมมองนักรีไซเคิล (I8b842, b/196852211)
  • ขณะนี้ DialogFragment ใช้ setReorderingAllowed(true)สำหรับธุรกรรมทั้งหมด โค้ดจะสร้างขึ้นเมื่อคุณเรียกใช้ show(), showNow() หรือ dismiss() (Ie2c14)
  • คำเตือน Lint แบบยาวมากของ DetachAndAttachFragmentInSameFragmentTransaction ถูกย่อเหลือ DetachAndAttachSameFragment (e9eca3)

เวอร์ชัน 1.4.0-alpha10

29 กันยายน 2021

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

เชิงเส้น

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

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

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

เวอร์ชัน 1.4.0-alpha09

15 กันยายน 2021

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

ฟีเจอร์ใหม่

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

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

  • เขียนชั้นเรียน FragmentContainerView ใหม่ใน Kotlin แล้ว ตรวจสอบว่าฟังก์ชัน getFragment ทำงานตาม ความสามารถในการเว้นว่าง (If694a, b/189629145)
  • FragmentStrictMode เขียนเป็นภาษา Kotlin (I11767, b/199183506)

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

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

เวอร์ชัน 1.4.0-alpha08

1 กันยายน 2021

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

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

  • ปรับปรุงการตรวจสอบ Lint ของ UseRequireInsteadOfGet เพื่อจัดการวงเล็บที่ซ้ำซ้อนได้ดียิ่งขึ้น (I2d865)
  • ปรับปรุงการตรวจสอบ Lint ของ UseGetLayoutInflater เพื่อจัดการกับกรณีปัญหา Edge อื่นๆ เพิ่มเติม (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 หรือ สำเนาที่สองของส่วนย่อยที่ปรากฏขึ้น (I9039f)
  • แก้ไขปัญหาที่ FragmentManager จะเก็บสำเนาสถานะที่บันทึกไว้ก่อนหน้านี้ ผ่าน saveBackStack() แม้หลังจากรัฐนั้น กู้คืนแล้ว (Ied212)
  • เมธอด dismissAllowingStateLoss() ของ DialogFragment จะไม่ขัดข้องอีกต่อไปเมื่อคุณโทร หลังจากบันทึกสถานะแล้วเมื่อเพิ่ม DialogFragment ผ่าน show(FragmentTransaction, String) วิธี (I84422)

เวอร์ชัน 1.4.0-alpha05

21 กรกฎาคม 2021

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

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

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

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

เวอร์ชัน 1.4.0-alpha04

30 มิถุนายน 2021

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha03

16 มิถุนายน 2021

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.4.0-alpha02

2 มิถุนายน 2021

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

ฟีเจอร์ใหม่

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

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

    • ขณะนี้ WrongFragmentContainerViolation มี ViewGroup ที่ Fragment พยายามเพิ่ม (I83c75, b/187871150)
    • TargetFragmentUsageViolationได้ขยายไปยังSetTargetFragmentUsageViolation GetTargetFragmentUsageViolation และ GetTargetFragmentRequestCodeUsageViolation โดยมี SetTargetFragmentUsageViolation ที่มีส่วนย่อยเป้าหมายและโค้ดคำขอ (I741b4, b/187871150)
    • ตอนนี้ SetUserVisibleHintViolation มีค่าบูลีนที่ส่งผ่านไปยัง setUserVisibleHint() แล้ว (I00585, b/187871150)
    • ขณะนี้ FragmentTagUsageViolation มี ViewGroup ที่แท็ก <fragment> พยายามขยายส่วนย่อยเข้าไป (I5dbbc, b/187871150)
    • ขณะนี้ FragmentReuseViolation มีฟังก์ชัน รหัสที่ไม่ซ้ำกันของอินสแตนซ์ก่อนหน้าของ Fragment ที่ทำให้เกิดการละเมิด (I0544d, b/187871150)
    • RetainInstanceUsageViolation ในขณะนี้ แอบสแตรกต์และมีคลาสย่อย 2 คลาส SetRetainInstanceUsageViolation และ GetRetainInstanceUsageViolation โดยเป็นตัวแทนของ สำหรับประเภทการละเมิดได้ (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} เพื่อระบุว่าจะเปิดใช้ภาพเคลื่อนไหวการเปลี่ยนกิจกรรมแบบมาตรฐานที่นำมาจากธีมในการเปลี่ยน Fragments ไหม (I46652)

แบ็กสแต็กหลายรายการ

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

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

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

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

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

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

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

Fragment StrictMode

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

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

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

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

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

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

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

การสนับสนุนภายนอก

  • ขอบคุณ simonschiller ให้ FragmentScenario ติดตั้งใช้งาน Closeable (#121, b/143774122)
  • ขอขอบคุณ simonschiller ที่เพิ่ม FragmentStrictMode API ทั้งหมดสําหรับรุ่นนี้
  • ขอขอบคุณ tatocaster ที่เพิ่มการตรวจสอบ Lint UseGetLayoutInflater (#156, b/170781346)
  • ขอขอบคุณ tatocaster ที่เพิ่มการตรวจสอบ Lint DialogFragmentCallbacksDetector (#171, b/181780047)

เวอร์ชัน 1.3

เวอร์ชัน 1.3.6

21 กรกฎาคม 2021

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

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

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

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

เวอร์ชัน 1.3.5

16 มิถุนายน 2021

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

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

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

เวอร์ชัน 1.3.4

18 พฤษภาคม 2021

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

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

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

เวอร์ชัน 1.3.3

21 เมษายน 2021

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

ฟีเจอร์ใหม่

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

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

  • แก้ไขการถดถอยที่พบใน Fragment 1.3.2 ซึ่งจะทำให้ภาพเคลื่อนไหว popEnter ไม่ทำงานเมื่อเรียก FragmentTransaction ที่มีการดำเนินการ setPrimaryNavFragment เช่นคำสั่งที่ NavHostFragment ใช้ (I38c87, b/183877426)
  • ตอนนี้ FragmentContainerView จะดูแลให้มีการจัดส่ง Fragment ชุดใหม่ WindowInsets เพื่อให้มั่นใจได้ว่าแต่ละ Fragment สามารถใช้ส่วนแทรกได้อย่างอิสระ (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)

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

  • ตอนนี้ Fragment จะขึ้นอยู่กับกิจกรรม 1.2.2 ซึ่งจะแก้ไขปัญหาด้วยการตรวจสอบ Lint ของ InvalidFragmentVersionForActivityResult ของกิจกรรมเมื่อใช้ Fragment 1.3.1 ขึ้นไป
  • ตอนนี้ Fragment จะขึ้นอยู่กับวงจร 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 อัปเดต เอกสาร พารามิเตอร์เพื่อให้แสดงว่าไม่ยอมรับ Nullables (I990ba, b/178348386)

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

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

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

เวอร์ชัน 1.3.0

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

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

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

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

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

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

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

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

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

  • การเลิกใช้งาน setRetainInstance(): เลิกใช้งานเมธอด setRetainInstance() ใน Fragments แล้ว ในการเปิดตัว ViewModels ทำให้นักพัฒนาซอฟต์แวร์มี API เฉพาะสำหรับการเก็บรักษาสถานะที่สามารถเชื่อมโยงกับกราฟกิจกรรม ส่วนย่อย และการนำทาง วิธีนี้ช่วยให้นักพัฒนาแอปใช้ Fragment ปกติ (ไม่ใช่เก็บรักษา) และเก็บสถานะที่ต้องการแยกไว้ต่างหากได้ เพื่อหลีกเลี่ยงแหล่งที่มาของการรั่วไหลที่พบได้บ่อยในขณะที่ยังคงคุณสมบัติที่เป็นประโยชน์ของการสร้างเดี่ยวและการทำลายสถานะที่เก็บรักษาไว้ (เช่น เครื่องมือสร้าง ViewModel และ Callback 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)
  • ส่วนย่อยที่มีการเปลี่ยนภาพเพิ่มก่อนลำดับชั้นของมุมมองคือ ตอนนี้ที่แนบมามีการเข้าถึง RESUMED อย่างถูกต้อง (I1fc1d, b/177154873)

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

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

เวอร์ชัน 1.3.0-rc01

16 ธันวาคม 2020

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

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

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

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

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

เวอร์ชัน 1.3.0-beta02

2 ธันวาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

  • แก้ไขปัญหาที่มุมมองไปไม่ถึงสถานะสุดท้ายถ้าคุณขัดจังหวะการเปลี่ยนส่วนย่อยที่ใช้ Animator หรือหนึ่งในตัวเลือก TRANSIT_FRAGMENT_ (I92426, b/169874632)
  • แก้ไขปัญหาที่ป้องกันไม่ให้ระบบทำลายส่วนย่อยที่มี Animation ออกอย่างถูกต้อง (I83d65)
  • การออกจากส่วนย่อยที่มีการเปลี่ยนกลับเอฟเฟ็กต์ ยกเลิกอย่างถูกต้อง และรีสตาร์ทด้วยเอฟเฟ็กต์การป้อนที่เหมาะสม (I62226, b/167092035)
  • แก้ไขปัญหาที่การออกจาก Animator ของ hide() ไม่ทำงาน (Id7ffe)
  • ตอนนี้ Fragment ปรากฏอย่างถูกต้องแล้วเมื่อเลื่อนเวลาออกไป จากนั้นจะเริ่มต้นทันที (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

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

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

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

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

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

  • ตอนนี้ Fragment คืนค่าสถานะโฟกัสมุมมองอย่างถูกต้องจาก ก่อนที่จะเริ่มภาพเคลื่อนไหว (Icc256)
  • ส่วนย่อยที่มีการเปลี่ยนองค์ประกอบที่แชร์เท่านั้นในขณะนี้ เติมเอฟเฟ็กต์พิเศษอย่างถูกต้อง หมายความว่า สถานะสุดท้าย (Iaebc7, b/166658128)
  • ตอนนี้ระบบนำมุมมอง Fragment ออกจากคอนเทนเนอร์เสมอ ก่อนที่จะถูกทำลาย (รหัส 5876)
  • ขณะนี้ตัวจัดการสถานะใหม่ลบการออกอย่างต่อเนื่อง ส่วนย่อยก่อนเพิ่มการป้อนมุมมอง (I41a6e)
  • ตอนนี้ตัวจัดการสถานะใหม่จะยึดตามการเปลี่ยนแปลงระดับการเข้าถึงของมุมมองส่วนย่อยอย่างชัดเจน ซึ่งหมายความว่าหากคุณตั้งค่ามุมมองของการป้อน Fragment เป็น 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 ซึ่งส่งผลต่อการจัดการเมธอด ภาพเคลื่อนไหว และการเปลี่ยนภาพ ตลอดจนวิธีจัดการธุรกรรมที่มีการเลื่อนเวลา ตัวเลือกนี้จะเปิดใช้โดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่ส่วนย่อย: การสร้างบล็อกโพสต์ภายในใหม่ (b/139536619, b/147749580)

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

ปัญหาต่อไปนี้จะได้รับการแก้ไขเฉพาะเมื่อใช้ State Manager ใหม่เท่านั้น

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

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

  • ตอนนี้คุณสามารถเรียกใช้ launch() บน ActivityResultLauncher ในเมธอดวงจร onCreate() ของส่วนย่อยได้แล้ว (b/161464278)
  • การเรียกใช้ registerForActivityResult() หลัง onCreate() จะมีข้อยกเว้นที่ระบุว่าไม่อนุญาตนี้แทนการส่งผลลัพธ์โดยไม่มีการแจ้งเตือนหลังจากการเปลี่ยนแปลงการกำหนดค่า (b/162255449)
  • ตอนนี้ FragmentActivity ใช้ OnContextAvailableListener API ที่เปิดตัวในกิจกรรม 1.2.0-alpha08 เพื่อคืนค่าสถานะของ FragmentManager ผู้ฟังทั้งหมดที่เพิ่มลงในคลาสย่อยของ 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 และแยกสถานะของ Fragment ออกจากกิจกรรมที่สำคัญ (b/156527405)
  • ตอนนี้ SavedStateRegistryOwner ที่แสดงผลโดย ViewTreeSavedStateRegistryOwner เชื่อมโยงกับวงจรของมุมมองส่วนย่อยแล้ว ซึ่งจะทำให้มีการบันทึกสถานะและคืนค่าพร้อมกับมุมมองของส่วนย่อย (b/158503763)

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

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

เวอร์ชัน 1.3.0-alpha06

10 มิถุนายน 2020

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 1.3.0-alpha05

20 พฤษภาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

เวอร์ชัน 1.3.0-alpha04

29 เมษายน 2020

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

ฟีเจอร์ใหม่

  • เพิ่มการรองรับการส่งผลลัพธ์ระหว่าง 2 Fragment ผ่าน API ใหม่ใน FragmentManager วิธีนี้เหมาะสำหรับส่วนย่อยของลำดับชั้น (หลัก/ย่อย), DialogFragments และส่วนย่อยในการนำทาง และดูแลให้มีการส่งผลลัพธ์ไปยัง 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() ใน Fragment จะไม่ขัดข้องอีกต่อไปเมื่อโฮสต์ Fragment นอกกิจกรรม (b/153762914)

เวอร์ชัน 1.3.0-alpha03

1 เมษายน 2020

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

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

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

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

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

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

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

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

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

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

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

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

  • BottomSheetDialogFragment วางตำแหน่งกล่องโต้ตอบบนหน้าจอไม่ถูกต้องแล้ว (b/151652127)

เวอร์ชัน 1.3.0-alpha01

4 มีนาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.2.4

เวอร์ชัน 1.2.4

1 เมษายน 2020

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

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

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

เวอร์ชัน 1.2.3

เวอร์ชัน 1.2.3

18 มีนาคม 2020

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

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

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

เวอร์ชัน 1.2.2

เวอร์ชัน 1.2.2

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

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

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

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

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

  • แก้ไขไฟล์ Fragment ProGuard เพื่อหลีกเลี่ยงคำเตือน 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)

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

เวอร์ชัน 1.2.0

เวอร์ชัน 1.2.0

22 มกราคม 2020

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

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

  • FragmentContainerView: FragmentContainerView เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก โดยแทนที่การใช้งาน FrameLayout หรือเลย์เอาต์อื่นๆ นอกจากนี้ยังรองรับ class, android:name และ android:tag ที่ไม่บังคับเช่นเดียวกับแท็ก <fragment> แต่ใช้ FragmentTransaction ปกติเพื่อเพิ่มส่วนย่อยเริ่มต้นนี้ แทนเส้นทางโค้ดที่กำหนดเองซึ่ง <fragment> ใช้
  • ช่วงเวลาของ onDestroyView(): ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเมื่อออก ออกจากการเปลี่ยนเฟรมเวิร์ก และออกจากการเปลี่ยน AndroidX (เมื่อใช้การเปลี่ยน 1.3.0) เพื่อดำเนินการให้เสร็จสมบูรณ์ก่อนเรียกใช้ onDestroyView()
  • add() และ replace() ตามคลาส: เพิ่มโอเวอร์โหลดใหม่ของ add() และ replace() ใน FragmentTransaction ที่รับ Class<? extends Fragment> และอาร์กิวเมนต์ Bundle ที่ไม่บังคับ วิธีการเหล่านี้ใช้ FragmentFactory ของคุณในการสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม ระบบได้เพิ่มส่วนขยาย 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() ใน Fragment แล้ว และแทนที่ด้วยเมธอด getParentFragmentManager() เดียว ซึ่งจะแสดงผล FragmentManager ที่ไม่ใช่ค่า Null จาก Fragment ที่เพิ่มเข้ามา (คุณสามารถใช้ isAdded() เพื่อกำหนดว่าการเรียกนั้นปลอดภัยหรือไม่)
  • การเลิกใช้งาน FragmentManager.enableDebugLogging(): เลิกใช้งานเมธอด FragmentManager.enableDebugLogging แบบคงที่แล้ว ตอนนี้ FragmentManager จะใช้ Log.isLoggable() สำหรับแท็ก FragmentManager ซึ่งจะช่วยให้คุณเปิดใช้การบันทึก DEBUG หรือ VERBOSE ได้โดยไม่ต้องคอมไพล์แอปซ้ำ

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

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

เวอร์ชัน 1.2.0-rc05

8 มกราคม 2020

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

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

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

เวอร์ชัน 1.2.0-rc04

18 ธันวาคม 2019

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

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

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

เวอร์ชัน 1.2.0-rc03

4 ธันวาคม 2019

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

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

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

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

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

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

  • ตอนนี้ Fragment จะขึ้นอยู่กับอายุการใช้งาน 2.2.0-rc03, Lifecycle ViewModel savedState 1.0.0-rc03 และกิจกรรม 1.1.0-rc03

เวอร์ชัน 1.2.0-rc02

7 พฤศจิกายน 2019

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

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

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

เวอร์ชัน 1.2.0-rc01

23 ตุลาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.2.0-beta02

11 ตุลาคม 2019

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

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

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

เวอร์ชัน 1.2.0-beta01

9 ตุลาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

  • onInflate() ของ Fragment ไม่ได้รับแอตทริบิวต์ที่ถูกต้องจาก FragmentContainerView เช่น NavHostFragment (b/142421837)

เวอร์ชัน 1.2.0-alpha04

18 กันยายน 2019

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

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

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

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

  • ตอนนี้ Fragment จะถูกทำลายอย่างถูกต้องขณะที่ภาพเคลื่อนไหวออกจาก Fragment อื่นๆ ทำงานอยู่ (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 กลับลำดับการวาดได้อย่างถูกต้องเมื่อนำ Fragment ออกจากกองซ้อนด้านหลัง (b/139104187)
  • แก้ปัญหาที่ภาพเคลื่อนไหวที่ไม่ถูกต้องจะทำงานเมื่อทั้งเปิดส่วนย่อยและเพิ่มส่วนย่อยใหม่พร้อมกัน (b/111659726)
  • ตอนนี้ Fragment จะรอให้การเปลี่ยน (นอกเหนือจากภาพเคลื่อนไหวซึ่งแก้ไขแล้วใน Fragment 1.2.0-alpha02) เสร็จสิ้นก่อนที่จะส่ง onDestroyView() (b/138741697)

เวอร์ชัน 1.2.0-alpha02

7 สิงหาคม 2019

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

ฟีเจอร์ใหม่

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

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

  • แนะนำ FragmentContainerView เป็นคอนเทนเนอร์ที่แนะนำอย่างยิ่งสำหรับ Fragment ที่เพิ่มแบบไดนามิก แทนที่การใช้งาน FrameLayout ฯลฯ เนื่องจากช่วยแก้ปัญหาการเรียงลำดับ Z ของภาพเคลื่อนไหวและการแทรกหน้าต่างไปยัง Fragments (b/37036000, aosp/985243, b/136494650)
  • เพิ่มเมธอด FragmentManager.findFragment(View) แบบคงที่เพื่อเรียก Fragment ที่มีจากมุมมองที่พองขึ้นโดย Fragment ส่วนขยาย Kotlin มีให้บริการในภาษาfragment-ktxด้วย (aosp/1090757)
  • เพิ่มโอเวอร์โหลดใหม่ของ add() และ replace() บน FragmentTransaction ที่ใช้อาร์กิวเมนต์ Class<? extends Fragment> และตัวเลือก Bundle ของอาร์กิวเมนต์ วิธีการเหล่านี้ใช้ FragmentFactory ของคุณในการสร้างอินสแตนซ์ของ Fragment ที่จะเพิ่ม มีการเพิ่มส่วนขยาย Kotlin ที่ใช้ประเภทที่ปรับแล้ว (เช่น fragmentTransaction.replace<YourFragment>(R.id.container)) ลงใน fragment-ktx ด้วย (b/126124987)
  • เพิ่มคำอธิบายประกอบ @MainThread รายการใน 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: ตอนนี้ Fragment จะยกเลิกการเปลี่ยนของ Fragments ที่เลื่อนออกไปอย่างถูกต้องแล้ว (b/138251858)
  • จาก Fragment 1.1.0-rc03: แก้ไขปัญหาที่การเรียกใช้ postponeEnterTransition() ที่มีระยะหมดเวลามากกว่า 1 ครั้งจะไม่ยกเลิกระยะหมดเวลาก่อนหน้านี้ (b/137797118)
  • จาก Fragment 1.1.0-rc02: แก้ไขข้อขัดข้องใน FragmentPagerAdapter และ FragmentStatePagerAdapter เมื่อนำรายการปัจจุบันออก (b/137209870)
  • ตอนนี้ Fragment จะรอให้ภาพเคลื่อนไหวเสร็จสิ้นก่อนที่จะส่ง onDestroyView() (b/136110528)
  • ตอนนี้ภาพเคลื่อนไหวของ Fragment จากส่วนย่อยและองค์ประกอบสืบทอดได้รับการจัดการอย่างเหมาะสมเมื่อทำให้ Fragment ระดับบนสุดเคลื่อนไหว (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 มีคลาส FragmentScenario สำหรับการทดสอบส่วนย่อยแบบแยกส่วน ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ Fragment ของแอป
  • Fragmentfactor: ตอนนี้คุณตั้งค่า FragmentFactory ใน FragmentManager เพื่อจัดการการสร้างอินสแตนซ์ Fragment ได้แล้ว ซึ่งจะนำข้อกำหนดที่เข้มงวดที่ต้องมีตัวสร้างที่ไม่มีอาร์กิวเมนต์ออก
  • การมอบสิทธิ์พร็อพเพอร์ตี้ 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 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ Fragments ยกเลิกการเปลี่ยนใน Fragments ที่ถูกเลื่อนออกไปอย่างถูกต้องแล้ว (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 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • ตอนนี้ Fragment จะอัปเดตการเปิดเผยอย่างเหมาะสมเมื่อใช้การดำเนินการ 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)
  • Fragment ย่อยจะไม่เคลื่อนไหวอีกต่อไปเมื่อแทนที่ Fragment หลัก (b/121017790)
  • ตอนนี้ระบบจะไม่สนใจภาพเคลื่อนไหวและการเปลี่ยนภาพของ Fragment เมื่อใช้ animateLayoutChanges="true" ซึ่งเป็นการแก้ไขปัญหาที่ Fragments ไม่ได้รับการทำลายอย่างถูกต้อง (b/116257087)

เวอร์ชัน 1.1.0-alpha09

16 พฤษภาคม 2019

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

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

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

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

  • ตอนนี้รายการในเมนูที่พองโดย Fragment ย่อยจะถูกนำออกอย่างถูกต้องเมื่อนำ Fragment หลักออก b/131581013

เวอร์ชัน 1.1.0-alpha08

7 พฤษภาคม 2019

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

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha07

25 เมษายน 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha06

3 เมษายน 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha05

13 มีนาคม 2019

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

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha04

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

ปล่อย androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 และ androidx.fragment:fragment-testing 1.1.0-alpha04 แล้ว

ฟีเจอร์ใหม่

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

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

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

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

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

เวอร์ชัน 1.1.0-alpha03

17 ธันวาคม 2018

ฟีเจอร์ใหม่

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

เวอร์ชัน 1.1.0-alpha02

3 ธันวาคม 2018

ฟีเจอร์ใหม่

  • ตอนนี้ส่วนขยาย Kotlin ของ FragmentActivity ให้คุณใช้ 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 รายการและ FragmentScenario ซึ่งสร้างขึ้นจาก androidx.test:core API ดูรายละเอียดเพิ่มเติมในเอกสารการทดสอบส่วนย่อย

ฟีเจอร์ใหม่

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

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

  • ขยายคำอธิบายประกอบของความสามารถในการเว้นว่างทั่วทั้ง Fragment API อย่างมาก แพลตฟอร์ม

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

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

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

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