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