我想做的是询问用户何时要更改 EditTextPreference 并单击确定,如果某个条件为真,请询问他是否确定要更改设置。
因此,如果条件为真,我会显示一个对话框,询问他是或否,并且由于显示对话框是异步的,我在 OnPreferenceChange 回调中返回 false 以取消首选项更改。
如果用户决定不更改首选项,我什么也不做。但如果单击“是”,我将使用编辑器手动更改首选项并提交更改。
现在,在用户按下是(他想更改首选项)之后,如果他再次单击“首选项”屏幕中的 EditTextPreference,他将在 EditText 中设置旧值而不是新值。
只有当他关闭 Preferences 屏幕并再次打开它时,他才会看到新值。
所以我的问题是,在 editor.commit() 之后,我是否可以在“是”Dialog.OnClickListener() 中调用任何方法,这将使 Preferences 屏幕使用 SharedPreferences 中的新值更新其视图?
还是有其他方法可以实现我想要的?
谢谢
代码示例:
EditTextPreference etp;
etp.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(final Preference preference, final Object newValue)
{
int a;
int b;
if(a < b) {
AlertDialog.Builder builder = new AlertDialog.Builder(Preferences.this);
Dialog changeMaxCountConfirmationDialog = builder
.setCancelable(true)
.setTitle("Change Setting")
.setMessage("Are you sure you want to change this setting")
.setPositiveButton("Yes", new Dialog.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
//Because I return false anyway, I change the preference manually here
Editor editor = preference.getEditor();
editor.putString("key", newValue.toString());
editor.commit();
}
}).setNegativeButton("No", null)
.create();
changeMaxCountConfirmationDialog.show();
return false;
}
return true;
}
});