使用最新的update to RecyclerView,它现在可以在NestedScrollView中包装。但是,有一些行为并不适合我,我正在寻找答案。
问题1:包装不考虑空格。这意味着如果RecyclerView内容之后有空格,则拖动动画将剪切项目中间屏幕,如下所示:
更新:已解决的问题1.我只需要添加layout_weight =" 1"属于RecyclerView。
问题2:与问题1类似,在删除项目时,RecyclerView会在动画开始时立即换行 - 导致动画剪辑如下所示:
更新:问题2仍未解决,但并不像以前那样明显。当项目被移除时,该项目现在剪辑到视图端口,使其看起来像屏幕跳到新的高度,动画从视图端口下方向上拉。
问题3:添加新项目时,我想滚动到ScrollView的末尾。但是,在我的add事件中运行以下代码时,滚动会立即跳转到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 。
知道如何实现这个目标吗?
答案 0 :(得分:0)
我找到了一个更好的解决方案,我想做什么。比试图弄清楚新的LinearLayoutManager如何包装内容要简单得多。
而不是这个:
<NestScrollView>
<LinearLayout>
<View></View>
<View></View>
<RecyclerView></RecyclerView>
</LinearLayout>
</NestScrollView>
我只使用了回收器并在RecyclerView本身内管理了标题:
<FrameLayout>
<RecyclerView></RecyclerView>
</FrameLayout>
现在管理起来要容易得多,因为我可以在项目的上方或下方放置任何视图。
在此处使用此解决方案:Link