3

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

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

4

1 回答 1

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;  
    }
});
于 2014-01-25T19:25:11.327 回答