Android中RecyclerView的RadioGroup如何实现单选并获取各题选择结果
实现方案
1. 修改DailyQuestionModel类
新增字段存储题号和用户选中的选项值,示例代码如下:
public class DailyQuestionModel { private String question; private String questionNo; // 存储题号,格式为q01、q02等 private int selectedAnswer = -1; // -1代表未作答,选中后存储1-5的选项序号 public DailyQuestionModel(String questionNo, String question) { this.questionNo = questionNo; this.question = question; } // 对应生成get、set方法 public String getQuestion() { return question; } public String getQuestionNo() { return questionNo; } public int getSelectedAnswer() { return selectedAnswer; } public void setSelectedAnswer(int selectedAnswer) { this.selectedAnswer = selectedAnswer; } }
2. 调整Activity的setQuestion方法
初始化题目时传入对应题号:
private void setQuestion() { questionList.add(new DailyQuestionModel("q01", getResources().getString(R.string.q01))); questionList.add(new DailyQuestionModel("q02", getResources().getString(R.string.q02))); questionList.add(new DailyQuestionModel("q03", getResources().getString(R.string.q03))); questionList.add(new DailyQuestionModel("q04", getResources().getString(R.string.q04))); questionList.add(new DailyQuestionModel("q05", getResources().getString(R.string.q05))); questionList.add(new DailyQuestionModel("q06", getResources().getString(R.string.q06))); questionList.add(new DailyQuestionModel("q07", getResources().getString(R.string.q07))); questionList.add(new DailyQuestionModel("q08", getResources().getString(R.string.q08))); questionList.add(new DailyQuestionModel("q09", getResources().getString(R.string.q09))); questionList.add(new DailyQuestionModel("q10", getResources().getString(R.string.q10))); }
3. 修改适配器绑定逻辑,监听用户选择
先确认R.layout.single_daily布局中R.id.daily_answer对应的RadioGroup包含5个RadioButton,从上到下顺序对应选项1到5,修改适配器的onBindViewHolder方法:
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { DailyQuestionModel currentQuestion = questionList.get(position); holder.questionText.setText(currentQuestion.getQuestion()); // 先清空监听,避免RecyclerView复用时出现状态错乱 holder.answers.setOnCheckedChangeListener(null); // 恢复已保存的选择状态 if (currentQuestion.getSelectedAnswer() != -1) { // RadioGroup子元素索引从0开始,选项1对应索引0,所以需要减1 ((RadioButton) holder.answers.getChildAt(currentQuestion.getSelectedAnswer() - 1)).setChecked(true); } else { holder.answers.clearCheck(); } // 绑定选择监听,保存用户选择结果 holder.answers.setOnCheckedChangeListener((group, checkedId) -> { if (checkedId != -1) { int selectedIndex = group.indexOfChild(group.findViewById(checkedId)); currentQuestion.setSelectedAnswer(selectedIndex + 1); } }); }
4. 新增获取全部答题结果的方法
在Activity中添加如下方法,可在提交按钮点击事件中调用,直接获取你需要的格式的结果:
private List<String> getAnswerResult() { List<String> resultList = new ArrayList<>(); for (DailyQuestionModel question : questionList) { if (question.getSelectedAnswer() != -1) { resultList.add(question.getQuestionNo() + " - " + question.getSelectedAnswer()); } } return resultList; }
- 注意:请确保
R.layout.single_daily中的RadioGroup子元素只有5个对应选项的RadioButton,不要插入其他布局,否则会出现索引错误。
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

