我现在有一个动态壁纸,有很多可定制的选项。我的朋友最近让我实现了一个Reset按钮,将它们全部恢复为默认值。我通过XML将按钮添加到首选项屏幕,但我无法清除首选项。这是我正在使用的代码:
getPreferenceManager().findPreference("default").setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setMessage("Are you sure you want to reset all settings to default?");
alertDialog.setCancelable(true);
alertDialog.setButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
} });
alertDialog.setButton2("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
} });
alertDialog.show();
return false;
}
});
弹出AlertDialog,单击“否”取消该框,但单击“是”将关闭该框而不清除首选项。我应该改变什么来让他们清楚?谢谢你们!
编辑:稍加更新,添加
Log.d("test" , settings.getAll().toString());
清除/提交之前和之后两次返回{}。所以我认为我以某种奇怪的方式存储我的偏好
答案 0 :(得分:1)
好的,我明白了。我使用名称myPrefs保存首选项,因此我调用了getPreferenceManager()。getSharedPreferences()而不是调用PreferenceManager.GetDefaultSharedPreferences。谢谢Kenny的帮助!
答案 1 :(得分:0)
您是否尝试过使用editor.apply();
而不是提交?只要你在主线程上调用它就可以正常工作,其他任何东西都不会尝试commit()。
apply()立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,因此不会通知您任何失败。