Если вы не возражаете против использования флажков, я бы, вероятно, 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());
// ...
});