Android: CheckboxPreferences действуют как RadioButtons - PullRequest
1 голос
/ 29 ноября 2010

У меня есть четыре флажка предпочтения на моем экране настроек, с которыми я хотел бы взаимодействовать как радиобутгруппа, то есть вы можете выбрать только один из них!Если, скажем, первый отмечен, и вам нравится проверять другой, просто проверяется нужный, а остальные не проверяются.

Ответы [ 2 ]

3 голосов
/ 05 октября 2012

Мне это понравилось:

public class PreferenceActivity extends PreferenceActivity {

    private SharedPreferences  prefs;
    private Editor             editor;
    private int                keyItemChecked;
    private CheckBoxPreference item1CheckBox, item2CheckBox, ..., itemICheckBox;

    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        prefs = PreferenceManager.getDefaultSharedPreferences(this);

        addPreferencesFromResource(R.xml.prefs);

        item1CheckBox = (CheckBoxPreference) getPreferenceManager().findPreference("item1");
        item2CheckBox = (CheckBoxPreference) getPreferenceManager().findPreference("item2");
        ...     
        itemICheckBox = (CheckBoxPreference) getPreferenceManager().findPreference("itemI");

        item1CheckBox.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference arg0) {
                 manageItem(1, item1CheckBox);
                 return true;
            }
        });
        ....
        itemICheckBox.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference arg0) {
                 manageItem(I, itemICheckBox);
                 return true;
            }
        });

    }
    private void manageItem(int i ,CheckBoxPreference pref) {
        keyItemChecked = prefs.getInt("keyItemChecked",1); // 1 is your default checked item
        if (! pref.isChecked() && keyItemChecked == i)
        // If you click on the checked item, you don't want it to be unchecked :
            pref.setChecked(true);
        if (pref.isChecked() && keyItemChecked != i) {
            editor = prefs.edit();
            editor.putInt("keyItemChecked", i);
            editor.commit();  // or editor.apply() if you use API > 9
            unckeckOldItem(keyItemChecked);
        }
    }
    private void unckeckOldItem(int item) {
        switch (item) {
        case 1:
            item1CheckBox.setChecked(false);
            break;
        ...
        case I:
            itemICheckBox.setChecked(false);
            break;
    }
}

Вам не нужно объявлять "keyItemChecked" в вашем файле prefs.xml.При первом вызове операции данные не существуют, и

keyItemChecked = prefs.getInt("keyItemChecked",1);

вернется 1. Как только вы нажмете на другой элемент, отличный от значения по умолчанию, данные будут существовать.

0 голосов
/ 29 ноября 2010

Похоже, вы можете использовать http://developer.android.com/reference/android/preference/CheckBoxPreference.html#setDisableDependentsState%28boolean%29 для создания этой функциональности. Я думаю, что установка зависимости предпочтений может быть сделано в XML.

...