【问题标题】:Android: Show/hide preference on checking/unchecking other CheckBoxPreferenceAndroid:在选中/取消选中其他 CheckBoxPreference 时显示/隐藏首选项
【发布时间】:2014-02-16 18:24:36
【问题描述】:

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

有解决问题的想法吗?

【问题讨论】:

  • 尝试返回true而不是switchedOn

标签: android preference checkboxpreference preferencefragment


【解决方案1】:

做这样的事情不会有用吗?

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

【讨论】:

  • 是的,return 语句是问题所在(但仍然需要 findpreference),无论如何感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多