RecyclerView
dapat menampilkan data dalam jumlah besar menggunakan resource grafis
yang minimal. Saat pengguna men-scroll item di RecyclerView
, instance
View
item yang telah di-scroll keluar layar akan digunakan kembali untuk membuat item baru
saat di-scroll di layar. Namun, perubahan konfigurasi, seperti rotasi perangkat,
dapat mereset status RecyclerView
, yang memaksa pengguna kembali men-scroll ke
posisi sebelumnya dalam daftar item.
RecyclerView
harus mempertahankan statusnya—terutama, posisi
scroll—dan status elemen daftarnya selama semua perubahan
konfigurasi.
Mempertahankan status
Tetapkan kebijakan pemulihan status RecyclerView.Adapter
untuk menyimpan
posisi scroll RecyclerView
. Menyimpan status RecyclerView
item daftar. Tambahkan
status item daftar ke adaptor RecyclerView
, dan pulihkan status
item daftar saat terikat ke ViewHolder
.
1. Mengaktifkan kebijakan pemulihan status Adapter
Aktifkan kebijakan pemulihan status adaptor RecyclerView
sehingga
posisi scroll RecyclerView
tetap dipertahankan saat terjadi perubahan
konfigurasi. Tambahkan spesifikasi kebijakan ke konstruktor adaptor:
Kotlin
class MyAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() { init { stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY } ... }
Java
class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public Adapter() { setStateRestorationPolicy(StateRestorationPolicy.PREVENT_WHEN_EMPTY); } ... }
2. Menyimpan status item daftar stateful
Simpan status item daftar RecyclerView
kompleks, seperti item yang berisi elemen EditText
. Misalnya, untuk menyimpan status EditText
, tambahkan callback yang mirip dengan pengendali onClick
untuk menangkap perubahan teks. Dalam callback, tentukan data yang akan disimpan:
Kotlin
input.addTextChangedListener( afterTextChanged = { text -> text?.let { // Save state here. } } )
Java
input.addTextChangedListener(new TextWatcher() { ... @Override public void afterTextChanged(Editable s) { // Save state here. } });
Deklarasikan callback di Activity
atau Fragment
Anda. Gunakan ViewModel
untuk
menyimpan status.
3. Menambahkan status item daftar ke Adapter
Tambahkan status item daftar ke RecyclerView.Adapter
Anda. Teruskan status item
ke konstruktor adaptor saat Activity
atau Fragment
host Anda dibuat:
Kotlin
val adapter = MyAdapter(items, viewModel.retrieveState())
Java
MyAdapter adapter = new MyAdapter(items, viewModel.retrieveState());
4. Memulihkan status item daftar dalam ViewHolder
adaptor
Di RecyclerView.Adapter
, saat Anda mengikat ViewHolder
ke item,
pulihkan status item:
Kotlin
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { ... val item = items[position] val state = states.firstOrNull { it.item == item } if (state != null) { holder.restore(state) } }
Java
@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ... Item item = items[position]; Arrays.stream(states).filter(state -> state.item == item) .findFirst() .ifPresent(state -> holder.restore(state)); }
Poin utama
RecyclerView.Adapter#setStateRestorationPolicy()
: Menentukan caraRecyclerView.Adapter
memulihkan statusnya setelah perubahan konfigurasi.ViewModel
: Mempertahankan status untuk aktivitas atau fragmen.
Hasil
RecyclerView
Anda sekarang dapat memulihkan posisi scroll dan status
setiap item dalam daftar RecyclerView
.
Koleksi yang berisi panduan ini
Panduan ini adalah bagian dari koleksi Panduan Cepat pilihan yang membahas tujuan pengembangan Android yang lebih luas:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=id)