source

NestedScrollView 내에서 RecyclerView를 사용하는 방법은 무엇입니까?

manysource 2023. 9. 2. 08:36

NestedScrollView 내에서 RecyclerView를 사용하는 방법은 무엇입니까?

RecyclerView東京의 NestedScrollView?RecyclerView어댑터를 설정한 후 내용이 표시되지 않습니다.

업데이트 레이아웃 코드가 업데이트되었습니다.

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

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/keyline_1">

    </RelativeLayout>

    <View
        android:id="@+id/separator"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#e5e5e5" />

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

</LinearLayout>

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

재활용기 보기를 다음으로 바꿉니다.

<android.support.v7.widget.RecyclerView
    android:id="@+id/conversation"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

여기서,

app:layout_behavior="@string/appbar_scrolling_view_behavior"

나머지 일들을 처리할 겁니다

한 가지 더, 재활용기 뷰를 NestedScrollView 안에 넣을 필요가 없습니다.

  1. 위의 지원 라이브러리 23.2.0(또는)을 사용해야 합니다.

  2. 그리고.RecyclerView는 높는이입니다.wrap_content.

  3. recyclerView.setNestedScrollingEnabled(false)

그러나 이렇게 하면 재활용기 패턴이 작동하지 않습니다. (즉, 모든 가 한 번에 로드됩니다.wrap_content한 완도가필의 높이가 합니다.RecyclerView그래서 그것은 모든 아이를 그릴 것입니다.Views즉시 .)재생성되지 않는 보기).꼭 필요한 경우가 아니면 이 패턴을 사용하지 마십시오.사용해 보십시오.viewType이 뷰를 합니다.RecyclerView 하는 것보다.RecyclerViewScrollview성능에 미치는 영향은 매우 클 것입니다.

간단히 말하자면, "그것은 단지 다음과 같은 역할을 합니다.LinearLayout의 견해 "모든어린보기함께와이."께"▁all함▁with모▁the와"와 함께.

업데이트 1

23 Android Support Library 23.2.0 메서드가 되었습니다.setAutoMeasureEnabled(true)레이아웃 관리자용입니다.리사이클러 뷰를 만들어 콘텐츠를 포장하고 매력적으로 작동합니다.
http://android-developers.blogspot.ru/2016/02/.htmlhttp ://android-developers.blogspot.ru/2016/02/android-support-library-232.html

따라서 다음과 같은 것을 추가합니다.

    LayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setAutoMeasureEnabled(true);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setNestedScrollingEnabled(false);


업데이트 2

27.1.0 이후 »setAutoMeasureEnabled더 이상 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "isAutoMeasureEnabled()

그러나 RecyclerView를 사용하는 경우가 많으므로 포장 모드에서는 사용하지 않는 것이 좋습니다.일반적인 단일 RecyclerView와 여러 항목 유형을 사용하여 전체 레이아웃을 리팩터링해 보십시오.또는 아래에서 마지막 방법으로 설명한 선형 레이아웃 방식을 사용합니다.


이전 답변(권장되지 않음)

사용할 수 있습니다.RecyclerView東京의 NestedScrollView, 만의 맞춤법을 .LinearLayoutManager은 당신의 신의를 만듭니다.RecyclerView내용을 요약합니다.예:

public class WrappingLinearLayoutManager extends LinearLayoutManager
{

    public WrappingLinearLayoutManager(Context context) {
        super(context);
    }

    private int[] mMeasuredDimension = new int[2];

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

