ScrollView里面的Recyclerview不能stream畅地滚动

对于我的应用程序,我在ScrollView里面使用了一个RecyclerViewRecyclerView根据它的内容使用这个库 。 滚动正在工作,但是当我滚动RecyclerView时,它不能正常工作。 当我滚动滚动查看本身,它滚动顺利。

我用来定义RecyclerView的代码:

 LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false); mFriendsListView.setLayoutManager(friendsLayoutManager); mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null)); 

ScrollViewRecyclerView

 <android.support.v7.widget.RecyclerView android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:id="@+id/friendsList" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

尝试做:

 RecyclerView v = (RecyclerView) findViewById(...); v.setNestedScrollingEnabled(false); 

作为替代,您可以使用支持devise库来修改布局。 我猜你现在的布局是这样的:

 <ScrollView > <LinearLayout > <View > <!-- upper content --> <RecyclerView > <!-- with custom layoutmanager --> </LinearLayout > </ScrollView > 

您可以将其修改为:

 <CoordinatorLayout > <AppBarLayout > <CollapsingToolbarLayout > <!-- with your content, and layout_scrollFlags="scroll" --> </CollapsingToolbarLayout > </AppBarLayout > <RecyclerView > <!-- with standard layoutManager --> </CoordinatorLayout > 

然而,这是一个较长的路要走,如果你自定义的线性布局pipe理器,那么只需要禁用在回收视图上的嵌套滚动。

编辑(4/3/2016)

现在,支持库的v 23.2版本在所有默认的LayoutManager中都包含一个工厂“wrap content”function。 我没有对它进行testing,但是您应该更喜欢它使用的库。

 <ScrollView > <LinearLayout > <View > <!-- upper content --> <RecyclerView > <!-- with wrap_content --> </LinearLayout > </ScrollView > 

我只需要使用这个:

 mMyRecyclerView.setNestedScrollingEnabled(false); 

在我的onCreateView()方法。

非常感谢!

你可以使用这种方式:

将此行添加到您的recyclerView xml中:

  android:nestedScrollingEnabled="false" 

希望这有助于。

你可以尝试用XML和编程方式。 但是,您可能面临的问题是(在API 21下面)通过使用XML进行操作将无法正常工作。 所以最好在你的Activity / Fragment中以编程方式设置它。

XML代码:

 <android.support.v7.widget.RecyclerView android:id="@+id/recycleView" android:layout_width="match_parent" android:visibility="gone" android:nestedScrollingEnabled="false" android:layout_height="wrap_content" android:layout_below="@+id/linearLayoutBottomText" /> 

编程方式:

  recycleView = (RecyclerView) findViewById(R.id.recycleView); recycleView.setNestedScrollingEnabled(false); 

我有类似的问题(我试图创build一个像Google PlayStoredevise嵌套的RecyclerViews)。 处理这个问题的最好方法是通过inheritance子RecyclerViews并覆盖“onInterceptTouchEvent”和“onTouchEvent”方法。 这样你就可以完全控制这些事件的行为,并最终滚动。

 <ScrollView > <LinearLayout > <View > <!-- upper content --> <RecyclerView > <!-- with wrap_content --> </LinearLayout > </ScrollView >