使用 ViewFlipper 切換兩個畫面(一般用戶/醫生),並希望對應的 RadioButton 圓點同步高亮。原代碼僅切換 ViewFlipper,未更新 RadioButton 狀態,導致 UI 與邏輯不同步。
private void checkedChange(int id) {
switch (id) {
case 0:
case R.id.averageUser:
vf.setDisplayedChild(0);
break;
case 1:
case R.id.doctor:
vf.setDisplayedChild(1);
break;
}
}
setChecked(true)private void checkedChange(int id) {
switch (id) {
case 0:
case R.id.averageUser:
averageUser.setChecked(true); // 新增
vf.setDisplayedChild(0);
break;
case 1:
case R.id.doctor:
doctor.setChecked(true); // 新增
vf.setDisplayedChild(1);
break;
}
}
OnCheckedChangeListener 統一處理RadioGroup rg = findViewById(R.id.radioGroup);
rg.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.averageUser) vf.setDisplayedChild(0);
else if (checkedId == R.id.doctor) vf.setDisplayedChild(1);
});
// 程式碼切換時只需:
averageUser.setChecked(true); // 或 doctor.setChecked(true)
// Listener 會自動觸發 ViewFlipper 切換
優點:單一真實來源、避免重複邏輯、支援鍵盤/無障礙操作自動同步。
ViewFlipper 僅負責視圖切換,**不會自動管理 RadioButton 選中狀態**。「切換畫面」與「更新選中狀態」必須成對出現,建議透過 RadioGroup.OnCheckedChangeListener 集中管理,確保 UI 一致性。