Android: почему флажок элемента представления переработчика влияет на другие элементы представления переработчика? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть 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.почему это происходит?

...