2014-01-15 101 views
0

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

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

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

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

回答

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

    }); 
} 

}

希望这有助于!

+0

我不知道这是否有帮助。因为我的验证在AsyncTask中执行。当用户按下确定时,我想要呼叫。这个方法在插入字符时被调用? –