我正在尝试在recyclelerView中单击时更改某个按钮的背景图像。按钮的背景图像正在正确更改,但也会更改在第8..16th..etc行中找到的按钮的背景。 (我目前正在使用for循环进行测试的回收器视图中填充数据)
我的代码是
@Override
public void onBindViewHolder(final myFirstAdapter.ViewHolder holder, int position) {
firstlistitem listItem = listItems.get(position);
holder.itemView.setTag(position);
holder.btnBookMark.setTag(position);
holder.btnBookMark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.btnBookMark.setBackgroundResource(R.drawable.bookmarkred);
}
});
}
背景正在改变,因为它是一个RecyclerView,它回收视图并重用它。因此,当您单击第8个位置并滚动到底部时,它将重新使用8位置的项目和其他项目的自定义背景。因此,您可以在滚动时获得后续项目的自定义背景。
如果您有许多将改变背景的项目,请执行此操作。
class ViewHolder extends RecyclerView.ViewHolder{
boolean newBackground = false;
Button button
ViewHolder(View itemView){
...
button.setOnClickListner((v) - > newBackground = true);
}
}
然后你可以检查newBackground
的值并在onBindViewHolder()
中设置背景
如果您只有一个项目的背景将一次更改,那么您可以在适配器中声明一个字段并检查以更改背景。
class MyAdapter extends RecyclerView.Adapter<ViewHolder>{
int newBackgroundPos = -1;
@Override
public final void onBindViewHolder(ViewHolder holder, int position) {
holder.button.setOnClickListener((v) -> newBackGroundPos = position);
if(position == newBackgroundPos)
holder.itemView.setBackground(newBackground);
else
holder.itemView.setBackground(normalBackground);
}
}