【发布时间】:2016-03-03 08:08:10
【问题描述】:
我正在使用RecyclerView 使用SortedListAdapterCallback 提供来自SortedList 的数据。我想为onChange 事件禁用动画,但为onInserted/onRemoved/onMoved 保留它们。我曾尝试在RecyclerView 使用的DefaultItemAnimator 上调用setSupportsChangeAnimations(false),但动画仍然出现。如果我调用setItemAnimator(null) 所有动画会按预期成功删除。
我尝试查看实现,看起来如果supportsChangeAnimations 是true,RecyclerView 将通过保留旧的 viewHolder 并将其交叉淡入淡出到新的 viewHolder 来动画更改事件。我不想那样。如果supportsChangeAnimations 是false,那么旧的和新的viewHolders 将是同一个对象,取而代之的是从x 到x 的onMoved 动画(即没有实际移动)。然而,这意味着该项目将获得令人讨厌的反弹效果。我也不想要那个,我根本不想要动画。 :(
来自 DefaultItemAnimator.java:
@Override
public boolean animateChange(ViewHolder oldHolder, ViewHolder newHolder,
int fromX, int fromY, int toX, int toY) {
if (oldHolder == newHolder) {
// Don't know how to run change animations when the same view holder is re-used.
// run a move animation to handle position changes.
return animateMove(oldHolder, fromX, fromY, toX, toY);
}
...
有时当我加载我的列表时,我会异步获取一些数据并更新项目 1-3 次,每次弹跳和闪烁时看起来真的很糟糕。
我如何有效地完全禁用 onChange 动画而不求助于编写完全自定义的 ItemAnimator?
【问题讨论】:
标签: android android-recyclerview android-support-library