如何在Fragment Tab中动态创建含RadioGroup与TextView的测验模块?
解决Fragment Tab中测验模块的RadioGroup结构问题
我一眼就看出问题所在啦——你的代码里把所有RadioButton都塞进了同一个RadioGroup里!因为你只在外层循环外面初始化了一次group,所以不管循环多少次生成问题,所有选项都加到同一个Group里,这肯定不符合“每个问题对应独立RadioGroup”的要求。
下面是修正后的代码,不仅能实现你要的结构,还支持动态扩展问题数量:
private void createRadioButtons() { // 获取选项数组(保留你的原有逻辑) int[] panels = getResources().getIntArray(R.array.no_of_solar_panels); // 这里可以动态传入问题数量,轻松实现扩展(比如从接口/配置读取) int questionCount = 3; for(int i = 0; i < questionCount; i++){ // 1. 创建当前问题的TextView TextView questionTextView = new TextView(this.getContext()); questionTextView.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT )); questionTextView.setText("Question " + (i + 1)); // 让问题编号从1开始更符合习惯 questionTextView.setPadding(0, 16, 0, 8); // 给问题加上下边距,提升界面区分度 linearLayout.addView(questionTextView); // 2. 关键修改!为当前问题创建专属的RadioGroup(移到内层循环里) RadioGroup questionRadioGroup = new RadioGroup(this.getContext()); questionRadioGroup.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT )); questionRadioGroup.setOrientation(RadioGroup.VERTICAL); // 设置选项垂直排列,可选 // 3. 为当前RadioGroup添加对应选项 for (int j = 0; j < panels.length; j++){ RadioButton optionButton = new RadioButton(this.getContext()); optionButton.setLayoutParams(new RadioGroup.LayoutParams( RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT )); optionButton.setText(String.valueOf(panels[j])); optionButton.setPadding(16, 4, 0, 4); // 给选项加左内边距,排版更美观 questionRadioGroup.addView(optionButton); } // 4. 将当前问题的RadioGroup添加到LinearLayout linearLayout.addView(questionRadioGroup); } }
核心修改点说明:
- 每个问题对应独立RadioGroup:把
RadioGroup的初始化代码移到外层循环(问题循环)内部,这样每生成一个问题就会创建一个专属的RadioGroup,完美匹配你要的Question1→RadioGroup1、Question2→RadioGroup2的结构。 - 动态扩展支持:把
questionCount改成可动态配置的变量(比如从后端接口获取题目数量、从本地配置读取),就能轻松实现添加更多问题的需求。 - 界面优化:添加了内边距调整,让测验界面的排版更清晰易读,用户体验更好。
如果后续需要获取每个问题的选中答案,可以给每个RadioGroup设置唯一id(比如questionRadioGroup.setId(View.generateViewId())),之后通过findViewById就能定位到对应问题的RadioGroup,再获取选中的RadioButton。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

