好吧,我今晚早些时候提出了一个问题,就是给用户一个按钮,将动态壁纸的首选项重置为默认值。我想通了,但按下按钮实际上并没有调用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或更高级别)。谢谢!
答案 0 :(得分:2)
也许你的动态壁纸在一个单独的过程中运行?如果在不同的进程中发生更改,我不相信将会触发侦听器:您可能需要在PreferenceActivity中使用某种类型的BroadcastReceiver来通知墙纸已经发生了变化。有关可能提供更多帮助的非常类似的讨论,请参阅http://groups.google.com/group/android-developers/browse_thread/thread/b90ab30a5d9e0803。