我试图完成这样的事情: 当我检查CheckBoxPreference'A'时,另一个偏好('B')显示在A下面, 当我取消选中'A'时,首选项'B'会隐藏......
所以一般来说它应该像依赖一样起作用,但不仅要启用/禁用首选项B,还要隐藏它。
这就是我提出的:
prefA = (CheckBoxPreference)findPreference("preference_A");
prefA.setChecked(false);
prefB = findPreference("preference_B");
category.removePreference(prefB);
prefA.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean switchedOn = (Boolean)newValue;
if (switchedOn)
{
Log.d("pref_test", "prefA checked");
category.addPreference(prefB);
}
else
{
Log.d("pref_test", "prefA UNchecked");
prefB = findPreference("preference_B");
category.removePreference(prefB);
}
return switchedOn;
}
});
prefA和prefB之前已被定义为PreferenceFragment类字段。
问题是只有2次点击才能正常工作,我的日志说:
prefA checked
prefA UNchecked
prefA UNchecked
就像它调用onPreferenceChangeListener两次取消选中一样(显然导致.removePreference(prefB)方法返回null)。
有任何关于解决问题的想法吗?
答案 0 :(得分:4)
做这样的事情会不起作用?
prefA = (CheckBoxPreference)findPreference("preference_A");
prefA.setChecked(false);
prefB = findPreference("preference_B");
category.removePreference(prefB);
prefA.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean switchedOn = (Boolean)newValue;
if (switchedOn) {
Log.d("pref_test", "prefA checked");
category.addPreference(prefB);
} else {
Log.d("pref_test", "prefA UNchecked");
prefB = findPreference("preference_B");
category.removePreference(prefB);
}
return true;
}
});