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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:57:43