当其他首选项被禁用时,如何在我的Android应用程序中启用首选项?

Vas*_*asu 22 android android-preferences

我曾经PreferenceActivity在我的Android应用程序中有偏好.我想要一个偏好说"pref 2"在其他偏好说"pref 1"未被选中时被启用,而"pref 2"在被选中"pref 1"时被禁用.即恰好与android:dependancy属性相反.

我怎样才能做到这一点?

cla*_*ere 93

是的,可以开箱即用.假设你想在pref1关闭时禁用pref2
这里是为pref1输入的代码(首选xml布局):

<CheckBoxPreference
    android:title="Pref1"
    android:key="pref1">
</CheckBoxPreference>
Run Code Online (Sandbox Code Playgroud)

这是为pref2输入的代码(首选项xml布局):

<EditTextPreference
    android:dialogMessage="Pref 2 dialog"
    android:title="Pref2"
    android:key="pref2" 
    android:dependency="pref1">
</EditTextPreference>
Run Code Online (Sandbox Code Playgroud)

像sigmazero13所说的那样,默认情况下disableDependentsState为false,因此您不需要将它包含在pref1属性中.

  • 对我来说,最好用XML做这种事情 (2认同)

小智 30

根据这里的文档,你可以像这样在CheckBoxPreference标签中添加一个属性:

android:disableDependentsState="true"
Run Code Online (Sandbox Code Playgroud)

默认情况下,这是false,这意味着在取消选中复选框时禁用依赖项,但通过将其设置为true,它应该具有相反的效果.

  • 我自己测试过,这完全符合OP的要求,所有这些都在XML =]中. (2认同)

Dav*_*und 10

我不认为它有任何开箱即用的解决方案,即倒置dependancy属性.但总有点击监听器:

preference1.setOnPreferenceClickListener(pref1_click);

....

private OnPreferenceClickListener pref1_click = new OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        preference2.setEnabled(!preference1.isChecked());
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)