RecyclerView.ViewHolder的部分更新

Php*_*pXp 31 animation android android-recyclerview

我正试图在我的时间里随着时间改变这个领域RecyclerView.每个人都ViewHolder包含一个CardView和更多的内部视图.我想要制作动画的唯一视图是有时间的视图.如您所见,没有动画:

adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

RecyclerView没有动画

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

int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
    adapter.notifyItemChanged(i);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有没有办法获得所有的列表ViewHolders然后更新(动画)TextView每个内部的那个?

Rya*_*yan 57

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

notifyItemRangeChanged(positionStart, itemCount, payload);
Run Code Online (Sandbox Code Playgroud)

哪里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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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