Checkboxpreference更改值

时间:2017-10-12 06:14:27

标签: android preferenceactivity android-checkbox preferencescreen

我在首选项活动中有checkboxpreference,我希望当其中一个复选框启用时,其他复选框应该禁用,反之亦然。 我想从我的主要课堂活动中做到这一点。

这是我的代码:

Preferencecheckbox.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
    android:defaultValue="true"
    android:icon="@drawable/img"
    android:key="check1"
    android:title="first" />
<CheckBoxPreference
    android:defaultValue="false"
    android:icon="@drawable/img2"
    android:key="check2"
    android:title="second" />
</PreferenceScreen>

Preferenceclass.java

public class preferenceclass extends PreferenceActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferencecheckbox);
}

2 个答案:

答案 0 :(得分:1)

您需要为需要禁用的复选框添加依赖项。

像这样:

<CheckBoxPreference
    android:defaultValue="false"
    android:icon="@drawable/img2"
    android:key="check2"
    android:title="second" 
    android:dependency="check1" />

<强>更新 通过代码禁用其他首选项。

 final CheckBoxPreference checkbox2 = (CheakBoxPreference) findPreference("pref_checkbox2_key");

    CheckBoxPreference switch = (CheakBoxPreference) findPreference("pref_switch_key");
            switch.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {
                    if (switch.isChecked()) {
                        checkbox2.setEnabled(false);
                    } else {
                        checkbox2.setEnabled(true);
                    }
                    return true;
                }
            });
    persistCheckBoxState(switch, checkbox2);

要在活动结束时保留更改,您需要获取此类偏好设置,并直接在下方添加。

public void persistCheckBoxState (CheckBoxPreference switch, CheckBoxPreference checkbox2) {
if (switch.isChecked ()){ 
     checkbox2.setEnabled(false);
      } else {
      checkbox2.setEnabled(true);
    }
}

答案 1 :(得分:1)

也许ListPreference更符合您的要求。从可用性的角度来看,这将更有意义。当您必须从众多选择中选择一个时,这将是最明显的方法。有关详细说明,请参阅this帖子