我对recyclerview有问题。每次单击“爱”按钮时,我都希望将颜色和文本更改为红色,但是当我上下滑动时,按钮会闪烁到另一个位置。这是我的代码:
holder.layoutLove.setOnClickListener {
selectedPosition = holder.adapterPosition
notifyDataSetChanged()
Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()
}
if (selectedPosition == holder.adapterPosition) {
holder.tvLove.setTextColor(Color.RED)
holder.imvLove.setImageResource(R.drawable.liked)
}
答案 0 :(得分:0)
您只是在else
中逃脱了clickListeners
的条件
holder.layoutLove.setOnClickListener {
if (position == holder.adapterPosition) {
holder.tvLove.setTextColor(Color.RED)
holder.imvLove.setImageResource(R.drawable.liked)
}else{
holder.tvLove.setTextColor(Color.GREY)
holder.imvLove.setImageResource(R.drawable.unlike)
}
notifyDataSetChanged()
Toast.makeText(context, position.toString(), Toast.LENGTH_SHORT).show()
}
希望这段代码对您有所帮助。
如果仍然不能解决问题,请使用“模型类”进行处理。
答案 1 :(得分:0)
只需测试此代码,我看不到任何闪烁:
私有类CustomAdapter扩展了RecyclerView.Adapter {
private List<Boolean> data = new ArrayList<>();
public void updateData(List<Boolean> data) {
this.data.clear();
this.data.addAll(data);
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_view, parent, false);
return new ViewHolder(view);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.view.setBackgroundColor(data.get(position) ? getColor(R.color.colorAccent) : getColor(R.color.black));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data.set(position, !data.get(position));
CustomAdapter.this.notifyItemChanged(position);
}
});
}
@Override
public int getItemCount() {
return data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final ImageView view;
public ViewHolder(View itemView) {
super(itemView);
view = itemView.findViewById(R.id.image);
}
}
}
问题应该在模型中或在视图侧。我建议将使用模型作为视图状态的单一来源。