ScrollView里面的Recyclerview不能stream畅地滚动
对于我的应用程序,我在ScrollView
里面使用了一个RecyclerView
, RecyclerView
根据它的内容使用这个库 。 滚动正在工作,但是当我滚动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));
ScrollView
的RecyclerView
:
<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 >