NestedScrollView and RecyclerView issues, how to s

2019-08-08 10:03发布

I'm not sure how to implement this.. I want to use:

  1. Collapsing Toolbar
  2. "normal" Layout (NestedScrollView)
  3. RecyclerView
  4. and navigate by the NavigationDrawer (so the layouts come together in my activity_main.xml)

The issues comes up when I try to use the RecyclerView - because of the NestedScrollView (yeah, the rule "don't place multiple scrollables together" is true)...

But how to achieve this? Is there a possibility to keep the layouts separated in some way?

Info: I am replacing the content of the app in the FrameLayout (see middle section).

Would it be a proper solution to insert multiple NestedScrollViews (in each Fragment one, which should be scrollable)?

Here is my main layout:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout
    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:fitsSystemWindows="false"
    android:background="@color/main_frame"
    >

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="@color/colorPrimary"
            app:expandedTitleMarginBottom="32dp"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            >

            <ImageView
                android:id="@+id/header"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorPrimary"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"
                />

            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar_overlay"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                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="@string/appbar_scrolling_view_behavior"
        >

        <FrameLayout
            android:id="@+id/main_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/toolbar"
            >
        </FrameLayout>

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

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

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="start"
    android:background="@color/colorPrimaryNavDrawer"
    app:headerLayout="@layout/nav_drawer_header"
    app:menu="@menu/nav_drawer_items"
    />

Thanks in advance.

1条回答
Bombasti
2楼-- · 2019-08-08 10:51

Best way to achieve this is to use only a RecyclerView with an adapter handling different view types. For the first adapter position, the list item will be your fixed content once in NestedScrollView, and for other positions what you want to use is the RecyclerView items from your current solution.

查看更多
登录 后发表回答