繁体   English   中英

RecyclerView.ViewHolder的部分更新

[英]Partial update of RecyclerView.ViewHolder

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

adapter.notifyDataSetChanged();

RecyclerView没有动画

逐个更新项目无济于事,因为整个CardView会闪烁:

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

在此输入图像描述

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

你可以通知你的RecyclerView.Adapter的观察员发出你的部分更新RecyclerView.ViewHolders通过传递一个有效载荷Object

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指定的时间格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM