ViewPager2

แสดง View หรือ Fragment ในรูปแบบที่ปัดได้
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
14 พฤษภาคม 2024 1.1.0 - - -

การขึ้นต่อกันของ AndroidX

หากต้องการใช้ ViewPager2 ให้เพิ่มทรัพยากร Dependency ของ AndroidX ต่อไปนี้ลงในไฟล์ build.gradle ของโปรเจ็กต์

ดึงดูด

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.1.0"
}

Kotlin

dependencies {
    implementation("androidx.viewpager2:viewpager2:1.1.0")
}

ความคิดเห็น

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

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

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

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0

14 พฤษภาคม 2024

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

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

  • แก้ไขข้อขัดข้องเมื่อใช้กับ RecyclerView 1.3.1-rc01 ขึ้นไป
  • ViewPager2 จะป้อนข้อมูล CollectionInfo และ CollectionItemInfo อย่างถูกต้อง ซึ่ง RecyclerView 1.2.0-alpha02 ขึ้นไปจะไม่ป้อนข้อมูลโดยค่าเริ่มต้นอีกต่อไป
  • เพิ่มFragmentTransactionCallbackอินเทอร์เฟซสำหรับการฟังการเปลี่ยนแปลงวงจรของ Fragment ที่เกิดขึ้นภายใน FragmentStateAdapter
  • แก้ไขFragmentStateAdapterปัญหาเกี่ยวกับการมองเห็นเมนู Fragment เริ่มต้นเมื่อเพิ่ม Fragment ลงใน FragmentManager
  • แก้ไขการเรียกใช้ Window Insets: ตอนนี้ทุกหน้าจะได้รับ Insets เดียวกัน เนื่องจากวิธีส่ง WindowInsets ใน API เวอร์ชันเก่า (< API 30) อาจทำให้ไม่สามารถใช้ Inset กับ View ที่อยู่ระดับเดียวกันได้ คุณจึงต้องเลือกใช้การแก้ไขนี้ผ่าน WindowInsetsApplier.install(viewPager2) หากต้องการใช้ Inset ในอุปกรณ์ที่ใช้ API เวอร์ชันต่ำกว่า 30

เวอร์ชัน 1.1.0-rc01

1 พฤษภาคม 2024

androidx.viewpager2:viewpager2:1.1.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงที่โดดเด่นนับตั้งแต่ 1.1.0-beta02 เวอร์ชัน 1.1.0-rc01 มีการเปลี่ยนแปลงเหล่านี้

เวอร์ชัน 1.1.0-beta02

24 พฤษภาคม 2023

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

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

  • เพิ่มการเรียกกลับการบันทึกสถานะ Fragment ไปยัง FragmentTransactionCallback (I45b90)
  • ViewPager2 จะไม่พยายามแก้ไขการเรียกใช้ WindowInsets ที่เสียของ API เวอร์ชันเก่า (< 30) อีกต่อไป เนื่องจากตัวแก้ไขเองอาจเป็นอันตรายต่อแอปอื่นๆ ที่เกี่ยวข้องกับ ViewPager2 การแก้ไขนี้ยังคงใช้งานได้ แต่ได้เปลี่ยนเป็นแบบเลือกใช้เพื่อให้นักพัฒนาแอปตัดสินใจได้ทีละกรณี เปิดใช้การแก้ไขโดยโทรหา WindowInsetsApplier.install(viewPager2)) (Ic9a85)

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

  • แก้ไขปัญหาความเข้ากันได้กับ RecyclerView เวอร์ชันใหม่กว่า ผู้ใช้ ViewPager2 เวอร์ชันนี้ควรอัปเดตเป็นอย่างน้อย RecyclerView 1.3.1-rc01

เวอร์ชัน 1.1.0-beta01

4 สิงหาคม 2021

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

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

  • อัปเกรด androidx เพื่อใช้ Kotlin 1.4 (Id6471, b/165307851, b/165300826)

  • เปลี่ยนไปกำหนดเป้าหมาย Java 8 สำหรับไลบรารี androidx ทั้งหมด (2923f39)

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

  • แก้ไขการเรียกใช้ Inset ของหน้าต่าง ตอนนี้ทุกหน้าจะได้รับ Inset เดียวกันแล้ว (I47fef)

เวอร์ชัน 1.1.0-alpha01

1 เมษายน 2020

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

การเปิดตัวนี้มาพร้อมกับการเปลี่ยนแปลงใน RecyclerView 1.2.0-alpha02 โดยการป้อนข้อมูล CollectionInfo และ CollectionItemInfo ที่ RecyclerView ไม่ได้ให้ไว้โดยค่าเริ่มต้นอีกต่อไป เมื่ออัปเดตเป็น RecyclerView 1.2.0-alpha02 ให้อัปเดต ViewPager2 ด้วยเพื่อป้องกันการถดถอยของฟีเจอร์การช่วยเหลือพิเศษ

