ScrollView 내의 RecyclerView가 원활하게 스크롤되지 않음
내 앱을 위해 나는 사용하고 있습니다.RecyclerView
富士山의 ScrollView
RecyclerView
이 라이브러리를 사용하는 콘텐츠를 기준으로 높이가 설정됩니다.스크롤은 작동하지만 위에서 스크롤을 하면 부드럽게 작동하지 않습니다.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
코틀린
트isNestedScrollingEnabled
false
뷰 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>
어댑터 항목의 배경에 그릴 수 있습니다.
나의 문제는 위의 해결책으로 해결되었고, 아래의 옵션은 나에게 유용하지 않습니다.
- 중첩 스크롤 사용 설정
- 고정 크기 설정
- setItemViewCacheSize
언급URL : https://stackoverflow.com/questions/33143485/recyclerview-inside-scrollview-not-scrolling-smoothly
'source' 카테고리의 다른 글
Entity Framework 7 데이터베이스 우선 POCO 생성기가 있습니까? (0) | 2023.08.20 |
---|---|
Spring에서 트랜잭션을 사용할 때 사후 커밋 만들기 (0) | 2023.08.20 |
파워셸을 사용하여 IIS 버전 찾기 (0) | 2023.08.20 |
jQuery를 사용하여 클래스가 있는 조상이 있는지 확인합니다. (0) | 2023.08.20 |
jQuery 객체 등식 (0) | 2023.08.20 |