source

ScrollView 내의 RecyclerView가 원활하게 스크롤되지 않음

ittop 2023. 8. 20. 12:40
반응형

ScrollView 내의 RecyclerView가 원활하게 스크롤되지 않음

내 앱을 위해 나는 사용하고 있습니다.RecyclerView富士山의 ScrollViewRecyclerView라이브러리를 사용하는 콘텐츠를 기준으로 높이가 설정됩니다.스크롤은 작동하지만 위에서 스크롤을 하면 부드럽게 작동하지 않습니다.RecyclerView위를 스크롤할 때ScrollView그 자체로 부드럽게 스크롤되고 있습니다.

을 하기 위해 사용하는 입니다.RecyclerView:

LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));

RecyclerView에 시대에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" />

시도:

RecyclerView v = (RecyclerView) findViewById(...);
v.setNestedScrollingEnabled(false);

또는 지원 설계 라이브러리를 사용하여 레이아웃을 수정할 수 있습니다.현재 레이아웃은 다음과 같습니다.

<ScrollView >
   <LinearLayout >

       <View > <!-- upper content -->
       <RecyclerView > <!-- with custom layoutmanager -->

   </LinearLayout >
</ScrollView >

다음으로 수정할 수 있습니다.

<CoordinatorLayout >

    <AppBarLayout >
        <CollapsingToolbarLayout >
             <!-- with your content, and layout_scrollFlags="scroll" -->
        </CollapsingToolbarLayout >
    </AppBarLayout >

    <RecyclerView > <!-- with standard layoutManager -->

</CoordinatorLayout >

그러나 사용자 정의 선형 레이아웃 관리자가 문제가 없는 경우에는 재사용자 보기에서 중첩된 스크롤을 사용하지 않도록 설정하면 됩니다.

편집(2016년 4월 3일)

v 23.2 지원 기본값에 되어 있습니다.LayoutManager테스트하지는 않았지만, 아마 당신이 사용하고 있는 도서관보다 더 좋아야 할 것입니다.

<ScrollView >
   <LinearLayout >

       <View > <!-- upper content -->
       <RecyclerView > <!-- with wrap_content -->

   </LinearLayout >
</ScrollView >

나는 이것만 사용하면 되었습니다.

mMyRecyclerView.setNestedScrollingEnabled(false);

내 안에서onCreateView()방법.

정말 고마워.

다음 방법 중 하나를 사용할 수 있습니다.

다음 행을 recyclerView xml 파일에 추가합니다.

android:nestedScrollingEnabled="false"

또는 Java 코드:

RecyclerView.setNestedScrollingEnabled(false);

이것이 도움이 되었기를 바랍니다.

XML을 사용하는 방법과 프로그래밍 방식을 모두 사용할 수 있습니다.그러나 XML로 실행하면 작동하지 않으므로 Activity/Fragment에서 프로그래밍 방식으로 설정하는 것이 좋습니다.

XML 코드:

<android.support.v7.widget.RecyclerView
      android:id="@+id/recycleView"
      android:layout_width="match_parent"
      android:visibility="gone"
      android:nestedScrollingEnabled="false"
      android:layout_height="wrap_content"
      android:layout_below="@+id/linearLayoutBottomText" /> 

프로그래밍 방식:

 recycleView = (RecyclerView) findViewById(R.id.recycleView);
 recycleView.setNestedScrollingEnabled(false);

스크롤 보기 대신 중첩된 스크롤 보기를 사용하여 문제 해결

