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

如何根据选中单选按钮返回int值?radioClick()方法异常求助

问题分析与解决方案

我来帮你排查这个问题,核心原因有两个:你的radioClick()方法其实根本没和单选按钮的点击事件绑定,而且你判断选中项的逻辑也存在错误。

为什么有Toast时你以为它返回1?

你之前给动态创建的RadioButton加了一个独立的OnClickListener,里面包含Toast逻辑,但这个点击事件和radioClick()方法完全没关系——radioClick()是一个单独定义的方法,并没有被触发执行。你可能是看到Toast弹出就误以为radioClick()返回了1,但实际上它可能只是在提交时刚好因为其他巧合返回了1(比如之前选中过正确选项),和Toast本身没有关联。

修复步骤

1. 修正radioClick()的判断逻辑

你现在用idOfSelected == 1来判断正确选项,但动态创建的RadioButton的ID是系统自动分配的,并不是你预设的1。我们可以通过给按钮设置tag的方式,更可靠地判断选中项:

public int radioClick() {
    RadioGroup group = (RadioGroup) findViewById(R.id.myRadioGroup);
    int selectedId = group.getCheckedRadioButtonId();
    
    // 没有选中任何选项时返回0
    if (selectedId == -1) {
        return 0;
    }
    
    RadioButton selectedButton = (RadioButton) findViewById(selectedId);
    // 获取之前设置的tag(对应选项的原始文本)
    String selectedOption = (String) selectedButton.getTag();
    
    // 判断是否是正确选项"Maternity BVM"
    if ("Maternity BVM".equals(selectedOption)) {
        return 1;
    } else {
        return 0;
    }
}

2. 调整动态创建RadioButton的代码

给每个RadioButton设置tag,同时移除不需要的Toast点击事件:

public void createRadioButtons() {
    RadioGroup group = (RadioGroup) findViewById(R.id.myRadioGroup);
    final String[] radio = getResources().getStringArray(R.array.radio_string_array);
    
    for (int i = 0; i < radio.length; i++) {
        final String radioString = radio[i];
        RadioButton button = new RadioButton(this);
        button.setText(getString(R.string.radio_selected, radioString));
        
        // 设置tag为选项的原始文本,方便后续判断
        button.setTag(radioString);
        
        // 移除原来带Toast的点击事件,我们不需要在点击时做操作,提交时统一计算即可
        // button.setOnClickListener(...); // 删除这部分代码
        
        group.addView(button);
    }
}

3. 在提交时调用radioClick()计算分数

确保在submitOrder()方法里调用radioClick()来获取这道题的分数:

public void submitOrder(View view) {
    // ... 你原来的其他代码(获取第一题答案、复选框状态等) ...
    
    int schuylerCorrect = schuyler(answerToQuestionOne);
    int gazeboCorrect = gazebo(kccGuessed, cobbGuessed, depotGuessed, majesticGuessed);
    int numExitsCorrect = exitsCorrect(numOfExits);
    // 添加这一行,获取第四题的分数
    int radioCorrect = radioClick();
    
    // 可在此计算总分,示例:
    int totalScore = schuylerCorrect + gazeboCorrect + numExitsCorrect + radioCorrect;
    
    // 后续处理总分展示等逻辑
}

这样修改后,不管有没有Toast,只要选中正确选项Maternity BVM,提交时radioClick()就会返回1了。

内容的提问来源于stack exchange,提问作者Scott Chaplinski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:35:51