我有
SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
和
myPreferences.getBoolean("checkbox", true)
那么,我的主要活动如何知道用户何时更改偏好状态? 例如,如果用户不再接收通知。 感谢。
答案 0 :(得分:1)
您可以重新阅读Activity.onResume()
中的所有偏好设置,或者只要您的主要活动启动偏好设置活动(例如,从菜单中),您就可以使用startActivityForResult(Intent, int)
启动并重新阅读onActivityResult(int, int, Intent)
中的所有偏好。
我还发现在开始适当的行为之前(即在为你的例子发布Notification
之前)重新检查每个相关的偏好是足够的。
答案 1 :(得分:1)
您需要实现onSharedPreferenceChangeListener接口。然后注册以接收onCreate / onStart中的更改更新:
myPreferences.registerOnSharedPreferenceChangeListener();
在你的听众中你会做这样的事情:
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("MyKey")) {
// Do something.
} else if (key.equals("MyOtherKey")) {
// Do something else.
}
}
请记住在onStop / onDestroy中删除侦听器。
答案 2 :(得分:0)
您可以创建一个静态布尔值,只要更改了首选项或启动了您的首选项活动,就会更改该布尔值。此布尔值的目的是让您的主要活动知道首选项是脏的并且需要重新加载。如果onResume
标志为真,则应重新加载mDirty
。
另一个选择是重新加载所有首选项onResume
,无论如何。这可能效率不高,但如果您没有大量的偏好,那就没关系。
最有效的方法是为prefs活动中的所有prefs设置onPreferenceChanged侦听器,然后prefs仅在实际更改时通知活动。这解决了用户输入prefs活动但实际上没有改变任何内容的情况。