66
|
Brad Hein · 技术社区 · 14 年前 |
![]() |
1
142
这个
要解决这个问题,请使用中的以下代码
此外,请注意,侦听器只有在实际值更改时才会被调用。再次设置相同的值不会触发侦听器。 SharedPreferences.onSharedPreferenceChangeListener not being called consistently |
![]() |
2
17
这是因为垃圾收集器。它只工作一次。然后将引用作为垃圾收集。所以为侦听器创建实例字段。
|
![]() |
3
7
我来到这里,和其他许多人一样,因为我的听众不会因为我把布尔值从
经过大量阅读,重构,转换
这个
|
![]() |
4
3
另一种避免问题的方法是使您的活动成为listener类。由于只有一个重写方法具有独特的名称,因此可以执行以下操作:
|
![]() |
5
1
注意,原来的问题谈到了一个main活动,它在PreferenceActivity中监听设置更改。然后提问者添加了一个“EDIT1”,并将问题改为在PreferenceActivity中倾听。这比前者容易,似乎是所有答案的假设。但如果你还想要前一种情况呢? 当然,它也可以工作,但是不要使用OnResume()和OnPause()来注册和注销侦听器。这样做会导致监听器无效,因为用户在使用PreferenceActivity时会离开MainActivity(这在您考虑它时是有意义的)。所以它会工作,但是你的主要活动仍然会在后台监听,即使用户没有使用它。有点浪费资源,不是吗?所以有另一个解决方案似乎可行,只需在OnResume()中添加一个方法来重新读取所有首选项。这样,当用户在PreferenceActivity中完成对首选项的编辑时,当用户返回到MainActivity时,MainActivity将拾取这些首选项,然后您可以使用它们 . 如果有人发现这种方法有问题,请告诉我。 |
![]() |
6
0
你为什么不加一个
|
![]() |
7
0
垃圾收集器会删除。。。你应该考虑改用应用程序上下文…或者只是在应用程序启动时添加代码。。。然后用应用程序上下文添加侦听器。。。 |
![]() |
8
0
考虑保留 首选项更改侦听器 应用程序 类实例。虽然它不是一个干净的解决方案,但在应用程序中存储引用应该可以阻止GC垃圾收集侦听器,并且您应该仍然能够接收DB更改更新。还记得偏好管理器吗 存储对侦听器的强引用!( 懦夫地图
和
|
![]() |
9
-2
具有
|
![]() |
Abhilash Das · 输入文本时,编辑文本与工具栏重叠 1 年前 |
![]() |
Community wiki · 局部变量可能尚未初始化 1 年前 |
![]() |
jvargas · 如何获取上个月的第一天和最后一天以及一年的第一天 1 年前 |