RecyclerView删除动画错误

时间:2016-03-20 17:31:54

标签: android android-recyclerview animator

我已经实现了RecyclerView,我可以在其中添加和删除项目。我想在最后一个位置添加添加的项目,每当我添加一个新项目时,动画运行良好。也就是说,最后一项向下移动,让新项目的空间淡入。

当我删除某个项目时,会出现一个我不知道如何修复的问题。我希望它的表现如下:

  1. 淡出已删除的元素,
  2. 向上移动它下面的所有物品。
  3. 实际发生的是,首先,最后一项消失,然后动画的其余部分发生。当已删除元素下方的项目向上移动时,最后一项将重新显示为来自墙后面。

    对我来说,似乎RecyclerView缩小到“动画后”高度,然后执行动画。

    我尚未定义ItemAnimator,因此DefaultItemAnimator必须是使用的supportsPredictiveItemAnimations。我观看了this video,并在LinearLayoutManager的自定义实现中覆盖了#navigation { background-color: red; width: 10%; height: 3000px; float: left; position: absolute; z-index: 99999; left: 0; top: 0; } 方法,但它无法修复它。

2 个答案:

答案 0 :(得分:2)

我已通过Google问题跟踪器here

报告了此问题

我希望我们能尽快得到解决!正如您所说,当您的recyclerview正在包装它的内容以计算它的高度时,它似乎与recyclerview的度量更新和动画之间的可能竞争条件非常相关。

This article也以非常详细的方式解释了这个问题。

答案 1 :(得分:0)

也许有点晚了,但我能够通过将 RecyclerView 项目动画器设置为 null,然后在我的适配器的 setList(list) 函数中这样安排转换来解决这个问题:

Transition transition = new AutoTransition();
transition.setDuration(200); // Or any duration you want
TransitionManager.beginDelayedTransition(mRootViewGroup, transition);

其中 mRootViewGroup 是包含 RecyclerView 的视图组。

通过将 layout_height(或宽度,取决于滚动方向)设置为 wrap_content 以外的其他值也可以解决此问题,但是如果像我一样,您需要将 recyclerview 高度设置为 wrap_content,这可能是您的解决方案.

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