0

我在首選項活動中使用了checkbox首選項,我希望當其中一個複選框被啓用時,其他複選框應該禁用,反之亦然。 我想從我的主要課堂活動中做到這一點。複選框首選項更改值

這裏是我的代碼:

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

看到'機器人:dependency'在'android.preference.Preference' – pskink

+0

我不認爲我們可以在個人偏好屏幕 – Ravi

回答

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

和單選按鈕,如果有超過2個複選框,然後我們可以添加3或更多依賴於彼此 – Ravi

+0

是的。 'android:dependency'屬性使用引用的首選項的狀態來處理禁用或啓用的狀態。 – codeFreak

+0

你能幫我做到這一點編程。 – Ravi

1

也許ListPreference是你想要的。從可用性的角度來看,這會更有意義。當你不得不從多個選擇中選擇一個時,這將是最明顯的方法。見this後獲取進一步的說明

+0

好的我已經使用了列表首選項 – Ravi

+0

所以,它工作? – Pynnie

+0

以及listprefernce工程,但我不能夠使用它的圖像 – Ravi