Android:在检查/取消选中其他CheckBoxPreference时显示/隐藏首选项

时间:2014-01-25 19:14:37

标签: android preference checkboxpreference preferencefragment

我试图完成这样的事情: 当我检查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)。

有任何关于解决问题的想法吗?

1 个答案:

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