1

我有

SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

myPreferences.getBoolean("checkbox", true)

那么,我的主要活动如何知道用户何时更改偏好状态?例如,如果用户不想再收到通知。谢谢。

4

3 回答 3

1

您可以重新阅读 中的所有首选项Activity.onResume(),或者只要您的主要活动启动首选项活动(例如从菜单中),您就可以启动startActivityForResult(Intent, int)并重新阅读 中的所有首选项onActivityResult(int, int, Intent)

我还发现在开始适当的行为之前重新检查每个相关的偏好就足够了(即在Notification为您的示例发布之前)。

于 2012-05-16T11:23:24.803 回答
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 中移除监听器。

于 2012-05-16T11:25:48.073 回答
0

您可以创建一个静态布尔值,只要更改首选项或启动您的首选项活动,该值就会更改。这个布尔值的目的是让你的主要活动知道偏好是脏的,需要重新加载。onResume如果mDirty标志为真,则应重新加载它们。

另一种选择是重新加载所有首选项onResume,无论如何。这可能效率不高,但是如果您没有很多偏好,那也没关系。

最有效的方法是为您的首选项活动中的所有首选项设置 onPreferenceChanged 侦听器,然后首选项仅在实际更改时通知活动。这解决了当您的用户输入您的偏好活动时的情况,但实际上并没有改变任何东西。

于 2012-05-16T11:26:16.557 回答