ฟีเจอร์ใหม่

  • เพิ่มFragmentTransactionCallbackอินเทอร์เฟซสำหรับการฟังการเปลี่ยนแปลงวงจรของ Fragment ที่เกิดขึ้นภายใน FragmentStateAdapter (Ibda77)

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

  • แก้ไขFragmentStateAdapterปัญหาเกี่ยวกับการมองเห็นเมนู Fragment เริ่มต้นเมื่อเพิ่ม Fragment ลงใน FragmentManager (I9d2ff, b/144442240)

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0

20 พฤศจิกายน 2019

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

ฟีเจอร์หลักของเวอร์ชัน 1.0.0

  • การปรับปรุงจากการใช้งาน ViewPager ก่อนหน้านี้มีดังนี้
    • รองรับเลย์เอาต์ RTL (จากขวาไปซ้าย)
    • การรองรับการวางแนวตั้ง
    • การสนับสนุน Fragment ที่เชื่อถือได้ (รวมถึงการจัดการการเปลี่ยนแปลงคอลเล็กชัน Fragment ที่เกี่ยวข้อง)
    • ภาพเคลื่อนไหวการเปลี่ยนแปลงชุดข้อมูล (รวมถึงการรองรับ DiffUtil)
  • ย้ายข้อมูลจากการใช้งาน ViewPager ก่อนหน้าได้ง่ายๆ (ความเท่าเทียมของ API หากเป็นไปได้) ดูคำแนะนำในการย้ายข้อมูลและแอปตัวอย่าง

ดูคำแนะนำเกี่ยวกับการใช้ ViewPager2 เพื่อเลื่อนระหว่าง Fragment

เวอร์ชัน 1.0.0-rc01

23 ตุลาคม 2019

androidx.viewpager2:viewpager2:1.0.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงใดๆ ตั้งแต่ 1.0.0-beta05 เวอร์ชัน 1.0.0-rc01 มีคอมมิตเหล่านี้

เวอร์ชัน 1.0.0-beta05

9 ตุลาคม 2019

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

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

  • แก้ไขปัญหา requestFocus ในหน้าจอที่อยู่นอกหน้าจอซึ่งทำให้เกิดการเปลี่ยนหน้า ตอนนี้ลักษณะการทำงานสอดคล้องกับ ViewPager เดิมแล้ว (b/140656866)
  • แก้ไขปัญหาที่focus ยังคงอยู่ในหน้าจอที่ไม่ได้แสดงหลังจากเปลี่ยนหน้า ตอนนี้ระบบจะล้างโฟกัสเมื่อเปลี่ยนหน้า (b/140656866)
  • แก้ไขการเรียงลำดับของธุรกรรมFragmentหยุดชั่วคราว / กลับมาดำเนินการต่อเมื่อเปลี่ยนหน้า (ตอนนี้เราจะหยุดรายการหลักเก่าชั่วคราวก่อนเสมอ แล้วจึงกลับมาดำเนินการต่อกับรายการใหม่) (b/139489059)
  • แก้ไขสำหรับ canScrollHorizontally(int) และ canScrollVertically(int) ตอนนี้ฟังก์ชันเหล่านี้จะแสดงผลว่า ViewPager2 เลื่อนในทิศทางที่กำหนดได้หรือไม่ (b/141848404)
  • เราได้แก้ไขปัญหาใน SwipeRefreshLayout เพื่อให้ทำงานร่วมกับ ViewPager2 ได้ดียิ่งขึ้น

เวอร์ชัน 1.0.0-beta04

5 กันยายน 2019

androidx.viewpager2:viewpager2:1.0.0-beta04 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • แก้ไขปัญหาเคสขอบFragmentStateAdapterกับFragment Back Stack (b/139095195)
  • แก้ไขปัญหาสำหรับ EditText ที่มีการกำหนดค่าแอตทริบิวต์บางอย่างซึ่งทำให้เกิดการเลื่อน/การข้ามหน้าเมื่อพิมพ์/โฟกัส (b/138044582, b/139432498)
  • แก้ไขปัญหาเกี่ยวกับอินสแตนซ์ ItemDecoration และวิธีแก้ปัญหาการวางตำแหน่งตัวบ่งชี้การเลื่อนเกิน (b/139012032)
  • เราได้แก้ไขปัญหาหลายอย่างในคอมโพเนนต์อื่นๆ เพื่อให้ทำงานร่วมกับ ViewPager2 ได้ดียิ่งขึ้น ได้แก่ RecyclerView, NestedScrollView และ Navigation

เวอร์ชัน 1.0.0-beta03

7 สิงหาคม 2019

