0

我有一种方法来验证 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();       
    }
}
4

1 回答 1

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

    });
}

}

希望这有帮助!

于 2014-01-15T17:18:08.080 回答