ViewPager2

Menampilkan View atau Fragment dalam format yang dapat digeser.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
14 Mei 2024 1.1.0 - - -

Dependensi AndroidX

Untuk menggunakan ViewPager2, tambahkan dependensi AndroidX berikut ke file build.gradle project:

Groovy

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

Kotlin

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

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.1.0

Versi 1.1.0

14 Mei 2024

androidx.viewpager2:viewpager2:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

Perubahan penting sejak versi 1.0.0

  • Memperbaiki error saat digunakan dengan RecyclerView 1.3.1-rc01 atau yang lebih tinggi.
  • ViewPager2 kini mengisi dengan benar CollectionInfo dan CollectionItemInfo yang tidak lagi diisi secara default oleh RecyclerView 1.2.0-alpha02 dan yang lebih tinggi.
  • Menambahkan antarmuka FragmentTransactionCallback untuk memproses perubahan siklus proses fragmen yang terjadi di dalam FragmentStateAdapter.
  • Perbaikan masalah FragmentStateAdapter terkait visibilitas menu fragmen awal saat menambahkan fragmen ke file FragmentManager.
  • Memperbaiki pengiriman inset jendela: semua halaman kini mendapatkan inset yang sama. Sehubungan dengan cara pengiriman WindowInsets pada versi API lama (< API 30) yang dapat mencegah inset tersedia untuk tampilan yang setara, Anda harus memilih untuk menerapkan perbaikan ini melalui WindowInsetsApplier.install(viewPager2) jika ingin menerapkan inset di perangkat < API 30.

Versi 1.1.0-rc01

1 Mei 2024

androidx.viewpager2:viewpager2:1.1.0-rc01 dirilis tanpa perubahan penting sejak versi 1.1.0-beta02. Versi 1.1.0-rc01 berisi commit ini.

Versi 1.1.0-beta02

24 Mei 2023

androidx.viewpager2:viewpager2:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Perubahan API

  • Menambahkan callback penyimpanan status Fragment ke FragmentTransactionCallback. (I45b90)
  • ViewPager2 kini tidak lagi mencoba memperbaiki pengiriman WindowInsets versi API lama yang rusak (< 30), karena perbaikan itu sendiri dapat membahayakan kerabat ViewPager2. Perbaikan masih tersedia, tetapi telah menjadi keikutsertaan sehingga developer dapat memutuskan kasus per kasus. Aktifkan perbaikan dengan memanggil WindowInsetsApplier.install(viewPager2)). (IC9a85)

Perbaikan Bug

  • Memperbaiki masalah kompatibilitas dengan versi RecyclerView yang lebih baru. Pengguna versi ViewPager2 ini harus mengupdate setidaknya ke RecyclerView 1.3.1-rc01.

Versi 1.1.0-beta01

4 Agustus 2021

androidx.viewpager2:viewpager2:1.1.0-beta01 dirilis. Versi 1.1.0-beta01 berisi commit ini.

Perubahan API

Perbaikan Bug

  • Memperbaiki pengiriman inset jendela, semua halaman kini mendapatkan inset yang sama. (I47fef)

Versi 1.1.0-alpha01

1 April 2020

androidx.viewpager2:viewpager2:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit berikut.

Rilis ini disertai dengan perubahan pada RecyclerView 1.2.0-alpha02 dengan mengisi CollectionInfo dan CollectionItemInfo yang tidak lagi disediakan RecyclerView secara default. Saat mengupdate ke RecyclerView 1.2.0-alpha02, update juga ViewPager2 untuk mencegah regresi Aksesibilitas.

Fitur Baru

  • Menambahkan antarmuka FragmentTransactionCallback untuk memproses perubahan siklus proses fragmen yang terjadi di dalam FragmentStateAdapter. (Ibda77)

Perbaikan Bug

  • Perbaikan masalah FragmentStateAdapter terkait visibilitas menu fragmen awal saat menambahkan fragmen ke file FragmentManager. (I9d2ff, b/144442240)

Versi 1.0.0

Versi 1.0.0

20 November 2019

androidx.viewpager2:viewpager2:1.0.0 dirilis tanpa perubahan dari versi 1.0.0-rc01. Versi 1.0.0 berisi commit berikut.

Fitur utama 1.0.0

  • Peningkatan dari penerapan ViewPager sebelumnya:
    • Dukungan tata letak RTL (kanan-ke-kiri)
    • Dukungan orientasi vertikal
    • Dukungan Fragment yang andal (termasuk penanganan perubahan pada kumpulan Fragment yang sudah ada)
    • Animasi perubahan set data (termasuk dukungan DiffUtil)
  • Migrasi yang mudah dari implementasi ViewPager sebelumnya (API yang sama, jika memungkinkan). Lihat panduan migrasi dan aplikasi contoh.

