Перехват RecyclerView вниз бросается в NestedScrollView - PullRequest
1 голос
/ 04 июня 2019

У меня есть следующая раскладка:

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/rootLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.design.widget.CollapsingToolbarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="160dp"
                    app:layout_collapseMode="parallax" />

                <android.support.v7.widget.Toolbar
                    android:layout_width="match_parent"
                    android:layout_height="52dp"
                    app:layout_collapseMode="pin" />
            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/nestedScrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            app:layout_behavior="com.example.CardViewBehavior">

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

                <FrameLayout
                    android:id="@+id/fixedBanner"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                </FrameLayout>

                <FrameLayout
                    android:id="@+id/card1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <!-- random content -->
                </FrameLayout>

                <FrameLayout
                    android:id="@+id/card2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/recyclerView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />
                </FrameLayout>
            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>
</layout>

При прокрутке вниз (палец вверх) от fixedBanner или card1 сначала сворачивается appBarLayout, затем прокручивается nestedScrollView вниз.Однако, если прокрутить вниз с recyclerView, recyclerView начнет прокрутку.Я хочу, чтобы nestedScrollView сначала прокрутил вниз, прежде чем recyclerView.

Я попытался использовать пользовательский CardViewBehavior, установленный на nestedScrollView, который переопределяет onNestedPreScroll, чтобы использовать дельты прокрутки, если appBarLayout не полностью свернут иесть еще диапазон для прокрутки nestedScrollView.

Однако, если я проведу достаточно быстро на recyclerView, recyclerView начнет мигать до того, как nestedScrollView полностью прокрутится до дна.Я попытался переопределить onNestedPreFling и onNestedFling в CardViewBehavior, но кажется, что эти два метода никогда не вызывались, когда RecyclerView сам начинает сбрасывать.

Как я могу гарантировать, что nestedScrollView прокручивается до дна до recyclerView начинает прокручивать?

1 Ответ

0 голосов
/ 05 июня 2019

Расширьте NestedScrollView и переопределите метод onNestedPreScroll напрямую.

(Решение найдено на https://www.androiddesignpatterns.com/2018/01/experimenting-with-nested-scrolling.html)

...