Untuk aplikasi saya, saya menggunakan bagian RecyclerView
dalam ScrollView
yang RecyclerView
memiliki ketinggian berdasarkan isinya menggunakan perpustakaan ini . Menggulir berfungsi tetapi itu tidak berfungsi dengan baik ketika saya menggulir RecyclerView
. Ketika saya menggulir ke atas ScrollView
sendiri itu menggulir dengan lancar.
Kode yang saya gunakan untuk mendefinisikan RecyclerView
:
LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));
Di RecyclerView
dalam ScrollView
:
<android.support.v7.widget.RecyclerView
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:id="@+id/friendsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android
android-recyclerview
android-scrollview
android-scroll
Bart Bergmans
sumber
sumber
androidx.constraintlayout.widget.ConstraintLayout
yang akan menyelesaikan masalah Anda tanpa implementasi yang rumitJawaban:
Coba lakukan:
Sebagai alternatif, Anda dapat memodifikasi tata letak menggunakan perpustakaan desain dukungan. Saya kira tata letak Anda saat ini adalah sesuatu seperti:
Anda dapat mengubahnya menjadi:
Namun ini jalan yang lebih panjang untuk diambil, dan jika Anda OK dengan manajer tata letak linier kustom, maka cukup nonaktifkan pengguliran bersarang pada tampilan pendaur ulang.
Edit (4/3/2016)
The
v 23.2
rilis dari perpustakaan dukungan sekarang termasuk sebuah pabrik “wrap konten” fitur dalam semua standarLayoutManager
s. Saya tidak mengujinya, tetapi Anda mungkin harus memilih itu ke perpustakaan yang Anda gunakan.sumber
setNestedScrollingEnabled(false)
hanya berfungsi ketika saya mematikanScrollView
untuk aNestedScrollView
.setNestedScrollingEnabled(false)
memberi saya kembali bergulir mulus denganRecyclerView
bagian dalam sayaScrollView
- Terima kasih! Tapi saya masih tidak mengerti mengapa itu berhasil ...? Apa maksudnya mengatur nested scrolling false?android:nestedScrollingEnabled="false"
hanya berfungsi untuk API 21+ tetapiv.setNestedScrollingEnabled(false)
OK untuk <21.RecyclerView
masalah wrap_content di dalamScrollView
yang hanya terjadi pada perangkat marshmallow / nougat (API 23, 24), periksa solusi saya di stackoverflow.com/a/38995399/132121Saya hanya perlu menggunakan ini:
di saya
onCreateView()
metode .Terima kasih banyak!
sumber
Anda dapat menggunakan cara ini:
Tambahkan baris ini ke file xml recyclerView Anda:
Atau dalam kode java:
Semoga ini bisa membantu.
sumber
Anda dapat mencoba keduanya dengan XML dan secara terprogram. Tetapi masalah yang mungkin Anda hadapi adalah (di bawah API 21) dengan melakukannya dengan XML tidak akan berfungsi. Jadi lebih baik mengaturnya secara terprogram dalam Aktivitas / Fragmen Anda.
Kode XML:
Secara terprogram:
sumber
Menggunakan Nested Scroll View alih-alih Scroll View memecahkan masalah saya
sumber
Saya memiliki masalah serupa (saya mencoba membuat sesuatu yang mirip RecyclerViews seperti desain Google PlayStore). Cara terbaik untuk mengatasinya adalah dengan mensubclassing anak RecyclerViews dan mengganti metode 'onInterceptTouchEvent' dan 'onTouchEvent'. Dengan cara ini Anda mendapatkan kontrol penuh tentang bagaimana perilaku peristiwa tersebut dan akhirnya bergulir.
sumber
Mengganti ScrollView dengan NestedScrollView menghasilkan scrolling yang mulus ke bawah.
sumber
Jika Anda menggunakan VideoView atau widget berat di childviews Anda, simpan RecyclerView Anda dengan ketinggian
wrap_content
di dalam NestedScrollView dengan ketinggianmatch_parent
Kemudian, scrolling akan bekerja semulus yang Anda inginkan.FYI,
Terima kasih, Mikro, ini dari petunjuk Anda!
karthik
sumber
Ringkasan semua jawaban (Keuntungan & Kerugian)
Untuk single recyclerview
Anda dapat menggunakannya di dalam tata letak Koordinator.
Keuntungan - tidak akan memuat seluruh item recyclerview. Pemuatan jadi mulus.
Kerugian - Anda tidak dapat memuat dua recyclerview di dalam tata letak Koordinator - ini menghasilkan masalah gulir
referensi - https://stackoverflow.com/a/33143512/3879847
Untuk beberapa tinjauan ulang dengan baris minimum
Anda dapat memuat di dalam NestedScrollView
Keuntungan - itu akan bergulir dengan lancar
Kerugian - Memuat semua baris recyclerview sehingga aktivitas Anda terbuka dengan penundaan
referensi - https://stackoverflow.com/a/33143512/3879847
Untuk multiple recylerview dengan baris besar (lebih dari 100)
Anda harus pergi dengan recyclerview.
Keuntungan - Gulir dengan lancar, muat dengan lancar
Kerugian - Anda perlu menulis lebih banyak kode dan logika
Muat masing-masing recylerview di dalam recyclerview utama dengan bantuan multi-viewholder
ex:
Referensi untuk multi-viewHolder - https://stackoverflow.com/a/26245463/3879847
sumber
Kode XML:
dalam kode java:
sumber
Atau Anda bisa mengatur
android:focusableInTouchMode="true"
dalam tampilan pendaur ulang Andasumber
Kode ini berfungsi di Android ConstraintLayout
sumber
Kotlin
Setel
isNestedScrollingEnabled
kefalse
untuk setiap RecyclerView yang ada di bawah tampilan gulirMenggunakan Layout XML
sumber