Android RecyclerView适配器:更新当前项目视图的单击侦听器中已绘制的项目视图

Android RecyclerView适配器:更新当前项目视图的单击侦听器中已绘制的项目视图,android,android-recyclerview,android-viewholder,Android,Android Recyclerview,Android Viewholder,因此,我有一个测验应用程序,其中我向用户提出一个问题和四个选项。这4个选项在RecyclerView中给出,因此我将这4个选项(作为字符串ArrayList)和正确答案(字符串)传递给RecyclerView适配器构造函数。 现在,如果选择的答案正确,itemView设置为绿色,如果错误,则设置为红色(到目前为止,工作正常) 我的问题是 当我按下错误的答案时,我必须将正确答案的itemview(已绘制)的背景色设置为绿色 选择的错误答案变为红色 请参阅下面的代码 @Override public

因此,我有一个测验应用程序,其中我向用户提出一个问题和四个选项。这4个选项在
RecyclerView
中给出,因此我将这4个选项(作为字符串
ArrayList
)和正确答案(字符串)传递给
RecyclerView
适配器构造函数。 现在,如果选择的答案正确,
itemView
设置为绿色,如果错误,则设置为红色(到目前为止,工作正常)

我的问题是

当我按下错误的答案时,我必须将正确答案的itemview(已绘制)的背景色设置为绿色 选择的错误答案变为红色

请参阅下面的代码

@Override
public void onBindViewHolder(final OptionsAdapter.ViewHolder viewHolder, final int i) {
    viewHolder.tv_name.setText(option.get(i));
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (option.get(i).equals(correct)){
                Toast.makeText(context,"CORRECT ANSWER :)",Toast.LENGTH_SHORT).show();
                viewHolder.itemView.setBackgroundColor(context.getResources().getColor(R.color.correctAnswer));
            } else {
                Toast.makeText(context,"SORRY INCORRECT ANSWER :(",Toast.LENGTH_SHORT).show();
                viewHolder.itemView.setBackgroundColor(context.getResources().getColor(R.color.wrongAnswer));
            }
        }
    });

}
在上面my
onBindViewHolder
的片段中,arraylist
选项具有4个选项,字符串
correct
是正确答案

当点击错误答案时,如何将正确答案变成绿色

下图显示了我在点击错误答案时的预期


将这些方法添加到模型类中:

private boolean isSelected;

public boolean isSelected() {
    return isSelected;
}

public void setSelected(boolean selected) {
    isSelected = selected;
}
if (mArrayList.get(position).isSelected()) {
    mArrayList.get(position).setSelected(false);
} else {
    mArrayList.get(position).setSelected(true);
}
notifyItemChanged(position);
在适配器上单击
添加此代码:

private boolean isSelected;

public boolean isSelected() {
    return isSelected;
}

public void setSelected(boolean selected) {
    isSelected = selected;
}
if (mArrayList.get(position).isSelected()) {
    mArrayList.get(position).setSelected(false);
} else {
    mArrayList.get(position).setSelected(true);
}
notifyItemChanged(position);

单击“侦听器”后更新您的arraylist,然后调用notifyItemChanged(位置)。您需要更新列表(选项),请按照Ronak的注释进行操作。@RonakThakkar事实上我没有更改我的arraylist的内容,那么我为什么要调用notifyItemChanged(位置),请详细说明一下?好的,谢谢@RonakThakkar,所以我需要在模型中保留一个标志来检查它是否被选中,让我试试这个谢谢,我犯的错误是我使用了一个字符串arraylist而不是你说的arraylist