对于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-animators和https://github.com/gabrielemariotti/RecyclerViewItemAnimators可以做到这一点。我希望我错了。
答案 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
中的更详细说明中找到更多信息