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
});
}
我正在开发我的第一个 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
});
}