RadioGroup radioGroup = findViewById(R.id.radio_group);
for (int i = 0; i < 5; i++) {
RadioButton rb = new RadioButton(this);
rb.setText("Option " + i);
radioGroup.addView(rb); // 未調用 rb.setId()
}
radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
// checkedId 為 -1 或錯誤值,無法識別是哪個 RadioButton
RadioButton selected = group.findViewById(checkedId); // 找不到
});
View.NO_ID (-1)**。RadioGroup 內部通過子 View 的 ID 來識別選中項。android:id="@+id/rb1" 編譯時自動分配唯一整數 ID,動態創建需手動分配。View.generateViewId() (API 17+ 推薦)for (int i = 0; i < 5; i++) {
RadioButton rb = new RadioButton(this);
rb.setId(View.generateViewId()); // 自動生成唯一正整數 ID
rb.setText("Option " + i);
radioGroup.addView(rb);
}
// 定義基礎 ID 避免與 R.id 衝突
private static final int DYNAMIC_ID_BASE = 0x7F000000;
for (int i = 0; i < 5; i++) {
RadioButton rb = new RadioButton(this);
rb.setId(DYNAMIC_ID_BASE + i); // 確保唯一
rb.setText("Option " + i);
radioGroup.addView(rb);
}
for (int i = 0; i < list.size(); i++) {
RadioButton rb = new RadioButton(this);
rb.setId(View.generateViewId());
rb.setTag(list.get(i).getId()); // 存業務 ID
rb.setText(list.get(i).getName());
radioGroup.addView(rb);
}
radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
View selectedView = group.findViewById(checkedId);
if (selectedView != null) {
Long businessId = (Long) selectedView.getTag(); // 直接取業務標識
// doSomething(businessId);
}
});
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == -1) return; // 清除選中時觸發
RadioButton rb = group.findViewById(checkedId);
if (rb != null) {
// 方式 1: 直接用文本
String text = rb.getText().toString();
// 方式 2: 取 Tag (推薦)
Object tag = rb.getTag();
// 方式 3: 遍歷獲取索引 (不依賴 ID)
// int index = group.indexOfChild(rb);
}
}
});
動態添加 RadioButton 到 RadioGroup **必須調用 setId() 分配唯一正整數 ID**,否則 OnCheckedChangeListener 回傳的 checkedId 為 -1 導致無法識別。推薦配合 setTag() 存儲業務標識,邏輯更清晰。