Добавление RadioButtons в зависимости от массива программно - PullRequest
0 голосов
/ 30 апреля 2020

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

Я делаю это в программе recyclerView, есть ли способ добавить их, не входя в радиогруппу, чтобы иметь возможность выбрать более одной кнопки при необходимости?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Вы можете сделать это очень легко с помощью встроенных диалогов android. См. здесь - официальная документация Android.

0 голосов
/ 01 мая 2020

Если вы не возражаете против использования флажков, я бы, вероятно, go для этого подхода.

Вы можете ввести класс модели Answer и добавить Checkbox с OnCheckedChangeListener к RecyclerView.Adapter ViewHolder:

public class Answer {
    private String text;
    private boolean isChecked;

    // Constructor, Getters, Setters
}
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

    private static final int MAX_ANSWERS = 2;

    private List<Answer> mData;
    private Context context;

    MyRecyclerViewAdapter(List<Answer> data, Context context) {
        this.mData = data;
        this.context = context;
    }

    // ...

    static class ViewHolder extends RecyclerView.ViewHolder {
        CheckBox checkAnswer;
        TextView myTextView;

        ViewHolder(View itemView) {
            super(itemView);
            checkAnswer = itemView.findViewById(R.id.check_answer);
            myTextView = itemView.findViewById(R.id.txt_answer);
        }
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Answer answer = mData.get(position);
        holder.myTextView.setText(answer.getText());
        holder.checkAnswer.setOnCheckedChangeListener((v, isChecked) -> {
            answer.setChecked(isChecked);
            // Notify adapter so that onBindViewHolder is called 
            notifyDataSetChanged();
        });

        // Check whether maximum number of answers is reached
        if (mData.stream().filter(Answer::isChecked).count() >= MAX_ANSWERS) {
            holder.checkAnswer.setEnabled(holder.checkAnswer.isChecked());
        } else {
            holder.checkAnswer.setEnabled(true);
        }
    }

    // ...
}

После создания списка ответов его можно передать в RecyclerView.Adapter. (Для получения дополнительной информации о том, как обновить данные, пожалуйста, обратитесь к официальной документации )

List<Answer> answers = new ArrayList<>();
answers.add(new Answer("Answer 1"));
answers.add(new Answer("Answer 2"));

recyclerView.setAdapter(new MyRecyclerViewAdapter(answers, this));

//...

При отправке ответа вы можете отфильтровать список проверенных ответов:

submitButton.setOnClickListener(v -> {
    List<Answer> selected = answers.stream().filter(Answer::isChecked).collect(Collectors.toList());
    // ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...