Recyclerview di dalam scroll Nested Scrollview tetapi tidak melakukan scroll cepat seperti Recyclerview atau Nested Scrollview biasa

96

Saya menggunakan RecyclerViewbagian dalam NestedScrollViewdan berhasil. Tetapi ketika saya menggunakan RecyclerViewdi dalam LinearLayoutatau sesuatu, itu menggulir dalam berbagai kecepatan tergantung pada gerakan. Gulir mendengarkan gerakan dan jika saya menggeser ke atas hanya sedikit, lalu menggulir sedikit sementara jika saya menggeser ke atas sangat cepat, maka gulir sangat cepat. Sekarang masalah saya adalah bahwa RecyclerViewdi dalam NestedScrollViewpasti gulir tetapi gulir cepat tidak berfungsi. Namun saya menggeser ke atas dengan cepat atau lambat, RecyclerViewatau NestedScrollViewhanya menggulir sedikit.

Bagaimana saya bisa membuat tampilan gulir saya NestedScrollViewatau RecyclerViewdi dalam itu bergulir dalam berbagai kecepatan?

Aung Si Min Htet
sumber
3
recyclerView.setNestedScrollingEnabled (false); Ini benar-benar berhasil !!
Aung Si Min Htet
stackoverflow.com/questions/27083091/… Solusi dapat ditemukan di sini.
maruti060385
Silakan gunakan setNestedScrollingEnabled (diaktifkan: Boolean) menyenangkan terbuka: Unit Berharap ini akan membantu Anda
Int0TheRainb0w

Jawaban:

266

mencoba

recyclerView.setNestedScrollingEnabled(false);
Yang Peiyong
sumber
14
Namun dengan pengaturan ini, recyclerview tidak mendaur ulang tampilan! apa idemu tentang itu?
MAY3AM
Sebenarnya saya menambahkan dua atau lebih tampilan pendaur ulang dengan pengelola tata letak yang berbeda (seperti Tata Letak Linear dan Tata Letak Kisi) di dalam tata letak saya yang juga menyertakan spanduk, dan tampilan lainnya. Jadi untuk menangani tampilan pendaur ulang seperti itu, meletakkan semua ini di dalam perbaikan Tampilan Gulir Bersarang untuk saya.
Aung Si Min Htet
24
Saya tidak tahu bagaimana jawaban ini mendapat begitu banyak suara positif. Jika menonaktifkan gulir bersarang maka itu mengalahkan tujuannya. Bagaimana jika saya ingin menggunakan gulungan bersarang dan pendaur ulang ?? Sesuatu seperti CoordinatorLayout, AppBarLayout dan RecyclerView ??
Jimit Patel
Terima kasih @JimitPatel, inilah masalah saya saat ini. Saya memiliki tampilan ulang dalam tampilan gulungan bersarang dan saya tidak dapat menggulir. stackoverflow.com/questions/41259756/…
Karoly
1
@Karoly perlu menyesuaikan gulungan bersarang ... Saya sudah ... Akan mempostingnya dalam beberapa jam ... Saat ini, saya sedang bepergian. Saya menghadapi masalah itu dalam efek paralaks dengan tampilan pendaur ulang setelah bilah alat.
Jimit Patel
53

Secara default setNestedScrollingEnabledhanya berfungsi setelah API-21.

Anda dapat menggunakan ViewCompat.setNestedScrollingEnabled(recyclerView, false);untuk menonaktifkan pengguliran bersarang sebelum dan sesudah API-21 (Lollipop). Tautan ke dokumentasi .

Semoga bantuan ini!

Hemant Kaushik
sumber
22

Saya sedang mengerjakan Android 16 yang tidak memungkinkan untuk menggunakan metode setNestedSCrollEnabled,

Apa yang akhirnya saya lakukan untuk menghentikan RecyclerView menangani Scrolls.

Seperti di LinerLayoutManager saya membuat canScrollHorizontally, canScrollVertically mengembalikan false secara default.

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });
Zain Ali
sumber
Ini benar-benar berhasil untuk saya. Saya memiliki RecyclerView, di dalam LinearLinear, di dalam ScrollView.
FonzTech
9

Setelah beberapa kali pengulangan, saya menemukan solusi.

  1. Jika Anda menggunakan RecyclerView, maka:

    recyclerView.setNestedScrollingEnabled(false);
  2. Jika Anda menggunakan LinearLayout di dalam NestedScrollingView, ambil LinearLayout di dalam ScrollView normal lalu setel penggulirannya ke

    scrollView.setNestedScrollingEnabled(false);
Sarthak Gandhi
sumber
2

android: overScrollMode = "tidak pernah

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
 </android.support.v4.widget.NestedScrollView>
Maryam Azhdari
sumber
1

Anda bisa menggunakan ScrollView dengan kelas ExtendRecyclerView yang menggantikan metode onMeasure. Itu berhasil untuk saya!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}
Quý Nguyễn Nam
sumber
1
recyclerView.setNestedScrollingEnabled(false);

Terkadang akan berguna, tetapi tidak selalu disarankan karena menonaktifkan fitur daur ulang tampilan dalam tampilan recylcer.

Alternatif:

Coba CollapsiveToolbarLayout dengan tampilan Recycler. menempatkan tampilan lain dalam tata letak collapsiveTollbar.

Rajesh.k
sumber
0

Saya juga menemui masalah ini. Dan tingkatkan untuk 26.1.0memperbaikinya.

linkaipeng
sumber
-1

Dalam Kasus Saya, saya menempatkan semua gambar dalam folder drawable insted dari folder drawable-xxxhdpi itu sebabnya UI layar saya tertinggal.

Mayuresh Deshmukh
sumber
-3

Anda harus menggabungkan tampilan recycler dalam tata letak apa pun seperti LinearLayout dan menyetel ukuran RecyclerView menjadi konstan, seperti 800dp. Ini akan memungkinkan pengguliran mulus dan tampilan pendaur ulang akan tetap mendaur ulang tampilan selama pengguliran.

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>

Thror
sumber
1
Ini adalah jawaban yang bagus karena menunjukkan cara untuk memperbaiki masalah fling scroll tanpa merusak manfaat utama RecyclerView, hanya memuat tampilan yang terlihat dan mendaur ulangnya saat di-scroll hingga tidak terlihat. Orang mungkin tidak memilihnya karena nilai tetap seperti 800dp tidak akan berfungsi di semua ukuran dan orientasi layar, tetapi nilai layout_height dapat dihitung dan disetel secara terprogram - agak berantakan, tetapi ini menyelesaikan kedua masalah.
jk7
-3

Ini WAI. NestedScrollView mengukur turunannya dengan Spec "Unspecified". Anak itu juga bisa tumbuh sebanyak yang diinginkannya.

Ini pada dasarnya sama dengan ketinggian NSV dan RV. Sejauh menyangkut RV, diyakini bahwa itu ditampilkan sepenuhnya.

Bungkus RV Anda dengan LL dan berikan ketinggian RV Anda. LL tidak akan mengatur spek pengukuran menjadi UNSPECIFIED sehingga RV akan menggulir dengan benar dalam ketinggian yang ditentukan dari DP apa pun yang Anda berikan.

Satu-satunya kelemahan dari metode ini adalah Anda tidak akan dapat melakukan pencocokan orang tua di RV Anda.

Muhammad Ahmed AbuTalib
sumber