OnSharedPreferenceChangeListener和editor.clear()

时间:2011-06-27 03:33:31

标签: android sharedpreferences

好吧,我今晚早些时候提出了一个问题,就是给用户一个按钮,将动态壁纸的首选项重置为默认值。我想通了,但按下按钮实际上并没有调用OnSharedPreferenceChanged,直到首选屏幕关闭并重新打开,或直到动态壁纸本身已关闭并重新打开。以下是清除首选项的按钮代码:

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 =  getPreferenceManager().getSharedPreferences();                          
                    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;
        }
    });

如何立即应用这些首选项(不使用apply()代替commit()。只有2个用户使用API​​级别9或更高级别)。谢谢!

1 个答案:

答案 0 :(得分:2)

也许你的动态壁纸在一个单独的过程中运行?如果在不同的进程中发生更改,我不相信将会触发侦听器:您可能需要在PreferenceActivity中使用某种类型的BroadcastReceiver来通知墙纸已经发生了变化。有关可能提供更多帮助的非常类似的讨论,请参阅http://groups.google.com/group/android-developers/browse_thread/thread/b90ab30a5d9e0803