【问题标题】:Animate RecyclerView items when resorting underlying collection使用基础集合时为 RecyclerView 项目设置动画
【发布时间】:2014-12-05 14:14:18
【问题描述】:

我在一个新应用程序中实现了 RecyclerView 和 CardView,我在 L 之前使用了 ListView。当我重新收集时,说:

            Collections.reverse(items);
            adapter.notifyDataSetChanged();

这很好,但我需要动画向用户展示这些变化。

有什么简单的方法可以做到这一点吗?如果没有,您能指出正确的方法吗?

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    如果你有稳定的 id,你可以运行:

    Collections.reverse(items);
    adapter.notifyDataSetChanged();
    

    这会给你“一些”动画。您可以这样做以获得更高效、更逼真的动画:

    Collections.reverse(items);
    final int end = items.size() - 1;
    for (int i = 0; i < end; i ++) {
        adapter.notifyItemMoved(0, end - i);
    }
    

    没有测试代码,但应该是正确的。基本上,对于除最后一项之外的每个项目,您都会为列表末尾的第一项分配一个移动事件。注意第一个参数总是0,因为 RecyclerView 知道当第一个项目移动到列表的末尾时,下一个项目是第一个,依此类推。

    这将具有与手动反转相同的效果。

    【讨论】:

      【解决方案2】:

      尝试一次反转集合 1 个项目,并在 RecyclerView.Adapter 中为每个项目调用这些方法之一。

      final void  notifyItemInserted(int position)
      final void  notifyItemMoved(int fromPosition, int toPosition) //I guess this one?
      final void  notifyItemRangeChanged(int positionStart, int itemCount)changed.
      final void  notifyItemRangeInserted(int positionStart, int itemCount)
      final void  notifyItemRangeRemoved(int positionStart, int itemCount)
      final void  notifyItemRemoved(int position)
      

      【讨论】:

        猜你喜欢
        • 2016-11-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-30
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        相关资源
        最近更新 更多