从首选项屏幕项清除SharedPreferences

时间:2011-06-27 00:48:07

标签: android alertdialog clear sharedpreferences

我现在有一个动态壁纸,有很多可定制的选项。我的朋友最近让我实现了一个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());

清除/提交之前和之后两次返回{}。所以我认为我以某种奇怪的方式存储我的偏好

2 个答案:

答案 0 :(得分:1)

好的,我明白了。我使用名称myPrefs保存首选项,因此我调用了getPreferenceManager()。getSharedPreferences()而不是调用PreferenceManager.GetDefaultSharedPreferences。谢谢Kenny的帮助!

答案 1 :(得分:0)

您是否尝试过使用editor.apply();而不是提交?只要你在主线程上调用它就可以正常工作,其他任何东西都不会尝试commit()。

apply()立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,因此不会通知您任何失败。