Bagaimana cara menggunakannya RecyclerView
di dalam NestedScrollView
?
RecyclerView
konten tidak terlihat setelah mengatur adaptor.
Kode tata letak UPDATE diperbarui.
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/keyline_1">
</RelativeLayout>
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#e5e5e5" />
<android.support.v7.widget.RecyclerView
android:id="@+id/conversation"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Jawaban:
Ganti recyclerView Anda dengan,
sini,
akan mengatur sisanya.
Satu hal lagi, tidak perlu meletakkan recyclerView Anda di dalam NestedScrollView
sumber
NestedScrollView
tetapi hanya denganapp:layout_behavior="@string/appbar_scrolling_view_behavior"
. Ini kuncinya!CoordinatorLayout
,,AppBarLayout
dan pengaturan yang sesuailayout_scrollFlags
pada tampilan anak yang harus digulirkan denganRecyclerView
. Tidak yakin mengapa ini dihilangkan dari jawaban. Kalau tidak, ini adalah solusi yang bagus dan sederhana.PEMBARUAN 1
Sejak Android Support Library 23.2.0 ada metode tambahan
setAutoMeasureEnabled(true)
untuk LayoutManagers. Itu membuat RecyclerView untuk membungkus konten itu dan bekerja seperti pesona.http://android-developers.blogspot.ru/2016/02/android-support-library-232.html
Jadi tambahkan saja seperti ini:
PEMBARUAN 2
Karena 27.1.0
setAutoMeasureEnabled
sudah tidak digunakan lagi, maka Anda harus menyediakan implementasi kustom LayoutManager dengan metode yang digantiisAutoMeasureEnabled()
Tetapi setelah banyak kasus penggunaan, RecyclerView saya sangat menyarankan untuk tidak menggunakannya mode pembungkus , karena ini bukan yang dimaksudkan untuk itu. Cobalah untuk memperbaiki seluruh tata letak Anda menggunakan RecyclerView tunggal normal dengan tipe beberapa item. Atau gunakan pendekatan dengan LinearLayout yang saya jelaskan di bawah ini sebagai pilihan terakhir
Jawaban lama (tidak disarankan)
Anda bisa menggunakannya
RecyclerView
di dalamNestedScrollView
. Pertama-tama Anda harus menerapkan kebiasaan Anda sendiriLinearLayoutManager
, itu membuat AndaRecyclerView
untuk membungkus isinya. Sebagai contoh:Setelah itu gunakan ini
LayoutManager
untuk AndaRecyclerView
Tetapi Anda juga harus memanggil kedua metode itu:
Di sini
setNestedScrollingEnabled(false)
nonaktifkan pengguliranRecyclerView
, sehingga tidak mencegat acara pengguliranNestedScrollView
. DansetHasFixedSize(false)
menentukan bahwa perubahan konten adaptor dapat mengubah ukuranRecyclerView
Catatan penting: Solusi ini sedikit bermasalah dalam beberapa kasus dan memiliki masalah dengan kinerja, jadi jika Anda memiliki banyak item dalam Anda,
RecyclerView
saya akan merekomendasikan untuk menggunakanLinearLayout
implementasi berbasis tampilan daftar, buat analog Adaptor untuk itu dan buatlah berperilaku sepertiListView
atauRecyclerView
sumber
RecyclerView
.1) Anda harus menggunakan perpustakaan dukungan 23.2.0 (atau) di atas
2) dan
RecyclerView
tinggi akanwrap_content
.3)
recyclerView.setNestedScrollingEnabled(false)
Tetapi dengan melakukan ini, pola pendaur ulang tidak berfungsi . (Yaitu semua tampilan akan dimuat sekaligus karena
wrap_content
membutuhkan ketinggian lengkapRecyclerView
sehingga akan menarik semuaViews at once. No view will be recycled). Try not to use this pattern unless it is really required. Try to use
viewType anakand add all other views that need to scroll to
RecyclerViewrather than using
RecyclerViewin
Scrollview`. Dampak kinerja akan sangat tinggi.Sederhananya "itu hanya bertindak seperti
LinearLayout
semua pandangan anak"sumber
recyclerView.setNestedScrollingEnabled(false)
membantu saya untuk memiliki gulungan yang lancar.Anda dapat menggunakan
android:fillViewport="true"
untukNestedScrollView
mengukurRecyclerView
. TheRecyclerView
akan memenuhi tinggi yang tersisa. jadi jika Anda ingin untuk menggulirNestScrollView
, Anda dapat mengaturRecyclerView
'sminHeight
.sumber
Cukup menambahkan
recyclerView.setNestedScrollingEnabled(false);
sebelumsetAdapter
itu sendiri bekerja untuk saya. Saya tidak menambahkan diapp:layout_behavior="@string/appbar_scrolling_view_behavior"
mana pun & tidak mengatur manajer tata letak khusussumber
Inilah yang bekerja untuk saya
sumber
Ada kode pengujian yang sederhana dan dapat Anda periksa
sumber
Untuk
androidx
itu disebutandroidx.core.widget.NestedScrollView
- dan itu juga menggulung sama mentega dengan propertiisScrollContainer
danmeasureAllChildren
diaktifkan:sumber
Coba gunakan perpustakaan ini - https://github.com/serso/android-linear-layout-manager .
LayoutManager dari perpustakaan membuat RecyclerView membungkus isinya. Dalam hal ini, RecyclerView akan "sebesar pandangan bagian dalam", jadi ia tidak akan memiliki scrollbar dan pengguna akan menggunakan kemampuan bergulir NestedScrollView. Oleh karena itu, tidak akan ambigu seperti "scrollable inside scrollable".
sumber
Berikut adalah kode yang saya gunakan untuk menghindari masalah gulir:
sumber
Saya menggunakan RecyclerView di dalam NestedScrollView dan itu berhasil untuk saya. Satu-satunya hal yang harus saya ingat adalah bahwa NestedScrollView hanya membutuhkan satu tampilan anak. Jadi dalam kasus saya, saya menggunakan viewgroup LienearLayout yang menampung RecyclerView saya ditambah sejumlah pandangan lain yang saya butuhkan.
Saya mengalami satu masalah dengan meletakkan RecyclerView saya di dalam NestedScrollView. Saya menyadari bahwa menggulirkan konten RecyclerView saya menjadi malas.
Saya kemudian menyadari bahwa RecyclerView saya menerima acara gulir dan oleh karena itu bertentangan dengan perilaku gulir dari NestedScrollView.
Jadi untuk mengatasi masalah itu, saya harus menonaktifkan fungsi gulir dari RecyclerView saya dengan metode ini
movieListNewRecyclerView.setNestedScrollingEnabled(false);
Anda dapat checkout Instagram saya untuk video singkat tentang apa yang sebenarnya saya lakukan. Ini adalah pegangan instagram ofelix03 saya
Klik gambar ini untuk melihat apa yang saya lakukan
sumber
Saya memiliki Viewpager dan RecyclerView di dalam NestedScrollView. Setelah menambahkan garis di bawah ini
Saya memecahkan masalah gulir lambat dan gulir lag.
sumber
recyclerView.setHasFixedSize(true);
?Anda tidak dapat menggunakan tampilan pendaur ulang dalam tampilan gulir bersarang. Ini tidak dimaksudkan untuk berisi lebih lanjut tampilan yang dapat digulir tetapi itu karena itu adalah anak dari tata letak pengguliran itu sendiri sehingga Anda memerlukan tampilan pengguliran bersarang. Saya memiliki masalah yang sama tetapi pada akhirnya saya memindahkan tampilan teks saya menjadi tampilan header di dalam recyclerview, menjadikan recyclerview sebagai anak langsung dari tata letak koordinator dan menghapus tampilan gulir bersarang. Lalu semua masalah saya hilang.
sumber
RecyclerView
implementasiNestedScrollingChild
,RecyclerView
harus dapat digulir melaluiNestedScrollView
.Jika Anda menggunakan
RecyclerView-23.2.1
atau lebih baru. Solusi berikut akan bekerja dengan baik:Dalam tata letak Anda, tambahkan RecyclerView seperti ini:
Dan di file java Anda:
Sini
layoutManager.setAutoMeasureEnabled(true);
akan melakukan trik.Lihat masalah ini dan blog pengembang ini untuk informasi lebih lanjut.
sumber
Salah satu solusi untuk menjaga fitur daur ulang dari recyclerview dan menghindari recyclerview untuk memuat semua data Anda adalah mengatur ketinggian tetap di recyclerview itu sendiri. Dengan melakukan ini, recyclerview terbatas hanya untuk memuat sebanyak tingginya dapat menunjukkan pengguna sehingga daur ulang elemennya jika Anda gulir ke bawah / atas.
sumber
Ada banyak jawaban bagus. Kuncinya adalah bahwa Anda harus mengatur
nestedScrollingEnabled
untukfalse
. Seperti yang disebutkan di atas, Anda dapat melakukannya dalam kode java:Tetapi Anda juga memiliki kesempatan untuk mengatur properti yang sama dalam kode xml (
android:nestedScrollingEnabled="false"
):sumber
Jika Anda menggunakan RecyclerView ScrollListener di dalam NestedScrollView , addOnScrollListener listener tidak berfungsi dengan baik jika Anda menggunakan keduanya.
Gunakan kode ini.
kode ini berfungsi dengan baik RecyclerView ScrollListener di dalam NestedScrollView .
Terima kasih
sumber
Saya harus mengimplementasikan CoordinatorLayout dengan menggulir bilah alat dan hanya butuh waktu sepanjang hari untuk mengacaukannya. Saya sudah membuatnya bekerja dengan menghapus NestedScrollView sama sekali. Jadi saya hanya menggunakan RelativeLayout di root.
sumber
jangan gunakan recyclerView di dalam NestedScrollView. itu dapat menyebabkan masalah kaskade! Saya sarankan menggunakan ItemViewTypes di RecyclerView untuk menangani berbagai jenis tampilan. cukup tambahkan RecyclerView dengan lebar dan tinggi match_parent. kemudian di recyclerViewAdapter Anda menimpa getItemViewType dan gunakan posisi untuk menangani tata letak apa yang akan digelembungkan. setelah itu Anda dapat menangani view view Anda dengan menggunakan metode onBindViewHolder.
sumber
sumber
Saya telah menggunakan ekstensi yang luar biasa ini (ditulis dalam kotlin tetapi dapat juga digunakan di Jawa)
https://github.com/Widgetlabs/expedition-nestedscrollview
Pada dasarnya Anda mendapatkan bagian
NestedRecyclerView
dalam paket apa saja katakanlah utils dalam proyek Anda, kemudian buat saja recyclerview AndaLihat artikel yang luar biasa ini dari Marc Knaup
https://medium.com/widgetlabs-engineering/scrollable-nestedscrollviews-inside-recyclerview-ca65050d828a
sumber
Manfaat:
Perbaiki:
sumber
Untuk kasus saya, anak dari NestedScrollview adalah ConstraintLayout. Ini tidak berfungsi seperti yang diharapkan saya menggantinya ke LinearLayout. Mungkin itu membantu seseorang.
sumber
RecyclerView dengan NestedScrollView
sumber