androidx.viewpager2:viewpager2:1.0.0-beta03 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • แก้ไขปัญหา FragmentStateAdapter ที่มีสถานะ Fragment ชั่วคราว b/134246546
  • แก้ไขปัญหา currentItem และ scrollState เมื่อมีการเปลี่ยนแปลงชุดข้อมูลในระหว่างการเลื่อนแบบสมูท (กรณีขอบได้รับการแก้ไขแล้ว) b/137642608
  • แก้ไขภาพเคลื่อนไหว PageTransformer (รวมถึง MarginPageTransformer) ที่ขัดแย้งกับภาพเคลื่อนไหวการเปลี่ยนแปลงชุดข้อมูล b/134658996
  • แก้ไขภาพเคลื่อนไหวการเลื่อนอย่างราบรื่นในชุดข้อมูลขนาดใหญ่ (float ขีดจำกัดค่าจำนวนเต็ม) b/134858960

เวอร์ชัน 1.0.0-beta02

19 กรกฎาคม 2019

androidx.viewpager2:viewpager2:1.0.0-beta02 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • นำการขึ้นต่อกันของ Jacoco ที่ไม่ได้ตั้งใจออก ซึ่งมีการนำมาใช้ใน 1.0.0-beta01 (b/137782951)

เวอร์ชัน 1.0.0-beta01

17 กรกฎาคม 2019

androidx.viewpager2:viewpager2:1.0.0-beta01 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

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

  • แก้ไขปัญหา ViewPager2.updateCurrentItem ขัดข้องขณะเลื่อนและอัปเดตชุดข้อมูล
  • แก้ไขข้อขัดข้องของ NullPointerException ที่เกี่ยวข้องกับ ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING เป็นการเลื่อนสัมผัสเริ่มต้นแล้ว
  • แก้ไขเหตุการณ์ OnPageChangeCallback สำหรับอแดปเตอร์ที่ว่างเปล่า (หน้า 0 แทน -1 เพื่อให้สอดคล้องกับ ViewPager1)

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

เวอร์ชัน 1.0.0-alpha06

2 กรกฎาคม 2019

androidx.viewpager2:viewpager2:1.0.0-alpha06 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

นี่คือเวอร์ชันอัลฟ่าสุดท้ายที่เราวางแผนไว้ก่อนที่จะหยุดการอัปเดต API และเปลี่ยนไปใช้เวอร์ชันเบต้า โปรดส่งความคิดเห็นเกี่ยวกับ API ให้เรา

ฟีเจอร์ใหม่

  • รากฐานสำหรับการปรับปรุงการช่วยเหลือพิเศษ: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN ฯลฯ

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

  • FragmentStateAdapter: Fragmentที่ไม่ใช่รายการหลักจะจำกัดไว้ที่ STARTED และตั้งค่า menuVisibility เป็น false
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: เอกสารสำหรับ positionแก้ไขแล้ว

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

  • currentItem หลังจากแก้ไขการเปลี่ยนแปลงชุดข้อมูล / การเปลี่ยนแปลงอะแดปเตอร์แล้ว
  • แก้ไขปัญหาเกี่ยวกับ MarginPageTransformer ที่มีปัญหา offscreenPageLimit แล้ว
  • การดำเนินการด้านการช่วยเหลือพิเศษขณะอยู่ในFakeDragแก้ไขพฤติกรรมแล้ว

เวอร์ชัน 1.0.0-alpha05

5 มิถุนายน 2019

androidx.viewpager2:viewpager2:1.0.0-alpha05 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ItemDecorator เปิดตัวพร้อมลักษณะการทำงานที่สอดคล้องกับ RecyclerView
  • MarginPageTransformer เปิดตัวเพื่อช่วยให้สร้างช่องว่างระหว่างหน้า (นอกส่วนที่เว้นไว้ของหน้า) ได้
  • CompositePageTransformer เปิดตัวเพื่อช่วยให้คุณรวม PageTransformer หลายรายการได้

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

  • เปลี่ยนชื่อวิธี FragmentStateAdapter#getItem เป็น FragmentStateAdapter#createFragment - ชื่อวิธีเดิมเป็นสาเหตุของข้อบกพร่องในอดีต
  • มูลค่า OFFSCREEN_PAGE_LIMIT_DEFAULT เปลี่ยนจาก 0 เป็น -1 ไม่จำเป็นต้องเปลี่ยนแปลงโค้ดไคลเอ็นต์หากใช้OFFSCREEN_PAGE_LIMIT_DEFAULTค่าคงที่

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

  • แก้ไขลักษณะการทำงานของ getCurrentItem() เมื่อ SCROLL_STATE_SETTLING ถูกขัดจังหวะด้วยการลากในทิศทางตรงกันข้าม
  • FragmentStateAdapter แก้ไขปัญหาเกี่ยวกับตัวโหลดคลาสในบริบท "อย่าเก็บกิจกรรม"
  • setOffscreenPageLimit ปรับปรุงเอกสารประกอบ

