如果他们想保存新值,我需要检查首选项中的用户输入。我相信代码是正确的......因为如果我慢慢改变值,那根本没有问题。如果我更改得太快,应用程序就会崩溃。
我正在使用 commit() 来编辑首选项。这是一个太慢的方法吗?
我在尝试什么?:如果用户给出了一个空字符串,我会给出一个警告对话框,实习生我会将 pref 改回旧值。这是代码:
public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
//save settings
static String SMStext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
//-- First get SMStext and save in Strings
SMStext = sp.getString("SMSText", "0");
//SharedPreferences.Editor prefEditor = sp.edit();
sp.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
String smstriggerworderror = "String cannot be empty";
if (key.equals("SMSText")) {
if sp.getString("SMSText", "0").equals(""){
SharedPreferences.Editor prefEditor = sp.edit();
prefEditor.putString("SMSText", SMStext);
prefEditor.commit();
//write current value back to value and refresh interface
SMStext = sp.getString("SMSText", "0");
//Show alert dialog
showdialog(smstriggerworderror);
//finish();
}
//write current value back to value
SMStext = sp.getString("SMSText", "0");
}
private void showdialog(String message) {
//create alertbox
AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
alertbox.setMessage(message);
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
// Click listener on the neutral button or alert box
public void onClick(DialogInterface arg0, int arg1) {
finish();
}
});
// show the alert box
alertbox.show();
}