    @Override
    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state,
            int widthSpec, int heightSpec) {
        final int widthMode = View.MeasureSpec.getMode(widthSpec);
        final int heightMode = View.MeasureSpec.getMode(heightSpec);

        final int widthSize = View.MeasureSpec.getSize(widthSpec);
        final int heightSize = View.MeasureSpec.getSize(heightSpec);

        int width = 0;
        int height = 0;
        for (int i = 0; i < getItemCount(); i++) {
            if (getOrientation() == HORIZONTAL) {
                measureScrapChild(recycler, i,
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                        heightSpec,
                        mMeasuredDimension);

                width = width + mMeasuredDimension[0];
                if (i == 0) {
                    height = mMeasuredDimension[1];
                }
            } else {
                measureScrapChild(recycler, i,
                        widthSpec,
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                        mMeasuredDimension);

                height = height + mMeasuredDimension[1];
                if (i == 0) {
                    width = mMeasuredDimension[0];
                }
            }
        }

        switch (widthMode) {
            case View.MeasureSpec.EXACTLY:
                width = widthSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }

        switch (heightMode) {
            case View.MeasureSpec.EXACTLY:
                height = heightSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }

        setMeasuredDimension(width, height);
    }

    private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,
            int heightSpec, int[] measuredDimension) {

        View view = recycler.getViewForPosition(position);
        if (view.getVisibility() == View.GONE) {
            measuredDimension[0] = 0;
            measuredDimension[1] = 0;
            return;
        }
        // For adding Item Decor Insets to view
        super.measureChildWithMargins(view, 0, 0);
        RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();
        int childWidthSpec = ViewGroup.getChildMeasureSpec(
                widthSpec,
                getPaddingLeft() + getPaddingRight() + getDecoratedLeft(view) + getDecoratedRight(view),
                p.width);
        int childHeightSpec = ViewGroup.getChildMeasureSpec(
                heightSpec,
                getPaddingTop() + getPaddingBottom() + getDecoratedTop(view) + getDecoratedBottom(view),
                p.height);
        view.measure(childWidthSpec, childHeightSpec);

        // Get decorated measurements
        measuredDimension[0] = getDecoratedMeasuredWidth(view) + p.leftMargin + p.rightMargin;
        measuredDimension[1] = getDecoratedMeasuredHeight(view) + p.bottomMargin + p.topMargin;
        recycler.recycleView(view);
    }
}

그 후에는 이것을 사용합니다.LayoutManager당신을 위하여RecyclerView

recyclerView.setLayoutManager(new WrappingLinearLayoutManager(getContext()));

그러나 다음 두 가지 방법을 사용해야 합니다.

recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(false);

여기서setNestedScrollingEnabled(false)에 대해 스크롤 안 함RecyclerView▁from▁event못다▁scrolling▁doesn▁so▁it니에서 스크롤 이벤트를 가로채지 않습니다.NestedScrollView.그리고.setHasFixedSize(false)되면 어댑콘텐변경서크버변기경수를확다있인니의 될 수 합니다.RecyclerView

중요한 참고:이 솔루션은 경우에 따라 약간 버그가 발생하고 성능에 문제가 있으므로 많은 항목이 있는 경우RecyclerView사용자 지정을 사용하는 것이 좋습니다.LinearLayoutview를 목록 뷰의구기반로으을현아어댑, 를만다같동다음들니작합이과고그날로의처럼 .ListView또는RecyclerView

사용할 수 있습니다.android:fillViewport="true"만들기 위해서NestedScrollView치를재를 RecyclerView.RecyclerView높이를 수 . 를 누르십시오. 따라서 스크롤하려면NestScrollView▁the를 설정할 수.RecyclerViewminHeight.

단순추 추가하기recyclerView.setNestedScrollingEnabled(false); 앞에setAdapter그 자체가 나에게 효과가 있었습니다.추가하지 않았습니다.app:layout_behavior="@string/appbar_scrolling_view_behavior"사용자 지정 레이아웃 관리자를 설정하지 않았습니다.

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                android:text="Some Text..."
                android:padding="15dp" />

        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:padding="15dp"
            android:layout_marginTop="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Quick Links"
                android:textColor="@color/black"
                android:textStyle="bold"
                android:textAllCaps="true"
                android:paddingLeft="20dp"
                android:drawableLeft="@drawable/ic_trending_up_black_24dp"
                android:drawablePadding="10dp"
                android:layout_marginBottom="10dp"
                android:textSize="16sp"/>

            <View
                android:layout_width="fill_parent"
                android:layout_height="1dp"
                android:background="#efefef"/>

            <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/recyclerview"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>

    </LinearLayout>

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

이것이 저를 위해 일하는 것입니다.

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.v4.widget.NestedScrollView>

위해서androidx고라합니다라고 .androidx.core.widget.NestedScrollView은 특성을 .isScrollContainer그리고.measureAllChildren사용 가능:

<!-- Scrolling Content -->
<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:isScrollContainer="true"
    android:measureAllChildren="true"

    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fastScrollEnabled="true"
        android:scrollbarStyle="insideInset"
        android:scrollbars="vertical"
        android:splitMotionEvents="false"
        android:verticalScrollbarPosition="right"/>

</androidx.core.widget.NestedScrollView>

확인할 수 있는 간단한 테스트 코드가 있습니다.

