Android RecyclerView的notifyItemInserted动画

7

我不知道为什么会出现这种情况,但是调用notifyItemInserted(0)(只在第一个位置)不会使视图动画化。在其他位置上一切正常。

在这种情况下动画效果有效:

friendsList.remove(positionFriend);
friendsList.add(1, newFriend);
notifyItemInserted(1);
notifyItemRemoved(positionFriend+1);

在这种情况下动画不起作用:

friendsList.remove(positionFriend);
friendsList.add(0, newFriend);
notifyItemInserted(0);
notifyItemRemoved(positionFriend+1);

期望的行为: 元素被插入并在顶部发生插入动画。

目前的情况:没有显示插入动画,实际上我认为“在视觉上”,第一个元素消失并发生移动动画。

1个回答

10

动画发生了。但是您以前的位置零变为位置1(在屏幕上可见),如果向上滚动,则会出现新的位置零。因此,要使其可见,您必须在滚动回收站后滚动。

friendsList.remove(positionFriend);
friendsList.add(0, newFriend);
notifyItemInserted(0);
notifyItemRemoved(positionFriend+1);
recycler.scrollToPosition(0);

哦,所以元素被移动了。这是一种奇怪的行为,你应该使用本地方法来解决...最后一个问题,有没有办法在不通过适配器构造函数传递引用的情况下执行recycler.scrollToPosition(0)? - johnny_crq
我同意从用户角度来看这是一种奇怪的行为,但如果你想象一下RecyclerView在后台是如何编码的,它只是一种逻辑行为。据我所知,我通常从适配器外部调用notify_,并让适配器仅作为数据列表和bindView代码。 - Budius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接