从recyclerview访问某个按钮并更改它的背景图像

问题描述 投票:0回答:1

我正在尝试在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);
            }
    });
}
java android android-recyclerview recycler-adapter
1个回答
0
投票

背景正在改变,因为它是一个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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.