Android OnSharedPreferenceChangeListener和editor.clear()

Android OnSharedPreferenceChangeListener和editor.clear(),android,sharedpreferences,Android,Sharedpreferences,好的,今晚早些时候我刚刚问了一个问题,关于给用户一个按钮,将实时壁纸的首选项重置为默认值。我想出来了,但在首选项屏幕关闭并重新打开之前,或者在实时壁纸本身关闭并重新打开之前,按下按钮实际上并不会调用OnSharedPreferenceChanged。以下是用于清除首选项的按钮的代码: public boolean onPreferenceClick(Preference preference) { AlertDialog alertDialog = new AlertDi

好的,今晚早些时候我刚刚问了一个问题,关于给用户一个按钮,将实时壁纸的首选项重置为默认值。我想出来了,但在首选项屏幕关闭并重新打开之前,或者在实时壁纸本身关闭并重新打开之前,按下按钮实际上并不会调用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或更高的用户)。谢谢

也许您的实时壁纸是在一个单独的过程中运行的?我认为,如果改变发生在不同的过程中,听众不会被解雇:您可能需要在PreferenceActivity中使用某种广播接收器来通知墙报事情已经改变。有关可能提供更多帮助的非常类似的讨论,请参阅。

使用广播接收器,让我完全按照自己的意愿行事。非常感谢!