RecyclerView滚动无法在Fragment中使用SwipeRefreshLayout

时间:2016-07-14 12:47:12

标签: android android-fragments android-recyclerview

我在片段中使用带有RecyclerView的SwipeRefreshLayout。

RecyclerView不会向下滚动。

这是我的主要活动的布局:

    <android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
       >
        <include
            layout="@layout/toolbar" />
            <!-- Replaced with Fragment -->
            <LinearLayout
                android:id="@+id/fragment_placeholder"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" />


    </LinearLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/main_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:layout_gravity="start"
        android:background="@color/white"
        android:scrollbars="vertical"
        />
</android.support.v4.widget.DrawerLayout>

这很好用 - 带有问题的RecyclerView的Fragment用你可以在上面看到的ID fragment_placeholder替换LinearLayout。

片段布局在这里:

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

Swipe-Refresh-Gesture工作正常,但如果RecyclerView的内容超出屏幕尺寸,则滚动功能无法正常工作。

我试图设置nestedScrollingEnabled(true),但它也不起作用。

RecyclerView dataView = (RecyclerView) layout.findViewById(R.id.content_recycler_view);
final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
dataView.setLayoutManager(mLayoutManager);
adapter = new ListContentAdapter();
dataView.setAdapter(adapter);
dataView.setNestedScrollingEnabled(true);

如果我在RecyclerView周围打包NestedScrollView,那只是滚动:

    <android.support.v4.widget.SwipeRefreshLayout 
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:id="@+id/swipe_refresh_layout">
        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/content_recycler_view"
                    android:layout_width="match_parent"
                    app:layout_behavior="@string/appbar_scrolling_view_behavior"
                    android:layout_height="match_parent" />
        </android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.SwipeRefreshLayout>

但这会破坏RecyclerView的优势,重复使用它的观点。 为什么不滚动?

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

变化:

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

为:

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