使用ItemTouchHelper

时间:2016-06-24 08:53:06

标签: android android-recyclerview android-nestedscrollview itemtouchhelper

使用最新的update to RecyclerView,它现在可以在NestedScrollView中包装。但是,有一些行为并不适合我,我正在寻找答案。

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

enter image description here

更新:已解决的问题1.我只需要添加layout_weight =" 1"属于RecyclerView。

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

enter image description here

更新:问题2仍未解决,但并不像以前那样明显。当项目被移除时,该项目现在剪辑到视图端口,使其看起来像屏幕跳到新的高度,动画从视图端口下方向上拉。

问题3:添加新项目时,我想滚动到ScrollView的末尾。但是,在我的add事件中运行以下代码时,滚动会立即跳转到scrollview的当前末尾。在插入项目"?

之后是否有"的回调
public void addItem(T item) {
    items.add(item);
    notifyItemInserted(items.size() - 1);
    scroll.fullScroll(View.FOCUS_DOWN)
}

enter image description here

更新:问题3仍然没有解决,但我找到了一个扭转此顺序的解决方法:

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

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

nestedScrollView.fullScroll(View.FOCUS_UP);

文章引用:

  

请注意,尽管RecyclerView为其设置了动画效果   孩子们,它没有动画自己的边界变化。如果你能   想要在RecyclerView边界变化时为其设置动画,您可以使用   Transition API。

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

我希望在更改边界之前做一些事情。示例:在删除项目上为删除设置动画,然后应用绑定更改。因此解决问题2

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

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

1 个答案:

答案 0 :(得分:0)

我找到了一个更好的解决方案,我想做什么。比试图弄清楚新的LinearLayoutManager如何包装内容要简单得多。

而不是这个:

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

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

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

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

在此处使用此解决方案:Link