Android:在检查/取消选中其他CheckboxPreference时显示/隐藏偏好



我试图完成这样的事情:当我检查CheckboxPreference时当我取消选中" 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早些时候已定义为偏好段类字段。

问题在于它仅在2个点击时工作正常,我的日志说:

prefA checked
prefA UNchecked
prefA UNchecked

就像是两次打电话给OnPreferenceChangeListener进行取消选中(显然导致.removePreference(prefb)方法返回null)。

解决问题的想法?

它会做这样的事情吗?

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;  
    }
});

相关内容

  • 没有找到相关文章

最新更新