我在适配器中使用setHasStableIds并因各种原因调用整个notifyDatasetChanged而不是notifyItemXYZ。我从setHasStableIds(true)开始得到简单的动画,但是当删除项目时,屏幕外的项目应该在屏幕上现在滑动,只是淡入。(正如在Chet Haase中关闭预测动画的情况一样{{3} })。当我使用notifyItemRemoved时,它可以工作(但我的其他代码变得非常不方便)
TLDR;有没有办法在使用setHasStableIds&时获得预测(不仅是简单的)动画?使用RecyclerView的notifyDatasetChanged? (除了使用notifyItemRemoved)
答案 0 :(得分:0)
几年前问过,但对于寻求此方法的人来说可能会有所帮助。
您可以在布局管理器中覆盖getExtraLayoutSpace方法,以返回例如至少平均项目大小(以像素为单位)(以将非预测性动画隐藏在屏幕外)。
rv.setLayoutManager(new LinearLayoutManager(rv.getContext()) {
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
return Math.max(averageItemSizePx, super.getExtraLayoutSpace(state));
}
});
当然,这会降低性能,所以要小心。
但是有时这种方法会给您带来不可预测的动画-它取决于上一个滚动方向(来自LinearLayoutManager源)