【问题标题】:How to listen for a preference change in a fragment?如何监听片段中的偏好变化?
【发布时间】:2015-07-06 07:48:32
【问题描述】:

很多类似的问题,但我仍然找不到答案。所以我有一个片段,我想在其中收听PreferenceActivity 的变化。

文档说在onResume()注册监听器并在onPause()取消注册:

为了在活动中进行适当的生命周期管理,我们建议您注册和取消注册您的 SharedPreferences.OnSharedPreferenceChangeListener 期间 onResume() 和 onPause() 分别回调:

我假设他们指的是从 PreferenceActivity onResume/onPause 方法中注册侦听器,因为如果您在 Fragment 的 onPause() 中取消注册侦听器,那么它将不会侦听更改。

那么相反的解决方案是 - 在onPause()注册并在onResume()取消注册?

谢谢!

【问题讨论】:

  • 再次感谢,最后我启动了result的preferenceactivity并响应了onActivityResult()中的preferences变化。这主要是因为我在 PreferenceActivity 中做了一些不寻常的事情,即当一个偏好发生变化时,它会影响另外两个偏好。因此,我正在以编程方式更改偏好活动中的偏好,这导致侦听器触发了 3 次我不想要的。

标签: android listener


【解决方案1】:

通知首选项更改的不是PreferenceActivity,而是SharedPreferences它自己。 PreferenceActivity 是访问SharedPreferences 的简单用户界面。

因此,如果您的片段需要监听SharedPreferences 更改,那么它应该是注册更改的片段。换句话说,让您的片段实现OnSharedPreferenceChangeListener 并在片段onResume 上注册此更改,并按照文档所述取消注册onPause

您还需要在片段onResume 上加载首选项,因此当它进入onPause 时,onResume 将加载首选项的当前状态。

另见https://stackoverflow.com/a/13596569/665823

【讨论】:

  • 好的,谢谢卡勒姆。但是我还是不明白你的回答。原因如下:当我选择菜单选项“设置”时,我的片段被暂停,并出现设置窗口。因此(如果我按照你上面所说的去做 - 在 onPause() 中取消注册)片段不再监听变化,那么有什么意义呢?
  • 对于您的用例可能没有意义。只需 onresume 行为即可。无论如何,如果您注册 onpause 您的片段将不会收到更改事件,因为它是不活动的(如果错了,请纠正我)。
  • 再次感谢,最后我启动了对结果的偏好,并响应了 onActivityResult() 中的偏好变化。这主要是因为我在 PreferenceActivity 中做了一些不寻常的事情,即当一个偏好发生变化时,它会影响另外两个偏好。因此,我正在以编程方式更改偏好活动中的偏好,这导致侦听器触发了 3 次我不想要的。
猜你喜欢
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2014-02-09
  • 1970-01-01
相关资源
最近更新 更多