Автоматическая проверка RadioButton при прокрутке RecyclerView без нажатия - PullRequest
0 голосов
/ 14 сентября 2018

Я занимаюсь разработкой модельного тестового приложения, в котором у каждого теста есть 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());
        }
    });
}

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

`This is the screenshot of my app. These radio buttons checks automatically after scrolling. I have not touched any button.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

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

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

@Override
public int getItemViewType(int position) {
    return position;
}
0 голосов
/ 14 сентября 2018

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

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

...