เวอร์ชัน 1.0.0-alpha04

7 พฤษภาคม 2019

androidx.viewpager2:viewpager2:1.0.0-alpha04 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • offscreenPageLimit: ช่วยให้ควบคุมจำนวนหน้า View / Fragment ที่เก็บไว้ในลำดับชั้นการแสดงผลได้อย่างเข้มงวด

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

  • แอตทริบิวต์ orientation และ isUserScrollable ไม่ได้เป็นส่วนหนึ่งของ SavedState อีกต่อไป
  • saveState และ restoreState ที่กำหนดให้เป็นขั้นสุดท้ายใน FragmentStateAdapter
  • ViewPager2.Orientation และViewPager2.ScrollState คำอธิบายประกอบที่ตั้งค่าเป็นแบบไม่เป็นสาธารณะ

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

  • SavedState: แก้ไขปัญหาเกี่ยวกับการกู้คืนเมื่อ Activity ถูกทำลาย / สร้างขึ้นใหม่
  • SavedState: เลื่อนการกู้คืนจนกว่าจะตั้งค่าอะแดปเตอร์
  • OnPageChangeCallback: แก้ไขกรณีขอบเล็กๆ น้อยๆ

เวอร์ชัน 1.0.0-alpha03

3 เมษายน 2019

androidx.viewpager2:viewpager2:1.0.0-alpha03 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ความสามารถในการเลื่อน ViewPager2 โดยใช้โปรแกรม: fakeDragBy(offsetPx)

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

  • FragmentStateAdapter ต้องมีออบเจ็กต์ Lifecycle แล้ว เพิ่มตัวสร้างยูทิลิตี 2 รายการเพื่อรับจากโฮสต์ FragmentActivity หรือโฮสต์ Fragment

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

  • การแก้ไขการสนับสนุน Fragment หลายรายการ
    • การจัดการการอัปเดตชุดข้อมูลขณะย่อหน้าต่าง หรือระหว่างการหมุนหน้าจอ
    • การนำ Fragment ที่ไม่เกี่ยวข้องออกหลังจากหมุน
    • นำสถานะที่บันทึกไว้ของรายการที่นำออกแล้วออก
  • PageChangeCallback: แก้ไขการคำนวณออฟเซ็ตของหน้าสำหรับหน้าที่มีขอบ

เวอร์ชัน 1.0.0-alpha02

13 มีนาคม 2019

androidx.viewpager2:viewpager2:1.0.0-alpha02 ได้รับการเผยแพร่แล้ว ดูรายการคอมมิตทั้งหมดที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • ความสามารถในการปิดใช้ข้อมูลจากผู้ใช้ (setUserInputEnabled, isUserInputEnabled)

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

  • ViewPager2 class final

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

  • การแก้ไขความเสถียร FragmentStateAdapter รายการ

เวอร์ชัน 1.0.0-alpha01

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

androidx.viewpager2:viewpager2 1.0.0-alpha01 ได้รับการเผยแพร่แล้ว นี่คือรุ่นแรกของ ViewPager2

ฟีเจอร์ใหม่

  • เมื่อเทียบกับรุ่นก่อนหน้า android.support.v4.view.ViewPager (VP1) แล้ว
    • รองรับเลย์เอาต์จากขวาไปซ้าย (RTL)
    • การรองรับการวางแนวตั้ง
    • notifyDataSetChanged ใช้งานได้เต็มรูปแบบ (แก้ไขข้อบกพร่อง VP1 แล้ว)

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

  • FragmentStateAdapter แทนที่ FragmentStatePagerAdapter
  • RecyclerView.Adapter แทนที่ PagerAdapter
  • registerOnPageChangeCallback แทนที่ addPageChangeListener

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

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • การเลื่อนที่ฝังไว้ขนานกับการวางแนว
  • ไม่มีการควบคุมขีดจำกัดนอกหน้าจอ
  • ต้องผสานรวม TabLayout ให้ดียิ่งขึ้น
  • ไม่มีตัวตั้งค่า pageWidth (บังคับ 100%/100%)
  • การเปลี่ยนรูปแบบหน้าเว็บ: ไม่มีตัวเลือกเลเยอร์ฮาร์ดแวร์/ซอฟต์แวร์ ไม่มีลำดับการวาดแบบย้อนกลับ
  • แสดงรายการปัจจุบันไว้เมื่อแทรกหน้าก่อนหน้าปัจจุบัน
  • การไปยังส่วนต่างๆ ด้วยแป้นพิมพ์ยังไม่เสร็จสมบูรณ์
  • FragmentStateAdapterการปรับปรุงความเสถียร / ประสิทธิภาพที่กำลังจะมาถึง