NestedScrollViewLayout里面的SwipeRefreshLayout里面的RecyclerView不能滚动

我有一个活动与折叠工具栏和嵌套滚动视图与一个FrameLayout ,我把碎片放在里面。 最初,我把它放在一个CardViewFragmentA

很好用。 当我点击一个button,虽然我用另一个包含RecyclerViewreplaceFragmentB

当我添加FragmentB我不能滚动到列表的底部。

这个video显示了这个问题: LINK TO VIDEO

主机活动布局:

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="340dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> ......... ...... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <!-- the layout which will be the content of the activity (which will be hosted inside the drawer (NOT the list of the drawer)) --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </FrameLayout> </android.support.v4.widget.NestedScrollView> 

碎片B布局:

 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/contentView" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_users" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:layout_width="match_parent" android:layout_height="wrap_content" /> <include layout="@layout/view_progress" /> <include layout="@layout/view_retry" /> <!--</LinearLayout>--> </android.support.v4.widget.SwipeRefreshLayout> 

Solutions Collecting From Web of "NestedScrollViewLayout里面的SwipeRefreshLayout里面的RecyclerView不能滚动"

你把RecyclerView放在NestedScrollView
我认为更好的解决scheme是有NestedScrollViewRecyclerView但不是两个,因为RecyclerView已经实现了NestedScrollingChild

我在我的应用程序中有类似的布局。 我做了同样的 – 把RecyclerView放到FrameLayout,然后在NestedScrollView里面。 这是停止正常工作。 没有NestedScrollView一切工作正常。

我认为这是scrollevent问题,customview扩展ListView或RecycleView。 这是我的sol:

 public class RewriteListView extends ListView { public RewriteListView(Context context) { super(context); } public RewriteListView(Context context, AttributeSet attrs) { super(context, attrs); } public RewriteListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } 

}

要开心 :)

已经回答了! 两个可滚动的元素(如您的问题中的RecycleView和NestedScrollView)不能一起工作。

编辑你的活动布局。

 <ParentLayout> ....... <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="340dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp"> ......... ...... </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> //THIS FRAGMENT WILL BE REPLACED! <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" > </FrameLayout> ....... </ParentLayout> 

而且默认情况下,在这个活动的第一次运行 – 用上面的FrameLayout代替 – 用NestedScrollView(你需要创build新的Fragmentreplace)和你的问题点击replace为Fragment后的第一个片段。

两件事情:

首先你不需要在NestedScrollViewembedded你的片段容器,如果你想在你的活动中滚动行为。

FrameLayout直接放置在其中具有layout_behavior属性的协调器布局中,然后简单地将任何片段与滚动View(并且不必具有layout_behavior attr)。

所以在你的例子中,你应该分割:

FragmentA布局与CardView里面的NestedScrollView FragmentB与RecyclerView里面SwipeRefreshLayout

其他的问题是,你把更多的一个孩子在SwipeRefreshLayout ,正如文件中所说,它应该只有一个直接的孩子。 资源