<LinearLayout> <!--Main Layout -->
   <android.support.v4.widget.NestedScrollView>
     <LinearLayout > <!--Nested Scoll View enclosing Layout -->`

       <View > <!-- upper content --> 
       <RecyclerView >


     </LinearLayout > 
   </android.support.v4.widget.NestedScrollView>
</LinearLayout>

비슷한 문제가 있었습니다(Google PlayStore 디자인과 같은 중첩된 RecyclerViews를 만들려고 했습니다).이 문제를 해결하는 가장 좋은 방법은 하위 RecyclerViews를 하위 분류하고 'onIntercept'를 재정의하는 것입니다.TouchEvent' 및 'onTouchEvent' 메서드입니다.이렇게 하면 이러한 이벤트가 어떻게 작동하고 결국 스크롤되는지를 완벽하게 제어할 수 있습니다.

ScrollView를 NestedScrollView로 대체하면 하단으로 부드럽게 스크롤할 수 있습니다.

여기서 모든 답은 동일합니다. 그리고 저는 이미 모든 사람들이 제안하는 것을 사용했습니다.그러면 NestedScrollView가 ScrollView보다 빠르다는 것을 알게 되었습니다.

사용하다

<androidx.core.widget.NestedScrollView

대신에

<ScrollView

그리고 이것을 평소처럼 사용하세요.

recycleView.setNestedScrollingEnabled(false);

모든 답변 요약(장점 및 단점)

단일 재활용품 뷰용

코디네이터 레이아웃 내에서 사용할 수 있습니다.

장점 - 전체 재활용 보기 항목을 로드하지 않습니다.원활한 로딩.

단점 - 코디네이터 레이아웃 내에 두 개의 재활용 보기를 로드할 수 없습니다. 스크롤 문제가 발생합니다.

참조 - https://stackoverflow.com/a/33143512/3879847

최소 행이 있는 다중 순환기 뷰의 경우

NestedScrollView 내부에 로드할 수 있습니다.

장점 - 부드럽게 스크롤됩니다.

단점 - 모든 행의 재활용 보기를 로드하므로 활동이 지연되어 열립니다.

참조 - https://stackoverflow.com/a/33143512/3879847

큰 행(100개 이상)이 있는 다중 순환기 뷰의 경우

당신은 반드시 재활용품 검사를 받아야 합니다.

장점 - 부드럽게 스크롤, 부드럽게 로드

단점 - 코드와 로직을 더 작성해야 합니다.

다중 뷰어의 도움을 받아 주 재활용품 뷰 내에 각 재활용품 뷰를 로드

ex:

주 재활용품 보기

-ChildRecyclerview1 (ViewHolder1)

-ChildRecyclerview2 (ViewHolder2)

-ChildRecyclerview3 (ViewHolder3) 

-Any other layout   (ViewHolder4)

다중 뷰에 대한 참조홀더 - https://stackoverflow.com/a/26245463/3879847

코틀린

isNestedScrollingEnabledfalse 뷰 RecyclerView를 하십시오.

val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.isNestedScrollingEnabled = false

XML 레이아웃 사용

<android.support.v7.widget.RecyclerView
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:id="@+id/friendsList"
    android:layout_width="match_parent"
    android:nestedScrollingEnabled="false"
    android:layout_height="wrap_content" />

합니다. VideoView는 RecyclerView입니다.wrap_content: "NestedScrollView")match_parent그러면 스크롤이 원하는 만큼 원활하게 작동합니다.

참고로,

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:nestedScrollingEnabled="false"
            android:layout_height="wrap_content"
            android:clipToPadding="false" />

</android.support.v4.widget.NestedScrollView>

고마워 Micro 이것은 당신의 힌트에서 나온 것입니다!

카르티크

ScrollView를 상위 항목으로 사용하고 NestedScrollView를 하위 항목으로 사용할 수 있습니다.이렇게:-

       <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/CL1">
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/eventRV"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/CL1" />
    </androidx.core.widget.NestedScrollView>

XML 코드:

<android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clipToPadding="false" />

        </android.support.v4.widget.NestedScrollView>

Java 코드:

  recycleView = (RecyclerView) findViewById(R.id.recycleView);
     recycleView.setNestedScrollingEnabled(false);

아니면 그냥 설정할 수 있습니다.android:focusableInTouchMode="true"의 에서.

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent">

            <android.support.constraint.ConstraintLayout
                android:id="@+id/constraintlayout_main"
                android:layout_width="match_parent"
                android:layout_height="@dimen/layout_width_height_fortyfive"
                android:layout_marginLeft="@dimen/padding_margin_sixteen"
                android:layout_marginRight="@dimen/padding_margin_sixteen"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent">

                <TextView
                    android:id="@+id/textview_settings"
                    style="@style/textviewHeaderMain"
                    android:gravity="start"
                    android:text="@string/app_name"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent" />

            </android.support.constraint.ConstraintLayout>

            <android.support.constraint.ConstraintLayout
                android:id="@+id/constraintlayout_recyclerview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="@dimen/padding_margin_zero"
                android:layout_marginTop="@dimen/padding_margin_zero"
                android:layout_marginEnd="@dimen/padding_margin_zero"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/constraintlayout_main">

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/recyclerview_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:nestedScrollingEnabled="false"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent" />

            </android.support.constraint.ConstraintLayout>

        </android.support.constraint.ConstraintLayout>

    </android.support.v4.widget.NestedScrollView>

</android.support.constraint.ConstraintLayout>

이 코드는 ConstraintLayout Android에서 작동합니다.

단순JAVA 클래스에 이 줄을 추가

list.setNestedScrollingEnabled(false);

저 자신도 이런 문제가 있었습니다. 스크롤 뷰 내에 재활용품 뷰가 있고 스크롤이 매끄럽지 않은 것 같습니다.제 문제의 원인은 재활용품 뷰 위에 스크롤 뷰가 있는 것이었는데, 이는 제 요구 사항에 필요하지 않았습니다.▁the▁i▁so후에▁and추가한▁removed▁after▁scroll▁addedview▁the고하그.android:scrollbars="vertical"리사이클러 뷰의 경우 스크롤이 매끄러웠습니다.

는 3일간의 조사 에 프로젝트에서 부드러운 스크롤 문제를 해결했습니다.

는 문는입니다.<layer-list>…을 으로 한 item_user.xml파일을 렌더링하는 데 GPU 시간이 걸리기 때문에 스크롤이 원활하지 않습니다.그러니 제발 복합적으로 사용하지 마세요.<layer-list>어댑터 항목의 배경에 그릴 수 있습니다.

나의 문제는 위의 해결책으로 해결되었고, 아래의 옵션은 나에게 유용하지 않습니다.

  1. 중첩 스크롤 사용 설정
  2. 고정 크기 설정
  3. setItemViewCacheSize

언급URL : https://stackoverflow.com/questions/33143485/recyclerview-inside-scrollview-not-scrolling-smoothly

반응형