<android.support.v4.widget.NestedScrollView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fillViewport="true"
     app:layout_behavior="@string/appbar_scrolling_view_behavior">
    <android.support.v7.widget.RecyclerView
           android:layout_width="match_parent"
           android:layout_height="match_parent"/>
   </android.support.v4.widget.NestedScrollView>

NestedScrollView 내에서 RecyclerView를 사용했는데 효과가 있었습니다.내가 기억해야 할 유일한 문제는 중첩 스크롤 뷰가 하나의 하위 뷰만 사용한다는 것입니다.그래서 제 경우에는 리니어 레이아웃 뷰 그룹을 사용했습니다. 이 뷰 그룹에는 재활용자 뷰와 필요한 다른 뷰가 포함되어 있었습니다.

NestedScrollView 안에 RecyclerView를 넣는 문제가 발생했습니다.RecyclerView의 내용을 스크롤하는 작업이 부족하다는 것을 알게 되었습니다.

나중에 내 RecyclerView가 스크롤링 이벤트를 수신하고 있으므로 NestedScrollView의 스크롤링 동작과 충돌한다는 것을 알게 되었습니다.

그 저는 이 으로 제 .movieListNewRecyclerView.setNestedScrollingEnabled(false);

제 인스타그램에서 제가 실제로 무엇을 했는지에 대한 짧은 비디오를 확인할 수 있습니다.이것은 elix03의 제 인스타그램 핸들입니다.

Click this image to see what I did

이 라이브러리를 사용해 보십시오 - https://github.com/serso/android-linear-layout-manager .

라이브러리의 LayoutManager는 RecyclerView의 내용을 래핑합니다.이 경우 RecyclerView는 "내부 뷰 크기"이므로 스크롤 막대가 없으며 사용자는 NestedScrollView의 스크롤 기능을 사용합니다.따라서 "스크롤 가능 내부 스크롤 가능"처럼 모호하지 않습니다.

스크롤 문제를 피하기 위해 사용하는 코드는 다음과 같습니다.

mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.getLayoutManager().setAutoMeasureEnabled(true);
mRecyclerView.setNestedScrollingEnabled(false);
mRecyclerView.setHasFixedSize(false);

NestedScrollView 안에 Viewpager와 RecyclerView가 있습니다.아래 라인을 추가한 후

recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(false);

느린 스크롤과 스크롤 지연 문제를 해결했습니다.

NestedScrollView에서 RecyclerView를 사용하려면 다음과 같이 설정하면 됩니다.

재활용기 보기

  • recyclerView.set HasFixedSize(거짓)(java/kt)

  • Android:nestedScrollingEnabled="false"

  • Android:slot_height="slot_content"

  • Android:overScrollMode="절대"

중첩 스크롤 뷰

  • Android:fillViewport="true"

이것은 저를 위한 작업이며, NestedScrollView에서도 많은 RecyclerView를 사용할 수 있습니다.

사용 중인 경우RecyclerView-23.2.1나중에.다음 솔루션이 잘 작동합니다.

레이아웃에서 다음과 같이 RecyclerView를 추가합니다.

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

그리고 당신의 java 파일에는:

RecyclerView mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager=new LinearLayoutManager(getContext());
layoutManager.setAutoMeasureEnabled(true);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setAdapter(new YourListAdapter(getContext()));

여기서layoutManager.setAutoMeasureEnabled(true);할 수 있을 겁니다

자세한 내용은 이 문제와 이 개발자 블로그를 참조하십시오.

NestedScrollView 에서 RecyclerViewScrollListener를 사용하는 경우, OnScrollListener 수신기를 모두 사용하는 경우 올바르게 작동하지 않음을 추가합니다.

이 코드를 사용합니다.

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState); 
              ......
        }
    });

이 코드는 NestedScrollView 에서 RecyclerView ScrollListener를 올바르게 작동합니다.

감사해요.

좋은 답변들이 많이 있습니다.중요한 것은 설정해야 한다는 것입니다.nestedScrollingEnabled로.false위에서 언급한 것처럼 Java 코드로 실행할 수 있습니다.

mRecyclerView.setNestedScrollingEnabled(false);

("xml xml 코한속동설있수다").android:nestedScrollingEnabled="false"):

 <android.support.v7.widget.RecyclerView
     android:id="@+id/recyclerview"
     android:nestedScrollingEnabled="false"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

