RecyclerView 移除动画问题

10
我已经实现了一个RecyclerView,可以添加和删除项目。我希望添加的项目添加到倒数第二个位置,并且每当我添加新项目时,动画都能正常运行。也就是说,最后一个项目向下移动,为新项目腾出空间。
当我删除一个项目时,有一个问题我不知道如何解决。我希望它的行为是:
  1. 淡出被删除的元素,
  2. 将其下面的所有项目向上移动。
实际发生的是,首先,最后一个项目消失,然后才进行其余的动画。当删除元素下面的项目向上移动时,最后一个项目从墙后重新出现。
对我来说,似乎RecyclerView缩小到“后动画”高度,然后执行动画。
我还没有定义ItemAnimator,所以默认使用DefaultItemAnimator。我已经观看了这个视频,并在自定义的LinearLayoutManager实现中覆盖了supportsPredictiveItemAnimations方法,但这并没有解决问题。
2个回答

6
我已经通过Google问题跟踪器在这里报告了这个问题。
我希望我们能尽快解决它!就像你说的那样,这似乎与recyclerview的测量更新和动画之间可能存在的竞争条件有关,当recyclerview在包装其内容以计算其高度时。 本文也详细解释了这个问题。

2
问题已于2017年5月25日关闭,状态为“不修复(预期行为)”。但是该漏洞仍然存在 :( - Anton Pogonets
这篇相关文章很有帮助,基本上不要在RecylerView上使用wrap_content,但是AndroidX中仍存在该bug。 - Jer

0
也许有点晚了,但我在我的情况下通过将RecyclerView项动画设置为null来解决了这个问题,然后在我的Adapter的setList(list)函数中安排了一个过渡效果。
Transition transition = new AutoTransition();
transition.setDuration(200); // Or any duration you want
TransitionManager.beginDelayedTransition(mRootViewGroup, transition);

mRootViewGroup 是包含 RecyclerView 的 ViewGroup。

这个问题也可以通过将您的 layout_height(或宽度,取决于滚动方向)设置为非 wrap_content 来解决,但如果像我一样,您需要将 RecyclerView 高度设置为 wrap_content,则这可能是一个解决方案。

不能确定它是否也能解决您的问题,但我想我还是分享一下对我有用的内容。


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