Recyclerview bên trong cuộn Nested Scrollview nhưng không cuộn nhanh như Recyclerview hoặc Nested Scrollview thông thường


96

Tôi đang sử dụng RecyclerViewbên trong NestedScrollViewvà nó hoạt động. Nhưng khi tôi sử dụng RecyclerViewbên trong LinearLayouthoặc thứ gì đó, nó sẽ cuộn với tốc độ khác nhau tùy thuộc vào cử chỉ. Cuộn lắng nghe cử chỉ và nếu tôi chỉ trượt lên một chút, thì nó cuộn lên một chút trong khi nếu tôi trượt lên thực sự nhanh, thì nó cuộn rất nhanh. Bây giờ vấn đề của tôi là RecyclerViewbên trong NestedScrollViewchắc chắn cuộn nhưng cuộn nhanh không hoạt động. Tuy nhiên, tôi trượt lên nhanh hay chậm, RecyclerViewhoặc NestedScrollViewchỉ cuộn một chút.

Làm cách nào tôi có thể làm cho của tôi NestedScrollViewhoặc RecyclerViewbên trong chế độ xem cuộn đó cuộn với tốc độ khác nhau?


3
RecyclerView.setNestedScrollingEnabled (sai); Điều này thực sự hiệu quả !!
Aung Si Min Htet

stackoverflow.com/questions/27083091/… Giải pháp có thể được tìm thấy tại đây.
maruti060385

Vui lòng sử dụng open fun setNestedScrollingEnabled (đã kích hoạt: Boolean): Unit Hy vọng nó sẽ giúp ích cho bạn
Int0TheRainb0w Ngày

Câu trả lời:


266

thử

recyclerView.setNestedScrollingEnabled(false);

14
Nhưng theo cài đặt này, chế độ xem tái chế không tái chế các chế độ xem! ý tưởng của bạn về nó là gì?
MAY3AM

Trên thực tế, tôi đang thêm hai hoặc nhiều chế độ xem tái chế với các trình quản lý bố cục khác nhau (chẳng hạn như Bố cục tuyến tính và Bố cục lưới) bên trong bố cục của tôi, cũng bao gồm biểu ngữ và các chế độ xem khác. Vì vậy, để xử lý chế độ xem trình tái chế như vậy, hãy đặt tất cả những thứ này bên trong bản sửa lỗi Chế độ xem cuộn lồng nhau cho tôi.
Aung Si Min Htet

24
Tôi không biết làm thế nào mà câu trả lời này nhận được nhiều ủng hộ đến vậy. Nếu vô hiệu hóa cuộn lồng nhau thì nó đang đánh bại mục đích của nó. Điều gì xảy ra nếu tôi muốn sử dụng cuộn và trình tái chế lồng nhau ?? Một cái gì đó như CoordinatorLayout, AppBarLayout và RecyclerView ??
Jimit Patel

Cảm ơn @JimitPatel, đây chính xác là vấn đề của tôi vào lúc này. Tôi có một lần xem xét lại trong chế độ xem cuộn lồng nhau và tôi không thể cuộn. stackoverflow.com/questions/41259756/…
Karoly

1
@Karoly cần tùy chỉnh các cuộn lồng nhau ... Tôi đã biết ... Sẽ đăng điều đó sau vài giờ ... Hiện tại, tôi đang đi du lịch. Tôi phải đối mặt với vấn đề đó trong hiệu ứng thị sai với chế độ xem tái chế sau thanh công cụ.
Jimit Patel

53

Theo mặc định, setNestedScrollingEnabledchỉ hoạt động sau API-21.

Bạn có thể sử dụng ViewCompat.setNestedScrollingEnabled(recyclerView, false);để tắt tính năng cuộn lồng nhau cho trước và sau API-21 (Lollipop). Liên kết đến tài liệu .

Hy vọng điều này giúp đỡ!


22

Tôi đang làm việc trên android 16, nơi này không thể sử dụng phương thức setNestedSCrollEnabled,

Cuối cùng tôi phải làm gì để ngăn RecyclerView xử lý Scrolls.

Giống như trong LinerLayoutManager, tôi đã tạo canScrollHorizosystem, canScrollVerently để trả về false theo mặc định.

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

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });

Điều này thực sự đã làm việc cho tôi. Tôi đã có RecyclerView, bên trong LinearLinear, bên trong ScrollView.
FonzTech

9

Sau nhiều lần lặp lại, tôi đã đưa ra một giải pháp.

  1. Nếu bạn đang sử dụng RecyclerView, thì:

    recyclerView.setNestedScrollingEnabled(false);
  2. Nếu bạn đang sử dụng LinearLayout bên trong NestedScrollingView, hãy đưa LinearLayout vào bên trong ScrollView bình thường và sau đó đặt cuộn của nó thành

    scrollView.setNestedScrollingEnabled(false);

2

android: overScrollMode = "không bao giờ

  <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>

1

Bạn có thể sử dụng ScrollView với lớp ExtendRecyclerView ghi đè phương thức onMeasure. Nó ổn với tôi!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}

1
recyclerView.setNestedScrollingEnabled(false);

Đôi khi sẽ hữu ích, nhưng không phải lúc nào cũng được khuyến khích vì nó vô hiệu hóa chế độ xem tính năng tái chế trong chế độ xem recylcer.

Các lựa chọn thay thế:

Hãy thử CollapsiveToolbarLayout với chế độ xem Recycler. đặt các chế độ xem khác trong bố cục thanh sập.


0

Tôi cũng gặp vấn đề này. Và nâng cấp để 26.1.0sửa chữa nó.


-1

Trong Trường hợp của tôi, tôi đã đặt tất cả các hình ảnh trong thư mục có thể vẽ được gắn với thư mục drawable-xxxhdpi, đó là lý do tại sao giao diện người dùng màn hình của tôi bị trễ.


-3

Bạn nên bao bọc chế độ xem tái chế trong bất kỳ bố cục nào như LinearLayout và đặt kích thước RecyclerView thành không đổi, như 800dp. Điều này sẽ cho phép cuộn trơn tru và chế độ xem trình tái chế vẫn sẽ là chế độ xem trình tái chế trong khi cuộn.

<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>


1
Đây là một câu trả lời hay vì nó chỉ ra cách để khắc phục sự cố cuộn nhấp nháy mà không phá vỡ lợi ích chính của RecyclerView, chỉ tải các chế độ xem hiển thị và tái chế chúng khi chúng được cuộn ra khỏi tầm nhìn. Mọi người có thể đã bỏ phiếu vì giá trị cố định như 800dp sẽ không hoạt động ở tất cả các kích thước và hướng màn hình, nhưng giá trị layout_height có thể được tính toán và đặt theo chương trình - hơi lộn xộn, nhưng nó giải quyết được cả hai vấn đề.
jk7

-3

Đây là WAI. NestedScrollView đo lường con của nó với Spec "Không xác định". Đứa trẻ cũng có thể phát triển bao nhiêu tùy thích.

Điều này về cơ bản tương đương với chiều cao của NSV và RV. Theo như RV có liên quan, nó tin rằng nó hoàn toàn được hiển thị.

Quấn RV của bạn với LL và cung cấp cho RV của bạn một chiều cao. LL sẽ không đặt thông số đo là KHÔNG ĐƯỢC CHỨNG MINH vì vậy RV sẽ cuộn chính xác trong độ cao đã đặt của bất kỳ DP nào bạn cung cấp.

Nhược điểm duy nhất của phương pháp này là bạn sẽ không thể tạo cha mẹ đối sánh trên RV của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.