중첩된 스크롤 뷰 내에서는 재활용기 뷰를 사용할 수 없습니다.스크롤 가능한 보기를 추가로 포함하기 위한 것은 아니지만 스크롤 레이아웃 자체의 하위 항목이기 때문에 중첩된 스크롤 보기가 필요합니다.저도 같은 문제가 있었지만 결국 제 텍스트 보기를 재활용품 보기 내의 머리글 보기로 이동하고 재활용품 보기를 코디네이터 레이아웃의 직접 자식으로 만들고 중첩된 스크롤 보기를 삭제했습니다.그리고 나서 나의 모든 문제들이 사라졌습니다.

재활용 보기의 재활용 기능을 유지하고 모든 데이터를 로드하는 재활용 보기를 방지하는 한 가지 해결책은 재활용 보기 자체에 고정 높이를 설정하는 것입니다.이렇게 하면 사용자가 표시할 수 있는 높이만큼만 재활용 보기가 로드되도록 제한되므로 아래/위쪽으로 스크롤할 때마다 재활용 요소를 재활용할 수 있습니다.

NestedScrollView 내부의 recyclerView를 사용하지 마십시오.계단식 문제를 일으킬 수 있습니다!ItemView를 사용하는 것이 좋습니다.여러 종류의 보기를 처리하기 위한 RecyclerView의 유형입니다.match_parent 너비와 높이를 가진 RecyclerView를 추가하기만 하면 됩니다.그런 다음 재활용업체에서 ViewAdapter를 재정의하여 getItemView팽창할 레이아웃을 처리하기 위한 위치를 입력하고 사용합니다. 그런 다음 BindView를 사용하여 뷰 홀더를 처리할 수 있습니다.홀더 메서드.

https://stacklearn.ir

