【问题标题】:How to get notified on CheckBoxPreference state change?如何获得有关 CheckBoxPreference 状态更改的通知?
【发布时间】:2012-06-21 01:52:07
【问题描述】:

我需要动态设置/取消设置侦听器以响应 Preference CheckBox 用户设置更改。

我见过的一种方法是使用onSharedPreferenceChanged() 并检查该复选框的键。

但不知何故,这在我看来效率低下。我更多地考虑在派生自PreferenceActivity 的类上设置某种侦听器。也许onContentChanged()

您会推荐哪种方法,为什么?

你能指出一个示例工作代码吗?

【问题讨论】:

  • @slybloty 请参阅下面我对@Yawus 的评论。如何将setOnCheckedChangeListener() 用于<CheckBoxPreference>?注意与<CheckBox> 的区别。

标签: android checkbox sharedpreferences preferenceactivity


【解决方案1】:

你应该实现OnSharedPreferenceChangeListener。然后设置一个监听器来捕捉关键变化:

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

您应该能够检索已检查的更改:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) 
{

}

【讨论】:

  • +1。您是否建议我在问题中提到的第一种方法是唯一的方法?还是最好的? PreferenceActivity.html#onContentChanged()不会剪吗?
  • 它可能也可以。因为我自己没有试过,所以我不能给你一个确切的答案。但我建议实现监听器。
  • 好的。我永远不会知道 onContentChanged() 是否效果更好,因为我刚刚实现了 OnSharedPreferenceChangeListener() 并且效果很好。有一天,当我有更多时间进行实验和基准测试时......
【解决方案2】:

这是documentation。使用 XML 文件,您可以设置单击小部件时要执行的方法。设置android:onClick = foo 将在单击小部件时执行方法foo,将参数View v 传递给它,v 是被单击的视图。

【讨论】:

  • 您的建议非常适合 <CheckBox> 在布局方面。我指的是 PreferenceScreen 上下文中的<CheckBoxPreference>。但我认为我刚刚发现了这个:stackoverflow.com/questions/8386832/android-checkbox-listener。实际上,即使是布局上下文,也不是 PreferenceScreen。
  • 好吧,你找到了答案,这对你有好处。我想我应该读得更深入一点。
  • 其实我没有。我庆祝得太早了。
猜你喜欢
  • 2015-12-10
  • 2021-05-03
  • 2011-06-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多