RecyclerView
で時間とともにフィールドを変更しようとしています。個々のViewHolder
には、CardView
と内部にいくつかのビューが含まれています。アニメーション化するビューは、時間のあるビューのみです。ご覧のとおり、アニメーションはありません。
adapter.notifyDataSetChanged();
CardView
全体が点滅するため、アイテムを1つずつ更新しても役に立ちません。
int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
adapter.notifyItemChanged(i);
}
すべてのViewHolders
のリストを取得してから、各TextView
を更新(アニメーション)する方法はありますか?
ペイロード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
で指定された時間形式に更新します。