首页 > 解决方案 > android第一个单选按钮在radiogroup中保持选中状态

问题描述

我正在开发我的第一个 Android Studio 应用程序,但我遇到了无法解决的单选按钮问题。我的应用程序是一种多项选择测验,当我检查第一个单选组中的第一个单选按钮时,即使我检查同一个单选组的另一个单选按钮,它仍然处于选中状态,在这种情况下,我同时检查了两个单选按钮时间如下图所示。

在此处输入图像描述

但是,其他无线电组工作正常。单选按钮和组以编程方式创建,如下所示:

 LinearLayout layoutQuiz = findViewById(R.id.layoutQuiz);
 for (int i = 1; i < 5; i++) {
      RadioGroup radioGroup = new RadioGroup(this);
      radioGroup.setId(i);
      TextView text = new TextView(this);
      text.setText(i + ") Question text?");
      layoutQuiz.addView(text);
            
      for (int j = 1; j < 4; j++) {
           RadioButton answer = new RadioButton(this);
           answer.setId(j);
           answer.setText("answer nr" + j);
           radioGroup.addView(answer);
      }
      layoutQuiz.addView(radioGroup);

      radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
        //do something
      });
 }

我该如何解决?提前致谢。

标签: javaandroidandroid-studioradio-buttonradio-group

解决方案


当您使用 setId() 检查此答案时,我相信LinearLayout中的 ID 之间存在冲突

我测试了你的代码,它使用了 RadioGroup 的更高 ID

 LinearLayout layoutQuiz = findViewById(R.id.layoutQuiz);
        for (int i = 1; i < 5; i++) {
            RadioGroup radioGroup = new RadioGroup(this);
            radioGroup.setId(i*1000); // i make chenge only on this line
            TextView text = new TextView(this);
            text.setText(i + ") Question text?");
            layoutQuiz.addView(text);

            for (int j = 1; j < 4; j++) {
                RadioButton answer = new RadioButton(this);
                answer.setId(j);
                answer.setText("answer nr" + j*i);
                radioGroup.addView(answer);

            }
            layoutQuiz.addView(radioGroup);

            radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
                //do something
            });
        }
            /*
            rest of your code
             */

更新

正如@Mnih Ngo 建议的那样,View.generateViewId ()在以编程方式设置时使用以避免ID冲突

radioGroup.setId(View.generateViewId());

推荐阅读