實作 OnPreferenceChangeListener,在偏好設定變更前驗證數值:
EditTextPreference pref = (EditTextPreference) findPreference("max_value_key");
pref.setOnPreferenceChangeListener((preference, newValue) -> {
try {
int value = Integer.parseInt((String) newValue);
return value >= 0 && value <= 100; // 回傳 true 允許變更,false 攔截
} catch (NumberFormatException e) {
return false; // 非數字攔截
}
});
pref.setOnPreferenceChangeListener((preference, newValue) -> {
try {
int value = Integer.parseInt((String) newValue);
if (value < 0 || value > 100) {
Toast.makeText(getContext(), "請輸入 0-100 之間的數值", Toast.LENGTH_SHORT).show();
return false;
}
return true;
} catch (NumberFormatException e) {
Toast.makeText(getContext(), "請輸入有效數字", Toast.LENGTH_SHORT).show();
return false;
}
});
OnPreferenceChangeListener 在值寫入 SharedPreferences **前** 呼叫false 會取消本次變更,UI 維持原值android:numeric="integer" 或 android:inputType="number"