Lihat panduan tentang penggunaan ViewPager2 untuk beralih antar-Fragment.

Versi 1.0.0-rc01

23 Oktober 2019

androidx.viewpager2:viewpager2:1.0.0-rc01 dirilis tanpa perubahan sejak 1.0.0-beta05. Versi 1.0.0-rc01 berisi commit berikut.

Versi 1.0.0-beta05

9 Oktober 2019

androidx.viewpager2:viewpager2:1.0.0-beta05 dirilis. Versi 1.0.0-beta05 berisi commit berikut.

Perbaikan bug

  • Perbaikan untuk requestFocus pada halaman di luar layar yang menyebabkan perubahan halaman. Perilaku ini kini konsisten dengan ViewPager yang asli. (b/140656866)
  • Perbaikan untuk focus yang tetap ada pada halaman di luar layar setelah halaman berubah. Fokus kini dapat dihapus saat mengubah halaman. (b/140656866)
  • Perbaikan perintah transaksi jeda/lanjutkan Fragment saat mengubah halaman (kini item utama yang lama selalu dijeda sebelum item yang baru dilanjutkan). (b/139489059)
  • Perbaikan untuk canScrollHorizontally(int) dan canScrollVertically(int), yang kini akan menentukan apakah ViewPager2 dapat men-scroll ke arah yang ditentukan. (b/141848404)
  • Perbaikan masalah dalam SwipeRefreshLayout agar berfungsi lebih baik dengan ViewPager2.

Versi 1.0.0-beta04

5 September 2019

androidx.viewpager2:viewpager2:1.0.0-beta04 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • Perbaikan untuk masalah kasus ekstrem FragmentStateAdapter dengan data Fragment sebelumnya. (b/139095195)
  • Perbaikan untuk EditText dengan konfigurasi atribut tertentu yang menyebabkan scroll/halaman terlompati saat mengetik/mengarahkan fokus. (b/138044582, b/139432498)
  • Perbaikan untuk masalah terkait instance ItemDecoration, dan solusi untuk penempatan indikator overscroll. (b/139012032)
  • Perbaikan sejumlah masalah dalam komponen lain agar berfungsi lebih baik dengan ViewPager2: RecyclerView, NestedScrollView, dan Navigation.

Versi 1.0.0-beta03

7 Agustus 2019

androidx.viewpager2:viewpager2:1.0.0-beta03 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • Perbaikan untuk masalah FragmentStateAdapter terkait status Fragment transien. b/134246546
  • Perbaikan untuk masalah currentItem dan scrollState saat set data diubah pada waktu scroll halus (kasus ekstrem telah ditangani). b/137642608
  • Perbaikan untuk animasi PageTransformer (termasuk MarginPageTransformer) yang bermasalah dengan animasi perubahan set data. b/134658996
  • Perbaikan untuk animasi scroll halus dalam set data besar (batas nilai bilangan bulat float). b/134858960

Versi 1.0.0-beta02

19 Juli 2019

androidx.viewpager2:viewpager2:1.0.0-beta02 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • Menghapus dependensi jacoco tidak disengaja yang diperkenalkan dalam 1.0.0-beta01. (b/137782951)

Versi 1.0.0-beta01

17 Juli 2019

androidx.viewpager2:viewpager2:1.0.0-beta01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perbaikan bug

  • Perbaikan untuk error ViewPager2.updateCurrentItem saat men-scroll dan mengupdate set data
  • Perbaikan untuk error NullPointerException yang terkait dengan ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING sekarang menjadi slop sentuh default
  • Perbaikan peristiwa OnPageChangeCallback untuk adaptor kosong (halaman 0, bukannya -1 untuk kesamaan dengan ViewPager1)

Masalah umum

Versi 1.0.0-alpha06

2 Juli 2019

androidx.viewpager2:viewpager2:1.0.0-alpha06 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Ini adalah versi alfa terakhir yang sudah direncanakan sebelum pembekuan API ini dan peralihan ke beta - harap berikan masukan API.

Fitur baru

  • Fondasi untuk Aksesibilitas yang lebih baik: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN, dll.

Perubahan API

  • FragmentStateAdapter: Fragment item nonprimer dibatasi pada STARTED, dan menuVisibility-nya ditetapkan ke false.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: dokumentasi untuk position telah diperbaiki.

Perbaikan bug

  • Perbaikan currentItem setelah perubahan set data/perubahan adaptor.
  • Perbaikan masalah MarginPageTransformer dengan offscreenPageLimit.
  • Perbaikan tindakan aksesibilitas saat perilaku FakeDrag sedang aktif.

Versi 1.0.0-alpha05

5 Juni 2019

