You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:27:03