Я разрабатываю приложение для модельного теста, в котором каждый тест состоит из 20 вопросов, и у каждого вопроса есть 4 варианта переключателя внутри радиогруппы.

Теперь при прокрутке и выборе радиокнопки я столкнулся с автоматическими проверками радиокнопок.

Я хочу знать, почему возникает эта проблема, и ее решение. Вот мой пример кода RecylerView. `

@Override
public void onBindViewHolder(@NonNull QuizQuestionViewHolder holder, int position) {

    final QuestionsWithOption questionsWithOption = questionsWithOptionList.get(position);
    final List<Option> optionList = questionsWithOption.getOptions();

    holder.quizQuestionTextView.setText(questionsWithOption.getTitle());

    if (holder.quizOptionsRadioGroup.getChildCount() == 0) {
        addRadioButtons(holder.quizOptionsRadioGroup, optionList,
                questionsWithOption.getId());
    }
}

private void addRadioButtons(RadioGroup quizOptionsRadioGroup,
                             List<Option> optionList, final int questionId) {

    final RadioButton[] radioButtons = new RadioButton[optionList.size()];

    for(int i = 0; i < optionList.size(); i++){
        radioButtons[i] = new RadioButton(context);
        radioButtons[i].setText(optionList.get(i).getName());
        radioButtons[i].setTextSize(14);
        radioButtons[i].setId(optionList.get(i).getId());
        radioButtons[i].setTag(optionList.get(i));
        radioButtons[i].setPadding(8, 8, 8, 8);

        quizOptionsRadioGroup.addView(radioButtons[i]);
    }

    quizOptionsRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            RadioButton checkedRadioButton = group.findViewById(checkedId);

            Option quizOptions = (Option) checkedRadioButton.getTag();

            Log.d("Checked", quizOptions.getName());
        }
    });
}

Это скриншот моего приложения. Эти переключатели проверяются автоматически после прокрутки. Я не трогал ни одной кнопки.

` Это снимок экрана моего приложения. Эти переключатели проверяются автоматически после прокрутки. Я не нажимал ни одной кнопки

1
Shamsul Arafin Mahtab 14 Сен 2018 в 15:09

2 ответа

Лучший ответ

Это что-то интересное о recyclerview. Функция onBindView вызывается снова и снова в качестве ресайклера. Поэтому, когда вы меняете проверенный статус для переключателей, другие переключатели также меняются, поскольку они используют ссылку.

Решение состоит в том, чтобы всегда проверять необходимые условия для установки и снятия флажков переключателей в функции onBindView.

0
Abhijet 14 Сен 2018 в 17:45

Добавьте следующий код в свой класс адаптера, это может помочь:

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
    return position;
}
0
Mohit Patel 14 Сен 2018 в 18:06