gpt4 book ai didi

android - RecyclerView.ViewHolder 部分更新

转载 作者:IT老高 更新时间:2023-10-28 21:58:10 25 4
gpt4 key购买 nike

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

adapter.notifyDataSetChanged();

RecyclerView with no animations

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

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

enter image description here

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

最佳答案

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

notifyItemRangeChanged(positionStart, itemCount, payload);

payload 可以是或包含表示相对或绝对时间的标志。要将 payload 绑定(bind)到您的 View 持有者,请覆盖适配器中的以下 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 中指定的时间格式。

关于android - RecyclerView.ViewHolder 部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36956643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com