我想在我的偏好活动中添加一个复选框,以启用或禁用接收器。这是针对将在后台运行的服务,在启动完成时,将取决于两件事:1)首选项是否为真,2)是否启用了 wifi。
所以它会像这样工作;
- 用户打开手机
- 启动完成检查接收器是否启用(由 checkboxpreference 设置)
- 如果 checkboxpreference 为真 - 寻找 wifi
- 如果 wifi 为真 - 注册接收器
如果 wifi 或 checkboxpreference 变为“false”,则还需要取消注册接收器。
我想在我的偏好活动中添加一个复选框,以启用或禁用接收器。这是针对将在后台运行的服务,在启动完成时,将取决于两件事:1)首选项是否为真,2)是否启用了 wifi。
所以它会像这样工作;
如果 wifi 或 checkboxpreference 变为“false”,则还需要取消注册接收器。
蒂姆的回答是正确的,但没有得到很好的解释。你需要OnSharedPreferenceChangeListener
在你的类中实现:
class Prefs extends PreferenceActivity implements OnSharedPreferenceChangeListener {
这样做会“迫使”您实施public void onSharedPreferenceChanged()
. 您可以在此处对用户所做的任何更改做出反应:
public void onSharedPreferenceChanged( SharedPreferences pref, String key) {
if ( key == "receiversToggle" ){
if ( pref.getBoolean( "receiversToggle", false ) ) enableReceivers();
else disableReceivers();
}
}
一旦你设置了这些方法,你就可以按照 Tim 在你的onCreate()
方法中解释的那样注册监听器:
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
几天前我也有同样的问题,最后我在 if 语句中使用了 CheckBoxPreference。
我用这段代码做到了:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
然后,当我不得不使用 CheckBoxPreference 时,我这样做了:
if(prefs.getBoolean("degrees", true)) {
} else {
}