CoordinatorLayout внутри ViewPager внутри проблемы прокрутки CoordinatorLayout

У меня есть внешний CoordinatorLayout который имеет, как AppBar, панель инструментов и TabLayout бар и, как содержание, ViewPager с appbar_scrolling_view_behavior:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content"
    android:layout_width="match_parent" android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <android.support.design.widget.AppBarLayout android:id="@+id/appbar"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"
            app:layout_scrollFlags="scroll|enterAlways|snap">

        </android.support.v7.widget.Toolbar>

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

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager android:id="@+id/container"
        android:layout_width="match_parent" android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.FloatingActionButton android:id="@+id/fab"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_gravity="end|bottom" android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />



</android.support.design.widget.CoordinatorLayout>

Когда вкладка выбрана, ViewPager обновляется с FrameLayout содержащий другой CoordinatorLayout,

Этот должен отображать свернутый фрагмент карты Google на вершине RecyclerView (показывает вертикальный список предметов).

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nearby_content"
        android:layout_width="match_parent" android:layout_height="match_parent"
        tools:context=".MainActivity" >
        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fitsSystemWindows="true"
                app:contentScrim="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways">

                <fragment
                    android:id="@+id/mapFragment"
                    android:name="com.google.android.gms.maps.MapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    app:layout_collapseMode="parallax" />


            </android.support.design.widget.CollapsingToolbarLayout>

        </android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:behavior_overlapTop="184dp"

            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    </android.support.design.widget.CoordinatorLayout>
</FrameLayout>

Ожидаемое поведение заключается в том, что когда пользователь касается карты, сама карта должна получить жест и, следовательно, панорамировать вид.

Если пользователь прокручивает вверх, начиная жест из видимой части списка, списокRecyclerView) должен скользить по сворачивающейся карте, пока не будет достигнут AppBar. В этот момент при дальнейшей прокрутке вверх должен скользить только список.

Проблема возникает, когда жест не слишком медленный: часть прокрутки (примерно эквивалент TabLayout высота) потребляется RecyclerView прежде чем он достигнет AppBar.

Кроме того, после прокрутки всего списка вверх, прокрутка вниз сначала расширяет карту, а затем сдвигает список (оставляя первую часть списка скрытой), когда это следует сделать наоборот.

Перед прокруткой вверх

После прокрутки немного вверх и вниз

0 ответов

Я не очень уверен в ответе, но вы можете попробовать добавить android:nestedScrollingEnabled="false" внутри вашего ресайклера:

<android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:behavior_overlapTop="184dp"
            android:nestedScrollingEnabled="false"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

Надеюсь, это поможет.

Другие вопросы по тегам