Как вы подтверждаете формат и значения EditTextPreference, введенные в Android 2.1?
Есть ли у кого-нибудь образец кода для проверки введенного пользователем текста в настройках? Например, у меня есть EditTextPreference для ввода пользователем адреса электронной почты. Я хотел бы подтвердить формат введенного адреса электронной почты и открыть диалоговое окно предупреждения, если формат неверен. У кого-нибудь есть образец кода для этого? Спасибо
Ответы
Ответ 1
Реализация Preference.OnPreferenceChangeListener
boolean onPreferenceChange (предпочтение предпочтения, объект newValue)
Вызывается при изменении пользователем предпочтения. Это вызывается до того, как состояние Preference будет обновлено и до того, как состояние будет сохранено.
Возвращает True, чтобы обновить состояние Preference с новым значением.
Итак, вы можете напрямую вернуть результат проверки значения.
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
findPreference("mail_preference_key").setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
return Pattern.matches("mailPattern", (String) newValue);
}
});
}
}
Ответ 2
Ваш вопрос был ранним хитом Google, когда я пытался сделать то же самое, так что, надеюсь, это помогает кому-то. Здесь сегодня я собрал что-то, что демонстрирует OnPreferenceChangeListener, что позволяет остановить недействительные изменения.
в вашем фрагменте:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Your_Pref = (EditTextPreference) getPreferenceScreen().findPreference("Your_Pref");
Your_Pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Boolean rtnval = true;
if (Your_Test) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Invalid Input");
builder.setMessage("Something gone wrong...");
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
rtnval = false;
}
return rtnval;
}
});
}
Ответ 3
Я бы использовал Preference.OnPreferenceChangeListener
, а не SharedPreferences.OnSharedPreferenceChangeListener
.
Первая позволяет вам подтвердить новое значение до его сохранения (и предотвратить его сохранение), а не после.