android - RecyclerView.ViewHolder 部分更新

标签 android animation android-recyclerview

我正在尝试随时间更改 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/

相关文章:

android - 以编程方式调整布局大小(作为动画)

android - 如何激发精子活力? - 安卓

Android:垂直viewpager中的RecyclerView

java - 如何根据 child 的值(value)观在 RecyclerView Android 上显示项目

android - lambda 回调中 Android Cocos2D-x 应用程序的段错误

android - 在 Android Studio 中构建一个项目创建多个 apk 文件

android - 在 ViewPager 中滑动半页(来自兼容包)

android - 刷新android中的所有 View ?

jquery - 拆分和合并图像动画

android - 如何在 AutoCompleteTextView 的回收站 View 中显示数据列表