执行多次插入/移除时不在RecyclerView上的动画(不在单一范围内)

时间:2016-09-11 06:28:55

标签: android android-recyclerview android-animation

对于RecyclerView,当我们插入一个项目或删除项目时,我们可以使用以下API进行动画处理:

recyclerView.setItemAnimator(...)
// within the adapter
notifyItemInserted(position);
// or 
notifyItemRemoved(position);

即使是变化的范围,我们也可以使用

notifyItemRangeInserted(...)
// or
notifyItemRangeRemoved(...)

但是,如果我插入/删除了多个项目,但它们不在某个范围内,是否仍然可以获得所需的动画?

e.g。我将A,B,D,G ......插入到C,E,F,H列表中...因此我得到A,B,C,D,E,F,G,H .. ..适当的动画应该显示插入A,B和D和G,而C,E,F和H动画向下/向上以允许插入的感觉。就像单个插入/移除一样,但是并行完成多个项目。

我没关系,如果图书馆也可以帮助他们这样做。

我不认为https://github.com/wasabeef/recyclerview-animatorshttps://github.com/gabrielemariotti/RecyclerViewItemAnimators可以做到这一点。我希望我错了。

2 个答案:

答案 0 :(得分:2)

您可以根据需要分发尽可能多的内容。 RecyclerView批处理所有适配器更改,直到下一个布局传递并一起执行它们。

因此,在A, B, D, G插入C, E, F, H以获取A, B, C, D, E, F, G, H的情况下,您可以发送:

notifyItemRangeInserted(0, 2); //插入A,B,列表变为:ABCEFH

notifyItemInserted(3); //插入D,列表变为:ABCDEFH

notifyItemInserted(6); //插入G,列表变为:ABCDEFGH

RecyclerView将为所有这些动画制作动画。

答案 1 :(得分:1)

我设法使用DiffUtil实现我想要的功能。它可以插入和删除列表simultenousely甚至交换订单。我所做的演示应用程序,如下面的GIF所示。您可以在https://medium.com/@elye.project/simultaneous-insertion-and-removal-of-recyclerview-with-animation-f9e1800a3dd0#.3evndq4is

中的更详细说明中找到更多信息

enter image description here