EditTextPreference在保存之前验证数据

时间:2014-01-15 17:11:28

标签: android sharedpreferences edittextpreference

我有一个验证EditTextPreference的方法。我的方法是在通过实现onSharedPreferenceChanged类确认数据后执行的。

但是,仅在确认信息后才会发生。我会在不关闭对话框的情况下执行检查。如果确定,则关闭或保持打开状态,以便用户正确输入数据。

如果不可能,如果验证为假,我会重新打开对话框。

SettingsActivity.java

class SettingsActivity extends PreferenceActivity implements
            OnSharedPreferenceChangeListener {

    protected static final String TAG = "SettingsActivity";
    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        prefs.registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // TODO Auto-generated method stub
        SharedPreferences.Editor prefEditor = prefs.edit();

        if(key.equals("pref_Url")){
            String url = prefs.getString(key, "");
            boolean response = (!new ConnectUtils().isConnected(this, url));

            if(!response){
                prefEditor.putString(key, Config.SERVER_URL_DEF_VALUE);
                prefEditor.commit();
                reload();
                Toast.makeText(this,R.string.msgToast_server_url_invalid,Toast.LENGTH_SHORT).show();
            }

        }else if (key.equals("pref_Id")){
            String url = Config.SERVER_URL_ID;
            boolean reponse = (!new ConnectUtils().isConnected(this,url));

            if(!reponse){
                prefEditor.putString(key,Config.ID_DEF_VALUE);
                prefEditor.commit();
                reload();
                Toast.makeText(Config.getContext(), R.string.msgToast_Id_invalid, Toast.LENGTH_SHORT).show();               
            }           
        }
    }   
    private void reload(){
        startActivity(getIntent()); 
        finish();       
    }
}

1 个答案:

答案 0 :(得分:0)

' onPreferenceChangeListener'是每次用户更改首选项时执行的侦听器。如果数据抱怨验证,您可以返回true,否则返回false。

例如:

 public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    findPreference("pre_mail").setOnPreferenceChangeListener(
        new Preference.OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            return Pattern.matches(Constants.MAILPATTERN, (String) newValue);
        }

    });
}

}

希望这有帮助!