RecyclerView Adapter onBindViewHolder通过notifyItemChanged在第二次调用时更新

时间:2016-06-18 09:15:54

标签: android android-recyclerview recycler-adapter

我在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代码。 有人可以解释为什么会这样,我怎样才能消除这个错误,只需点击一下即可正确更新。

1 个答案:

答案 0 :(得分:2)

持有人在视图之间回收。您应该始终根据数据进行布局。在这种情况下,您可以创建一个字典,其位置(更好的是要映射的数据对象的id)作为键,而布尔值(“扩展”标志)作为值。单击按钮时,将更新字典中的相应标志。