android 第一个单选按钮在单选组中保持选中状态

android first radiobutton remain checked in 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
      });
 }

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

我认为当您使用 setId() 时 LinearLayout 中的 ID 之间存在冲突,请检查此 answer

我测试了你的代码,它在 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());

您好,请检查此解决方案,希望它能奏效。

LinearLayout layoutQuiz = findViewById(R.id.layoutQuiz);
 int selectedItem;

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);
      answer.setChecked(i == selectedItem); // Only select button with same index 
       radioGroup.addView(answer);
  }
  layoutQuiz.addView(radioGroup);

  radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
    //do something
    selectedItem=checkedId;//here set the id
  });
}