У меня есть recycler view
, каждый элемент которого содержит заголовок вопроса, radio group
с выбором вопроса и show answer check box
(для выделения правильного ответа пользователю).Я пишу adapter
для recycler view
, чтобы, если пользователь выбрал show answer check box
, правильный текст переключателя изменился на зеленый.но когда я прокручиваю список recyclerview
, часть текста radio buttons
автоматически меняется на зеленый, не устанавливая флажок «Показать ответ».Вот мой код адаптера:
public class QuestionRVAdapter extends RecyclerView.Adapter<QuestionRVAdapter.QuestionHolder> {
public List<Question> questionList;
public Context context;
public String state;
DatabaseAccess dbAccess;
QuestionRVAdapter adapter;
String mabhasNo;
public QuestionRVAdapter(List<Question> questions,String i,String mabhasNo,Context context,QuestionRVAdapter adapter){
this.questionList=questions;
this.state=i;
this.context=context;
dbAccess=DatabaseAccess.getInstance(context);
this.mabhasNo=mabhasNo;
this.adapter=adapter;
}
@NonNull
@Override
public QuestionHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
this.context=parent.getContext();
View itemView= LayoutInflater.from(parent.getContext()).inflate(R.layout.question_item,parent,false);
return new QuestionHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull final QuestionHolder holder, final int position) {
holder.bind(questionList.get(position),position);
holder.showAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Question q=questionList.get(position);
if(holder.showAnswer.isChecked()) {
holder.showAnswer.setEnabled(false);
RadioGroup rg=holder.radioGroup;
if(q.getCorrectAnswer()>0)
((RadioButton)rg.getChildAt(q.getCorrectAnswer()-1)).setTextColor(Color.GREEN);
}
}
}
});
}
@Override
public int getItemCount() {
return questionList.size();
}
public static class QuestionHolder extends RecyclerView.ViewHolder {
RadioButton ch1,ch2,ch3,ch4;
TextView questionTitle,questionAnswer;
Question question;
CheckBox showAnswer;
RadioGroup radioGroup;
public QuestionHolder(View itemView) {
super(itemView);
radioGroup=itemView.findViewById(R.id.choices);
ch1=itemView.findViewById(R.id.ch1);
ch2=itemView.findViewById(R.id.ch2);
ch3=itemView.findViewById(R.id.ch3);
ch4=itemView.findViewById(R.id.ch4);
questionTitle=itemView.findViewById(R.id.questionTitle);
questionAnswer=itemView.findViewById(R.id.questionAnswer);
showAnswer=itemView.findViewById(R.id.showAnswerButton);
}
public void bind(Question q,int qNum){
radioGroup.clearCheck();
showAnswer.setChecked(false);
qNum=qNum+1;
String[] ch=q.getCh();
ch1.setText(ch[0]);
ch2.setText(ch[1]);
ch3.setText(ch[2]);
ch4.setText(ch[3]);
questionTitle.setText("question "+qNum+": "+q.getQuestion());
question=q;
}
}
}
, а вот мой recycler view
макет элемента: (question_item.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="rtl"
android:layout_margin="5dp"
android:background="@drawable/questionitem_bkg">
<com.shaz.zist.CustomViews.CustomTextView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="#222222"
android:id="@+id/questionTitle"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/choices"
android:layout_below="@id/questionTitle"
>
<com.shaz.zist.CustomViews.CustomRadioButtom
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ch1"
android:textSize="10sp"
/>
<com.shaz.zist.CustomViews.CustomRadioButtom
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ch2"
android:textSize="10sp"
/>
<com.shaz.zist.CustomViews.CustomRadioButtom
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:id="@+id/ch3"
/>
<com.shaz.zist.CustomViews.CustomRadioButtom
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:id="@+id/ch4"
/>
</RadioGroup>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/choices"
android:orientation="horizontal"
android:id="@+id/answerForm">
<com.shaz.zist.CustomViews.CustomCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/showAnswer"
android:id="@+id/showAnswerButton"
android:textColor="#0000ff"
android:textSize="12sp"
android:layout_marginBottom="5dp"/>
<com.shaz.zist.CustomViews.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/questionAnswer"
android:textSize="12sp"
android:visibility="invisible"
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"/></LinearLayout>
</RelativeLayout>
Кажется, когда япроверил один элемент check box
из recycler view
, он затронул другие элементы recycler view
.почему это происходит?