我正在尝试实现嵌套的RecyclerView
。我这样做但父卷轴RecyclerView
滚动不顺畅。我做了很多优化,但仍然无法成功使用滚动,直到我将父回收视图放在NestedScrollView
中。滚动现在完美无缺,但我有一个问题。
如果我滚动(甚至是微小的)我的内心RecyclerView
(水平),我立即回到[垂直recyclerview - parent] 的开头。
这种情况发生过一次。为什么这样,是否有可能解决它?
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<android.support.v7.widget.RecyclerView
android:id="@+id/parent_rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</android.support.v7.widget.RecyclerView>
</android.support.v4.widget.NestedScrollView>
答案 0 :(得分:0)
据我了解您的问题,您的父级RecyclerView
会更新并在内部水平RecyclerView
项目更新时滚动到位置0。您还声明水平RecyclerView
停留在同一位置更新项目已更新。在这种情况下,您需要保存父RecyclerView
的状态,然后将其放回水平RecyclerView
中的项目更新后的位置。
// Save state
private Parcelable recyclerViewState;
recyclerViewState = parentRecyclerView.getLayoutManager().onSaveInstanceState();
// Restore state
parentRecyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);
在调用API以更新水平RecyclerView
中的数据之前保存状态,然后在更新完成时恢复父RecyclerView
的位置。
答案 1 :(得分:0)
我有一个解决方案。
基本上,我所做的是在相对布局中包装回收器视图并设置android:descendantFocusability="blocksDescendants"
,现在它运行良好。
<android.support.v4.widget.NestedScrollView
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<android.support.v7.widget.RecyclerView
android:id="@+id/parent_rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>