12

ユーザーが設定で入力したテキストを検証するサンプルコードを持っている人はいますか? たとえば、ユーザーが電子メール アドレスを入力するための EditTextPreference があります。入力した電子メール アドレスの形式を検証し、形式が正しくない場合は警告ダイアログを表示したいと考えています。誰でもこのためのサンプルコードを持っていますか? ありがとう

4

3 に答える 3

9

Preference.OnPreferenceChangeListener を実装する

boolean onPreferenceChange(優先設定、オブジェクト newValue)

ユーザーが Preference を変更したときに呼び出されます。これは、Preference の状態が更新される前、および状態が永続化される前に呼び出されます。

Preference の状態を新しい値で更新するには、True を返します。

したがって、値の検証の結果を直接返すことができます。

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);
            }

        });
    }
}
于 2010-04-16T14:44:50.603 に答える
9

あなたの質問は、私が同じことをやろうとしていたときの初期のグーグルヒットだったので、これが誰かに役立つことを願っています. これは、無効な変更を停止できるようにする 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's gone wrong...");
                    builder.setPositiveButton(android.R.string.ok, null);
                    builder.show();
                    rtnval = false;
                }
                return rtnval;
            }
        });
    }
于 2012-07-17T22:40:05.853 に答える
2

Preference.OnPreferenceChangeListenerではなく 使用しますSharedPreferences.OnSharedPreferenceChangeListener

前者を使用すると、新しい値を永続化した後ではなく、永続化する前に検証できます (永続化を防止できます)。

于 2012-04-03T14:39:02.610 に答える