我正在尝试在RecyclerView
中随时间更改字段。每个人ViewHolder
都包含CardView
和更多内容。我想要制作动画的唯一视图是有时间的视图。如您所见,没有动画:
adapter.notifyDataSetChanged();
逐个更新项目无济于事,因为整个CardView
闪烁:
int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
adapter.notifyItemChanged(i);
}
有没有办法获取所有ViewHolders
的列表,然后更新(动画)每个TextView
内的一个for(var i=0; i<100; i++){
var cell = document.getElementById(i);
cell.addEventListener("click", handleClick);
console.log("test")
}
function handleClick(e){
var cell = e.target;
console.log(cell);
cell.addEventListener("keyup", handleInput);
console.log(true);
cell.removeEventListener("click", handleClick);
console.log(true);
}
function handleInput(e){
var key = e.keyCode;
var i = e.target.id;
console.log(key);
document.getElementById(i).innerHTML = key;
document.getElementById("output").innerHTML = key;
}
?
答案 0 :(得分:52)
您可以通过传递有效负载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
中指定的时间格式。