ViewPager2
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 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อย่างถูกต้อง ซึ่ง RecyclerView1.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เวอร์ชันนี้ควรอัปเดตเป็นอย่างน้อยRecyclerView1.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กับFragmentBack 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เป็น falsePageTransformer,MarginPageTransformer,CompositePageTransformer: เอกสารสำหรับpositionแก้ไขแล้ว
แก้ไขข้อบกพร่อง
currentItemหลังจากแก้ไขการเปลี่ยนแปลงชุดข้อมูล / การเปลี่ยนแปลงอะแดปเตอร์แล้ว- แก้ไขปัญหาเกี่ยวกับ
MarginPageTransformerที่มีปัญหาoffscreenPageLimitแล้ว - การดำเนินการด้านการช่วยเหลือพิเศษขณะอยู่ใน
FakeDragแก้ไขพฤติกรรมแล้ว
เวอร์ชัน 1.0.0-alpha05
5 มิถุนายน 2019
androidx.viewpager2:viewpager2:1.0.0-alpha05 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
ItemDecoratorเปิดตัวพร้อมลักษณะการทำงานที่สอดคล้องกับRecyclerViewMarginPageTransformerเปิดตัวเพื่อช่วยให้สร้างช่องว่างระหว่างหน้า (นอกส่วนที่เว้นไว้ของหน้า) ได้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ที่กำหนดให้เป็นขั้นสุดท้ายในFragmentStateAdapterViewPager2.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แทนที่FragmentStatePagerAdapterRecyclerView.Adapterแทนที่PagerAdapterregisterOnPageChangeCallbackแทนที่addPageChangeListener
ปัญหาที่ทราบ
- clipToPadding
- no fakeDrag
- JavaDoc
- การเลื่อนที่ฝังไว้ขนานกับการวางแนว
- ไม่มีการควบคุมขีดจำกัดนอกหน้าจอ
- ต้องผสานรวม TabLayout ให้ดียิ่งขึ้น
- ไม่มีตัวตั้งค่า pageWidth (บังคับ 100%/100%)
- การเปลี่ยนรูปแบบหน้าเว็บ: ไม่มีตัวเลือกเลเยอร์ฮาร์ดแวร์/ซอฟต์แวร์ ไม่มีลำดับการวาดแบบย้อนกลับ
- แสดงรายการปัจจุบันไว้เมื่อแทรกหน้าก่อนหน้าปัจจุบัน
- การไปยังส่วนต่างๆ ด้วยแป้นพิมพ์ยังไม่เสร็จสมบูรณ์
FragmentStateAdapterการปรับปรุงความเสถียร / ประสิทธิภาพที่กำลังจะมาถึง