随着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。
知道如何实现这一目标吗?