Saya mencari cara untuk menggulir RecyclerView
untuk menampilkan item yang dipilih di atas.
Dalam ListView
saya bisa melakukannya dengan menggunakan scrollTo(x,y)
dan mendapatkan bagian atas elemen yang perlu dipusatkan.
Sesuatu seperti:
@Override
public void onItemClick(View v, int pos){
mylistView.scrollTo(0, v.getTop());
}
Masalahnya adalah bahwa RecyclerView
mengembalikan kesalahan saat menggunakan scrollTo
metode itu mengatakan
RecyclerView tidak mendukung pengguliran ke posisi absolut
Bagaimana saya bisa menggulir RecyclerView
untuk meletakkan item yang dipilih di bagian atas tampilan?
sumber
Jika Anda mencari LinearLayout Manager vertikal, Anda dapat menggulir dengan lancar menggunakan custom
LinearSmoothScroller
:gunakan instance dari layoutmanager dalam tampilan daur ulang dan kemudian panggilan
recyclerView.smoothScrollToPosition(pos);
akan memuluskan gulir ke posisi yang dipilih ke atas tampilan pendaur ulangsumber
getHorizontalSnapPreference()
di TopSnappedSmoothScroller untuk daftar Horizontal.RecyclerView
? Artinya: Ini tampaknya tidak berfungsi untuk item terakhir - terlepas dari satuSNAP_TO_START
-RecyclerView
satunya gulungan sampai item menjadi terlihat di bagian bawah tetapi tidak bergerak ke atas. Adakah ide bagaimana mencapai ini? (Saya telah mengatasi ini dengan menetapkan bantalan kustom padaRecyclerView
tapi itu sepertinya tidak benar ...)// Gulirkan pos item
sumber
Anda hanya perlu menelepon
recyclerview.scrollToPosition(position)
. Tidak apa-apa!Jika Anda ingin menyebutnya dalam adaptor, biarkan adaptor Anda memiliki instance dari recyclerview atau aktivitas atau fragmen yang berisi recyclerview, daripada mengimplementasikan metode
getRecyclerview()
di dalamnya.Saya harap ini bisa membantu Anda.
sumber
sama dengan pengatur kecepatan
sumber
Coba apa yang berhasil buatku keren!
Buat variabel
private static int displayedposition = 0;
Sekarang untuk posisi RecyclerView Anda di Aktivitas Anda.
Tempatkan pernyataan ini di tempat yang Anda inginkan untuk menempatkan situs sebelumnya ditampilkan di tampilan Anda.
Baiklah itu saja, itu bekerja dengan baik untuk saya \ o /
sumber
panggil saja metode ini secara sederhana:
dari pada:
sumber
apa yang saya lakukan untuk mengembalikan posisi gulir setelah menyegarkan tombol RecyclerView on diklik:
mendapatkan offset item pertama yang terlihat dari atas sebelum membuat objek linearLayoutManager dan setelah instantiating, scrollToPositionWithOffset objek LinearLayoutManager dipanggil.
sumber
Saya tidak tahu mengapa saya tidak menemukan jawaban terbaik tetapi sangat sederhana.
Tidak ada kesalahan
Membuat Animasi
sumber
gulir pada posisi tertentu
dan ini membantu saya banyak. dengan klik pendengar Anda bisa mendapatkan posisi di adaptor Anda
sumber
sumber
Tidak ada jawaban yang menjelaskan cara menampilkan item terakhir di bagian atas. Jadi, jawabannya hanya berfungsi untuk item yang masih memiliki cukup item di atas atau di bawahnya untuk mengisi sisanya
RecyclerView
. Misalnya, jika ada 59 elemen dan elemen ke-56 dipilih itu harus di atas seperti pada gambar di bawah ini:Kami dapat menangani kasus-kasus tersebut dengan menggunakan
linearLayoutManager.scrollToPositionWithOffset(pos, 0)
dan logika tambahan keAdapter
dalamRecyclerView
- dengan menambahkan margin khusus di bawah item terakhir (jika item terakhir tidak terlihat maka itu berarti ada cukup ruang untuk mengisiRecyclerView
). Margin khusus dapat berupa perbedaan antara tinggi tampilan root dan tinggi item. Jadi,Adapter
untuk AndaRecyclerView
akan terlihat sebagai berikut:sumber
Dalam kasus saya, saya
RecyclerView
memiliki padding top seperti iniKemudian untuk menggulir item ke atas, saya perlu
sumber
Jika Anda
LayoutManager
adalahLinearLayoutManager
Anda menggunakanscrollToPositionWithOffset(position,0);
di atasnya dan itu akan membuat item Anda item terlihat pertama dalam daftar. Jika tidak, Anda dapat menggunakansmoothScrollToPosition
diRecyclerView
langsung.Saya akhirnya menggunakan kode di bawah ini.
sumber
Saya menggunakan kode di bawah ini untuk menggulirkan item (thisView) ke atas.
Ini juga berfungsi untuk GridLayoutManager dengan tampilan ketinggian berbeda:
Tampaknya bekerja cukup baik untuk solusi cepat.
sumber
thisPosition
?