如何根据选中单选按钮返回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
相关产品推荐
相关产品推荐

