【问题标题】:Partial update of RecyclerView.ViewHolderRecyclerView.ViewHolder 部分更新
【发布时间】:2016-04-30 15:20:36
【问题描述】:

我正在尝试随时间更改RecyclerView 中的字段。每个单独的ViewHolder 包含一个CardView 和内部的更多视图。我想要动画的唯一视图是带有时间的视图。如您所见,没有动画:

adapter.notifyDataSetChanged();

逐个更新项目没有帮助,因为整个CardView会闪烁:

int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
    adapter.notifyItemChanged(i);
}

有没有办法获取所有ViewHolders 的列表,然后更新(动画)每个里面的TextView

【问题讨论】:

  • 你需要添加item animator

标签: android animation android-recyclerview


【解决方案1】:

您可以通过传递有效负载Object 来通知您的RecyclerView.Adapter 的观察者发布您的RecyclerView.ViewHolders 的部分更新。

notifyItemRangeChanged(positionStart, itemCount, payload);

payload 可以是或包含一个表示相对或绝对时间的标志。要将 payload 绑定到您的视图持有者,请覆盖适配器中的以下 onBindViewHolder(viewHolder, position, payloads) 方法,并检查 payloads 参数中的数据。

@Override
public void onBindViewHolder(MyViewHolder viewHolder, int position, List<Object> payloads) {
    if (payloads.isEmpty()) {
        // Perform a full update
        onBindViewHolder(viewHolder, position);
    } else {
        // Perform a partial update
        for (Object payload : payloads) {
            if (payload instanceof TimeFormatPayload) {
                viewHolder.bindTimePayload((TimeFormatPayload) payload);
            }
        }
    }
}

在您的MyViewHolder.bindTimePayload(payload) 方法中,将您的时间TextViews 更新为payload 中指定的时间格式。

【讨论】:

  • 效果很好。非常感谢。
  • 兄弟,你拯救了一天,工作就像一个魅力,我正准备将回收站视图更改为 viewpager。但你的回答也让我学习并节省了我大量的努力
  • 谢谢瑞恩。谢谢,谢谢,谢谢!
  • 请参阅此处:stackoverflow.com/a/38796098/3904109 以获得很好的解释和工作示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 2023-03-19
  • 2021-08-08
  • 2012-06-03
  • 2021-12-17
相关资源
最近更新 更多