당신은 나의 샘플 코드를 사용할 수 있습니다.

    <?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <LinearLayout
        android:id="@+id/fl_all_brand"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".view.fragment.AllBrandFragment">

        <androidx.core.widget.NestedScrollView
            android:id="@+id/parent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >

            <LinearLayout
                android:id="@+id/fl_all_brand1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:orientation="vertical">


                <!--<include layout="@layout/content_home" />-->

                <TextView
                    android:id="@+id/tv_title"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginStart="@dimen/_15sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:fontFamily="@font/lexend_semibold"
                    android:text="@string/DISPLAY_LIGHTS"
                    android:textColor="@color/gray_scale_placehold"
                    android:textSize="@dimen/_16ssp" />


                <LinearLayout
                    android:id="@+id/recyclerLayout"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/_280sdp">


                    <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/recyclerviewobj"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginStart="@dimen/_10sdp"
                        android:layout_marginTop="@dimen/_20sdp"
                        android:layout_marginEnd="@dimen/_10sdp"
                        android:orientation="horizontal"
                        android:nestedScrollingEnabled="false"
                        android:layout_marginBottom="@dimen/_20sdp"
                        app:layout_behavior="@string/appbar_scrolling_view_behavior"
                        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"

                        />
                </LinearLayout>



                <TextView
                    android:id="@+id/notfound"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginStart="@dimen/_15sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginBottom="@dimen/_20sdp"
                    android:fontFamily="@font/lexend_semibold"
                    android:text="@string/DISPLAY_LIGHTS"
                    android:gravity="center"
                    android:visibility="gone"
                    android:textColor="?attr/hintTextColors"
                    android:textSize="@dimen/_12ssp" />
                <TextView
                    android:id="@+id/recommendTitle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_above="@+id/addDeviceLayout"
                    android:layout_below="@+id/recyclerviewobj"
                    android:layout_marginStart="@dimen/_16sdp"
                    android:layout_marginTop="@dimen/_7sdp"
                    android:fontFamily="@font/lexend_semibold"
                    android:text="@string/RECOMMENDATION"
                    android:textColor="@color/gray_scale_placehold"
                    android:textSize="@dimen/_16ssp" />

                <LinearLayout
                    android:id="@+id/addDeviceLayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_above="@+id/createRoomLayout"
                    android:layout_marginTop="@dimen/_14sdp"
                    android:background="?attr/buttonTextColor"
                    android:orientation="vertical"
                    tools:visibility="visible">

                    <ImageView
                        android:id="@+id/addBtn"
                        android:layout_width="@dimen/_28sdp"
                        android:layout_height="@dimen/_28sdp"
                        android:layout_marginStart="@dimen/_16sdp"
                        android:layout_marginTop="@dimen/_8sdp"
                        android:src="@drawable/ic_thermostates_icon"
                        app:tint="?attr/colorPrimaryDark" />

                    <TextView
                        android:id="@+id/addDevice"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/_16sdp"
                        android:layout_marginTop="@dimen/_5sdp"
                        android:fontFamily="@font/lexend_bold"
                        android:text="@string/PROGRAM_DISPLAY_SENSOR_PLUGS"
                        android:textColor="?attr/colorPrimaryDark"
                        android:textSize="@dimen/_12ssp" />

                    <TextView
                        android:id="@+id/summry"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/_16sdp"
                        android:layout_marginTop="@dimen/_8sdp"
                        android:layout_marginBottom="@dimen/_6sdp"
                        android:fontFamily="@font/lexend_medium"
                        android:text="@string/DISPLAY_SENSOR_SUB_TITLE"
                        android:textColor="?attr/secondaryTextColor"
                        android:textSize="@dimen/_9ssp" />

                    <RelativeLayout
                        android:id="@+id/container3"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/_6sdp"
                        android:layout_marginTop="@dimen/_6sdp"
                        android:layout_marginBottom="@dimen/_10sdp">

                        <TextView
                            android:id="@+id/get_started"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerVertical="true"
                            android:layout_marginStart="@dimen/_10sdp"
                            android:fontFamily="@font/lexend_semibold"
                            android:text="@string/RECOMMENDED_GROUP"
                            android:textAllCaps="true"
                            android:textSize="@dimen/_9ssp" />

                        <ImageView
                            android:id="@+id/forward_arrow"
                            android:layout_width="@dimen/_16sdp"
                            android:layout_height="@dimen/_16sdp"
                            android:layout_alignParentEnd="true"
                            android:layout_marginRight="@dimen/_20sdp"
                            android:src="@drawable/ic_forward_arrow"
                            app:tint="?attr/colorPrimary" />

                    </RelativeLayout>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/createRoomLayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_marginTop="@dimen/_9sdp"
                    android:layout_marginBottom="@dimen/_20sdp"
                    android:background="?attr/buttonTextColor"
                    android:orientation="vertical"
                    tools:visibility="visible">

                    <ImageView
                        android:id="@+id/addBtnRoom"
                        android:layout_width="@dimen/_28sdp"
                        android:layout_height="@dimen/_28sdp"
                        android:layout_marginStart="@dimen/_16sdp"
                        android:layout_marginTop="@dimen/_8sdp"
                        android:src="@drawable/rgb_light_new"
                        app:tint="?attr/colorPrimaryDark" />

                    <TextView
                        android:id="@+id/addRooms"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/_16sdp"
                        android:layout_marginTop="@dimen/_5sdp"
                        android:fontFamily="@font/lexend_bold"
                        android:text="@string/DISPLAY_RGBW"
                        android:textColor="?attr/colorPrimaryDark"
                        android:textSize="@dimen/_12ssp" />

                    <TextView
                        android:id="@+id/summry1"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/_16sdp"
                        android:layout_marginTop="@dimen/_8sdp"
                        android:layout_marginBottom="@dimen/_6sdp"
                        android:fontFamily="@font/lexend_medium"
                        android:text="@string/PROGRAM_DISPLAY_RGB_MSG"
                        android:textColor="?attr/secondaryTextColor"
                        android:textSize="@dimen/_9ssp" />

                    <RelativeLayout
                        android:id="@+id/container99"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/_6sdp"
                        android:layout_marginTop="@dimen/_6sdp"
                        android:layout_marginBottom="@dimen/_10sdp">

                        <TextView
                            android:id="@+id/get_started_1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerVertical="true"
                            android:layout_marginStart="@dimen/_10sdp"
                            android:fontFamily="@font/lexend_semibold"
                            android:text="@string/RECOMMENDED_GROUP"
                            android:textAllCaps="true"
                            android:textSize="@dimen/_9ssp" />

                        <ImageView
                            android:id="@+id/forward_arrow1"
                            android:layout_width="@dimen/_16sdp"
                            android:layout_height="@dimen/_16sdp"
                            android:layout_alignParentEnd="true"
                            android:layout_marginRight="@dimen/_20sdp"
                            android:src="@drawable/ic_forward_arrow"
                            app:tint="?attr/colorPrimary" />

                    </RelativeLayout>
                </LinearLayout>




            </LinearLayout>

        </androidx.core.widget.NestedScrollView>
    </LinearLayout>

</layout>

여기 재활용품 뷰의 속성을 사용합니다.

