1

随着RecyclerView 的最新更新,它现在可以将 wrap_content 包含在 NestedScrollView 中。但是,有些行为对我不利,我正在寻找答案。

问题1:包装不考虑空格。这意味着如果 RecyclerView 内容之后有空格,则拖动动画将剪辑项目中间屏幕,如下所示:

在此处输入图像描述

更新:已解决问题 1。我只需要将 layout_weight="1" 属性添加到 RecyclerView。

问题 2:与问题 1 类似,删除项目时,RecyclerView 将在动画开始时立即换行 - 导致动画剪辑如下所示:

在此处输入图像描述

更新:问题 2 仍未解决,但没有以前那么明显。当项目被移除时,项目现在剪辑到视口,看起来屏幕跳到了新的高度,动画从视口下方向上拉。

问题3:添加新项目时,我想滚动到ScrollView的末尾。但是,在我的添加事件中运行以下代码后,滚动立即跳转到滚动视图的当前端。是否有“插入项目后”的回调?

public void addItem(T item) {
    items.add(item);
    notifyItemInserted(items.size() - 1);
    scroll.fullScroll(View.FOCUS_DOWN)
}

在此处输入图像描述

更新:问题 3 仍未解决,但我找到了一种解决方法,可以像这样颠倒顺序:

layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);

然后是添加新项目时的以下代码。这样,无论高度如何,滚动始终有效。

nestedScrollView.fullScroll(View.FOCUS_UP);

文章引用:

请注意,尽管 RecyclerView 为其子项设置动画,但它不会为其自身的边界更改设置动画。如果您想在 RecyclerView 边界发生变化时为其设置动画,您可以使用 Transition API。

好吧,我不需要为边界设置动画,但我确实希望它捕捉并填充视口(在这种情况下,我不能使用 match_parent,因为我在回收站视图上方有一些静态视图)。从而解决问题1

我想在改变界限之前做一些事情。示例:在删除项目上为删除设置动画,然后应用绑定更改。从而解决问题2

相反,当界限已经改变时,我想做一些事情。示例:在添加新项目时,首先应用新绑定,然后启动滚动动画。从而解决问题3

知道如何实现这一目标吗?

4

1 回答 1

0

我已经为我想做的事情找到了更好的解决方案。比试图弄清楚新的 LinearLayoutManager 如何包装内容要简单得多。

而不是这样:

<NestScrollView>
  <LinearLayout>
    <View></View>
    <View></View>
    <RecyclerView></RecyclerView>
  </LinearLayout>
</NestScrollView>

我只使用了回收器并在 RecyclerView 本身中管理标题:

<FrameLayout>
  <RecyclerView></RecyclerView>
</FrameLayout>

现在管理起来要容易得多,因为我可以将任何视图放在项目的上方或下方。

在此处使用此解决方案:链接

于 2016-06-25T12:00:09.377 回答