【问题标题】:Changing preference in OnPreferenceChangeListner in android在 android 的 OnPreferenceChangeListner 中更改首选项
【发布时间】:2014-10-10 08:57:00
【问题描述】:

在我的 Android 应用中,我需要设置来选择时间范围(例如 2 到 4 分钟、8 到 12 分钟等)。

为了实现它,我使用了两个 ListPreference 实例,一个选择最小时间,另一个选择最大时间。

由于最大时间不能小于最小时间,我想在用户更改最小时间时更新最大时间列表首选项。

为了实现它,我使用了 Preference.OnPreferenceChangeListner。当用户更改最小时间偏好时,将调用侦听器回调函数,在回调中,我在最大时间 ListPreference 实例上调用 setEntries()、setEntryValues()setValueIndex() .

问题在于,当我执行上述操作时,最长时间偏好的 GUI 不会立即更新。我仍然可以在首选项中看到旧条目。如果我退出设置活动并再次启动设置,我可以看到更新的条目和值。

请告诉我如何解决这个问题。

另外,请建议是否有更好的方法来处理此类设置用例。

谢谢。

【问题讨论】:

  • 我认为没有调用监听器。同时提供一些你已经完成的代码。
  • 感谢您对帕思的评论。要发布我的代码,我需要对其进行修剪。我去做。但我知道调用了监听器,甚至我在监听器回调中的调用(如 setEntries() 和 setEntryValues() )也成功了。退出并重新启动设置活动后,我可以看到更新的条目。
  • 对于正在寻找如何在一个偏好发生变化时更新一个偏好的任何人,请参阅stackoverflow.com/questions/7603633/…

标签: android settings listpreference


【解决方案1】:

经过更多的调试,我意识到我的错误。 我没看过这个document of OnPreferenceChangeListener回调:

“当用户更改首选项时调用。这被称为首选项的状态即将更新并且状态保持之前。”

问题是我在它的首选项更改侦听器回调中查询最小时间列表首选项的值,并在此基础上生成最大时间列表首选项的条目。但正如文档所读,最小时间列表偏好的新值尚未在回调中设置,因此条目是在旧值的基础上生成的。所以它不应该像我预期的那样工作。

很抱歉没有发布代码,因为它需要更多的努力才能使代码准备好在此处发布。

感谢您阅读我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多