Saya perlu tahu elemen mana yang saat ini ditampilkan di RecyclerView saya. Tidak ada yang setara dengan OnScrollListener.onScroll(...)
metode di ListViews. Saya mencoba untuk bekerja dengannya View.getGlobalVisibleRect(...)
, tetapi retasan itu terlalu jelek dan tidak selalu berhasil juga.
Ada yang punya ide?
android
android-recyclerview
hidup kembali
sumber
sumber
getItemCount
dapat mengembalikan 1 danfindFirstVisibleItemPosition
-1 pada panggilan yang sama.Akhirnya, saya menemukan solusi untuk mengetahui apakah item saat ini terlihat, dari peristiwa onBindViewHolder di adaptor.
Kuncinya adalah metode isViewPartiallyVisible dari LayoutManager.
Di adaptor Anda, Anda bisa mendapatkan LayoutManager dari RecyclerView, yang Anda dapatkan sebagai parameter dari acara onAttachedToRecyclerView .
sumber
bagi mereka yang memiliki logika untuk diimplementasikan di dalam adaptor RecyclerView Anda masih dapat menggunakan pendekatan @ernesto dikombinasikan dengan pada scrollListener untuk mendapatkan
what you want
sebagai berkonsultasi dengan RecyclerView. Di dalam adaptor Anda akan memiliki sesuatu seperti ini:sumber
Anda dapat menggunakan
recyclerView.getChildAt()
untuk mendapatkan setiap anak yang terlihat, dan menetapkan beberapa tagconvertview.setTag(index)
pada tampilan ini dalam kode adaptor akan membantu Anda untuk menghubungkannya dengan data adaptor.sumber
recyclerView.getChildAt()
, itulah cara umumnyaRecyclerView
bekerja.RecyclerView
akan mencoba untuk menahan hanya beberapa tampilan anak yang saat ini terlihat (yaitu; dalam batas layar, bukan Visibilitas sebagai GONE, TIDAK TERLIHAT) dan mencoba untuk mendaur ulang tampilan ini ketika pengguna menggulir.Addendum :
fungsi yang diusulkan findLast ... Posisi () tidak tidak bekerja dengan benar dalam skenario dengan toolbar runtuh sementara toolbar diperluas.
Tampaknya tampilan pendaur ulang memiliki ketinggian tetap, dan sementara bilah alat diperluas, pendaur ulang dipindahkan ke bawah, sebagian keluar dari layar. Akibatnya, hasil fungsi yang diusulkan terlalu tinggi. Contoh: Item yang terlihat terakhir dikatakan sebagai # 9, tetapi sebenarnya item # 7 adalah yang terakhir yang ada di layar.
Perilaku ini juga merupakan alasan mengapa tampilan saya sering gagal untuk menggulir ke posisi yang benar, yaitu scrollToPosition () tidak berfungsi dengan benar (saya akhirnya menciutkan bilah alat pemrograman).
sumber
Berikut
Linear / Grid LayoutManager
metode dapat digunakan untuk memeriksa itemvisible
dan jika Anda ingin melacak
is item visible on screen
ambang tertentu maka Anda dapat merujuk ke blog berikut.https://proandroiddev.com/detecting-list-items-perceived-by-user-8f164dfb1d05
sumber
Untuk
StaggeredGridLayoutManager
melakukan ini:Dan untuk mendapatkan tampilan item yang terlihat:
Ingatlah untuk memeriksa apakah itu kosong.
sumber
viewsIds
adalah array, dan mungkin kosong.