Nested Scrollview 스크롤 내부의 Recyclerview가 일반 Recyclerview 또는 Nested Scrollview처럼 빠르게 스크롤되지 않습니다.


96

나는 RecyclerView내부를 사용 NestedScrollView하고 있으며 작동합니다. 하지만 RecyclerView내부 등을 사용하면 LinearLayout제스처에 따라 다양한 속도로 스크롤됩니다. 스크롤은 제스처를 듣고 조금만 위로 밀면 조금 스크롤되고 정말 빠르게 위로 밀면 정말 빠르게 스크롤됩니다. 이제 내 문제는 RecyclerView내부가 NestedScrollView확실히 스크롤되지만 빠른 스크롤이 작동하지 않는다는 것입니다. 그러나 나는 빠르게 또는 느리게 최대 슬라이드, RecyclerView또는 NestedScrollView단지 조금 스크롤합니다.

NestedScrollView또는 RecyclerView내부 스크롤 뷰를 다양한 속도로 스크롤하려면 어떻게해야합니까?


3
recyclerView.setNestedScrollingEnabled (false); 이것은 정말 작동합니다!
아웅시 최소 Htet

stackoverflow.com/questions/27083091/… 솔루션은 여기에서 찾을 수 있습니다.
maruti060385

사용하십시오 setNestedScrollingEnabled 열린 재미 (활성화 : 부울) : 단위 희망은 당신을 도울 것입니다
Int0TheRainb0w

답변:


266

시험

recyclerView.setNestedScrollingEnabled(false);

14
그러나이 설정으로 recyclerview는 뷰를 재활용하지 않습니다! 그것에 대한 당신의 생각은 무엇입니까?
MAY3AM

실제로 배너 및 기타보기를 포함하는 레이아웃 내부에 다른 레이아웃 관리자 (예 : 선형 레이아웃 및 그리드 레이아웃)가있는 두 개 이상의 리사이클 러보기를 추가하고 있습니다. 그래서 리사이클 러 뷰를 처리하기 위해이 모든 것을 Nested Scroll View 픽스 안에 넣습니다.
아웅시 최소 Htet

24
이 답변이 어떻게 그렇게 많은 찬성표를 얻었는지 모르겠습니다. 중첩 스크롤을 비활성화하면 목적을 훼손하는 것입니다. 중첩 된 스크롤 및 리사이클 러를 사용하려면 어떻게해야합니까 ?? CoordinatorLayout, AppBarLayout 및 RecyclerView와 같은 것 ??
Jimit 파텔

감사합니다 @JimitPatel, 이것은 현재 제 문제입니다. 중첩 된 스크롤보기 내에 recycleview가 있고 스크롤 할 수 없습니다. stackoverflow.com/questions/41259756/…
Karoly

1
@Karoly는 중첩 된 스크롤을 사용자 정의해야합니다 ... 그게 ... 몇 시간 안에 게시 할 것입니다 ... 현재 여행 중입니다. 툴바 후 리사이클 러 뷰를 사용하여 시차 효과에서 그 문제에 직면했습니다.
Jimit Patel 2017 년

53

기본적으로 setNestedScrollingEnabledAPI-21 이후에만 작동합니다.

ViewCompat.setNestedScrollingEnabled(recyclerView, false);API-21 (Lollipop) 전후에 중첩 스크롤을 비활성화 하는 데 사용할 수 있습니다 . 문서 링크 .

이 도움을 바랍니다!


22

setNestedSCrollEnabled 메서드를 사용할 수없는 Android 16에서 작업 중이었습니다.

RecyclerView가 Scrolls를 처리하는 것을 막기 위해 내가하는 일.

LinerLayoutManager에서와 마찬가지로 canScrollHorizontally, canScrollVertically를 만들어 기본적으로 false를 반환합니다.

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

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

이것은 실제로 나를 위해 일했습니다. ScrollView 내부에 LinearLinear 내부에 RecyclerView가 있습니다.
FonzTech 2017

9

여러 번 반복 한 후 해결책을 찾았습니다.

  1. RecyclerView를 사용하는 경우 :

    recyclerView.setNestedScrollingEnabled(false);
  2. NestedScrollingView 내에서 LinearLayout을 사용하는 경우 일반 ScrollView 내에서 LinearLayout을 가져온 다음 스크롤을

    scrollView.setNestedScrollingEnabled(false);

2

android : overScrollMode = "never

  <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

onMeasure 메서드를 재정의하는 ExtendRecyclerView 클래스와 함께 ScrollView를 사용할 수 있습니다. 그것은 나를 위해 작동합니다!

@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);

가끔 유용하지만 항상 사용하지 않는 것이 좋습니다. 리 실러보기에서보기 재활용 기능을 비활성화하기 때문입니다.

대안 :

Recycler보기와 함께 CollapsiveToolbarLayout을 사용해보세요. collapsiveTollbar 레이아웃에 다른 뷰를 넣습니다.


0

나는 또한이 문제를 만났다. 그리고 26.1.0그것을 수정 하기 위해 업그레이드 하십시오.


-1

내 경우에는 모든 이미지를 drawable-xxxhdpi 폴더가 설치된 drawable 폴더에 배치했기 때문에 화면 UI가 지연됩니다.


-3

LinearLayout과 같은 레이아웃에서 리사이클 러 뷰를 래핑하고 RecyclerView 크기를 800dp와 같은 상수로 설정해야합니다. 이것은 부드러운 스크롤을 가능하게 할 것이고 리사이클 러 뷰는 스크롤하는 동안 여전히 리사이클 러 뷰가 될 것입니다.

<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
이것은 RecyclerView의 주요 이점을 깨지 않고 플링 스크롤 문제를 해결하는 방법을 가리키고, 보이는 뷰만로드하고, 보이지 않게 스크롤 할 때 재활용하기 때문에 좋은 대답입니다. 800dp와 같은 고정 값이 모든 화면 크기와 방향에서 작동하지 않기 때문에 사람들이 투표를 하향했을 수 있지만 layout_height 값은 프로그래밍 방식으로 계산하고 설정할 수 있지만 약간 지저분하지만 두 가지 문제를 모두 해결합니다.
jk7

-3

WAI입니다. NestedScrollView는 "Unspecified"사양으로 하위 항목을 측정합니다. 아이도 원하는만큼 성장할 수 있습니다.

이것은 본질적으로 NSV와 RV의 높이와 동일합니다. RV에 관한 한, 그것은 완전히 표시되었다고 믿습니다.

RV를 LL로 감싸고 RV에 높이를 지정하십시오. LL은 측정 사양을 UNSPECIFIED로 설정하지 않으므로 RV는 사용자가 제공하는 DP의 설정된 높이 내에서 올바르게 스크롤됩니다.

이 방법의 유일한 단점은 RV에서 부모 매칭을 할 수 없다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.