Как вы подтверждаете формат и значения 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.

Первая позволяет вам подтвердить новое значение до его сохранения (и предотвратить его сохранение), а не после.