app:layout_behavior="@string/appbar_scrolling_view_behavior"

그리고 이렇게 재생기 보기 중첩 스크롤을 해제했습니다.

android:nestedScrollingEnabled="false"

툴바 스크롤링으로 코디네이터 레이아웃을 구현해야 했는데 하루 종일 이 문제를 해결하는 데만 시간이 걸렸습니다.NestedScrollView를 아예 제거해서 작동시켰습니다.그래서 저는 근본적으로 RelativeLayout을 사용하고 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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.support.v7.widget.RecyclerView
            android:id="@+id/rv_nearby"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</RelativeLayout>
nestedScrollView.setNestedScrollingEnabled(true);

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            //...
        }
    });


<androidx.core.widget.NestedScrollView
    android:id="@+id/nested"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:layout_below="@id/appBarLayout_orders"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <androidx.constraintlayout.widget.ConstraintLayout ...

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

제 경우, 이것이 제게 효과가 있는 것입니다.

  • 다놓을 .android:fillViewport="true"NestedScrollView는 NestedScrollView입니다.

  • . RecyclerView의 높이를 합니다.android:layout_height="wrap_content"

  • RecyclerView에 합니다.android:nestedScrollingEnabled="false"

OR

프로그래밍 방식으로, 코틀린 클래스에서

recyclerView.isNestedScrollingEnabled = false

mRecyclerView.setHasFixedSize(false)

내 경우 NestedScrollview의 하위 항목은 ConstraintLayout입니다.예상대로 작동하지 않습니다. 선형 레이아웃으로 교체했습니다.누군가에게 도움이 될 수도 있습니다.

<androidx.core.widget.NestedScrollView 
  android:id="@+id/nestedScrollView" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent">

  <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:descendantFocusability="blocksDescendants">

    <androidx.recyclerview.widget.RecyclerView
      android:id="@+id/recyclerView"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:nestedScrollingEnabled="false" />

  </LinearLayout>

</androidx.core.widget.NestedScrollView>

나는 이 놀라운 확장자를 사용했습니다(코틀린으로 작성되었지만 자바에서도 사용할 수 있습니다).

https://github.com/Widgetlabs/expedition-nestedscrollview

기본적으로 당신은 이해합니다.NestedRecyclerView패키지 안에서 프로젝트의 활용도를 말하고 다음과 같이 재활용 뷰를 만듭니다.

 <com.your_package.utils.NestedRecyclerView
      android:id="@+id/rv_test"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

마크 크노프의 이 멋진 기사를 확인하세요.

https://medium.com/widgetlabs-engineering/scrollable-nestedscrollviews-inside-recyclerview-ca65050d828a

재료 구성요소 1.3.0-alpha03까지는 RecyclerView가 중첩되어 있는지(스크롤 뷰 또는 중첩된 스크롤 뷰가 아닌 다른 위치에 있는지)는 중요하지 않습니다.그냥 넣어주세요app:layout_behavior="@string/appbar_scrolling_view_behavior"CoordinatorLayout의 AppBarLayout의 형제인 최상위 상위 계층에 있습니다.

이것은 Jetpack Navigation과 함께 단일 활동 아키텍처를 사용할 때 도움이 되었습니다. 여기서 모든 조각이 활동 레이아웃에서 동일한 AppBar를 공유합니다.아래와 같이 FragmentContainer를 AppBarLayout을 포함하는 CoordinatorLayout의 직접 자식으로 만듭니다.다양한 조각의 RecyclerView가 정상적으로 스크롤되고 AppBar가 접혔다가 예상대로 다시 나타납니다.

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:defaultNavHost="true"
            app:navGraph="@navigation/mobile_navigation"/>

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appbar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:liftOnScroll="true">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="?attr/actionBarSize"
                android:theme="?attr/actionBarTheme"
                app:layout_scrollFlags="scroll|enterAlways|snap" />

        </com.google.android.material.appbar.AppBarLayout>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

liftOnScroll때인 것처럼 데됨) 각를 (RecyclerView의 ID를 (으)로 전달하면 작동합니다.AppBarLayout.liftOnScrollTargetViewIdFragment.onResume또는 Fragment가 스크롤되지 않으면 0을 넘깁니다.

중첩 스크롤 뷰가 있는 재활용기 뷰

    <android.support.v7.widget.RecyclerView
    android:id="@+id/rv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

언급URL : https://stackoverflow.com/questions/31000081/how-to-use-recyclerview-inside-nestedscrollview