我在ViewHolder布局中有一个按钮,其onClick方法在更新某些持有者项目后调用notifyItemChanged。 onBindViewHolder被正确调用,但持有者项值不是更新的。他们在第二次点击时获得更新。就像,onBindViewHolder在这两次点击中被调用两次,但它仅在第二次时具有更新的值。
@Override
public void onBindViewHolder(final PlannerRecyclerAdapter.Holder holder, int position) {
if(holder.expanded) {
holder.toggleContentButton.setImageResource(R.drawable.ic_expand_less_black_24dp);
holder.tv.setText("asdksafsaljfksafafsfa\nsasfsafasfasdsafsafsadarqr");
} else {
holder.toggleContentButton.setImageResource(R.drawable.ic_expand_more_black_24dp);
holder.tv.setText("");
}
holder.toggleContentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.expanded = !holder.expanded;
notifyItemChanged(holder.getAdapterPosition());
}
});
}
这是我的onBindViewHolder代码。 有人可以解释为什么会这样,我怎样才能消除这个错误,只需点击一下即可正确更新。
答案 0 :(得分:2)
持有人在视图之间回收。您应该始终根据数据进行布局。在这种情况下,您可以创建一个字典,其位置(更好的是要映射的数据对象的id)作为键,而布尔值(“扩展”标志)作为值。单击按钮时,将更新字典中的相应标志。