單選按鈕組(RadioGroup)無論選哪個選項,價格永遠預設 525.00。程式碼只在初始化時讀取一次選中項,未監聽後續變更。
// 僅在 onCreate 執行一次,無監聽器
int selectedId = radioPackageGroup.getCheckedRadioButtonId();
RadioButton btnPackage = findViewById(selectedId);
String display_package_selected = btnPackage.getText().toString();
// ... if-else 設定價格
radioPackageGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton selectedBtn = findViewById(checkedId);
String text = selectedBtn.getText().toString();
double price = 0.0;
// 建議用 switch 或 Map 對照,避免字串比較錯誤
switch (text) {
case "Bronze": price = 150.00; break;
case "Silver": price = 225.00; break;
case "Gold": price = 375.00; break;
default: price = 525.00; break;
}
TadGlobals.getPackagePriceInstance().setPackagePrice(price);
}
});
onCheckedChanged,即時更新價格。== 比較引用,必須改 .equals() 或 switch(Java 7+ 支援字串 switch)。Map 或資源陣列管理價格表,避免硬編碼 if-else。// strings.xml
Bronze,Silver,Gold,Platinum
150.0,225.0,375.0,525.0
// 程式碼
String[] names = getResources().getStringArray(R.array.package_names);
TypedArray prices = getResources().obtainTypedArray(R.array.package_prices);
radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
int index = group.indexOfChild(findViewById(checkedId));
if (index >= 0) {
double price = prices.getFloat(index, 525.0f);
TadGlobals.getPackagePriceInstance().setPackagePrice(price);
}
});
prices.recycle();
掌握「事件監聽 + 資料驅動」模式,能寫出可維護、可擴充的 UI 互動邏輯。