androidx.viewpager2:viewpager2:1.0.0-alpha05 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • ItemDecorator diperkenalkan dengan perilaku yang konsisten dengan RecyclerView.
  • MarginPageTransformer diperkenalkan untuk memungkinkan pembuatan ruang antarhalaman (di luar inset halaman).
  • CompositePageTransformer diperkenalkan untuk memungkinkan penggabungan beberapa PageTransformer.

Perubahan API

  • Metode FragmentStateAdapter#getItem diganti namanya menjadi FragmentStateAdapter#createFragment. Nama metode yang sebelumnya telah terbukti mengakibatkan bug.
  • Nilai OFFSCREEN_PAGE_LIMIT_DEFAULT diubah dari 0 menjadi -1. Perubahan kode klien tidak diperlukan jika konstanta OFFSCREEN_PAGE_LIMIT_DEFAULT digunakan.

Perbaikan bug

  • Pembetulan perilaku getCurrentItem() saat SCROLL_STATE_SETTLING terganggu oleh peristiwa tarik ke arah yang berlawanan.
  • Penanganan masalah loader class FragmentStateAdapter dalam konteks "Jangan pertahankan aktivitas".
  • Penyempurnaan dokumentasi setOffscreenPageLimit.

Versi 1.0.0-alpha04

7 Mei 2019

androidx.viewpager2:viewpager2:1.0.0-alpha04 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • offscreenPageLimit: memungkinkan kontrol yang ketat atas jumlah halaman yang dipertahankan oleh View/Fragment dalam hierarki tampilan

Perubahan API

  • Atribut orientation dan isUserScrollable tidak lagi menjadi bagian dari SavedState
  • Metode saveState dan restoreState menjadi final dalam FragmentStateAdapter
  • Anotasi ViewPager2.Orientation dan ViewPager2.ScrollState menjadi nonpublik

Perbaikan bug

  • SavedState: perbaikan masalah pemulihan yang terjadi saat Activity dihancurkan/dibuat ulang
  • SavedState: pemulihan yang ditunda hingga adaptor ditetapkan
  • OnPageChangeCallback: perbaikan kasus ekstrem kecil

Versi 1.0.0-alpha03

3 April 2019

androidx.viewpager2:viewpager2:1.0.0-alpha03 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Kemampuan untuk men-scroll ViewPager2 secara terprogram: fakeDragBy(offsetPx).

Perubahan API

  • FragmentStateAdapter sekarang membutuhkan objek Lifecycle. Dua konstruktor utilitas ditambahkan agar dapat diperoleh dari FragmentActivity host atau Fragment host.

Perbaikan bug

  • Sejumlah perbaikan dukungan Fragment:
    • penanganan update set data saat diminimalkan, atau selama rotasi layar;
    • penghapusan Fragment yang tidak relevan setelah rotasi;
    • penghapusan status tersimpan pada item yang telah dihapus.
  • PageChangeCallback: perbaikan penghitungan offset halaman untuk halaman yang memiliki margin.

Versi 1.0.0-alpha02

13 Maret 2019

androidx.viewpager2:viewpager2:1.0.0-alpha02 dirilis. Daftar lengkap commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Kemampuan untuk menonaktifkan input pengguna (setUserInputEnabled, isUserInputEnabled)

Perubahan API

  • Class ViewPager2 dinyatakan final

Perbaikan bug

  • Perbaikan kestabilan FragmentStateAdapter

Versi 1.0.0-alpha01

7 Februari 2019

androidx.viewpager2:viewpager2 1.0.0-alpha01 dirilis. Ini adalah rilis pertama ViewPager2.

Fitur baru

  • Membandingkan dengan android.support.v4.view.ViewPager (VP1) sebelumnya:
    • Dukungan tata letak kanan-ke-kiri (RTL)
    • Dukungan orientasi vertikal
    • notifyDataSetChanged berfungsi penuh (bug VP1 telah diatasi)

Perubahan API

  • FragmentStateAdapter menggantikan FragmentStatePagerAdapter
  • RecyclerView.Adapter menggantikan PagerAdapter
  • registerOnPageChangeCallback menggantikan addPageChangeListener

Masalah umum

  • clipToPadding
  • tidak ada fakeDrag
  • JavaDoc
  • nested scrolling paralel dengan orientasi
  • tidak ada kontrol batas luar layar
  • memerlukan integrasi TabLayout yang lebih baik
  • tidak ada penyetel pageWidth (dipaksa 100%/100%)
  • transformer halaman: tidak ada pilihan lapisan hardware/software; tidak ada urutan menggambar terbalik
  • membuat item saat ini tetap terlihat saat suatu halaman disisipkan sebelum halaman saat ini
  • navigasi keyboard perlu diperbaiki
  • Perbaikan stabilitas/performa FragmentStateAdapter akan segera hadir