发布
社区首页 >问答首页 >安卓:像RadioButtons一样使用CheckboxPreferences

安卓:像RadioButtons一样使用CheckboxPreferences
EN

Stack Overflow用户
提问于 2010-11-30 03:14:32
回答 2查看 2.2K关注 0票数 1

我的首选项屏幕中有四个复选框首选项,我想要像单选按钮组一样进行交互,这意味着您只能选中其中一个!如果假设第一个已选中,而您想选中另一个,则只选中所需的一个,而取消选中另一个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-30 03:19:21

看起来您可以使用http://developer.android.com/reference/android/preference/CheckBoxPreference.html#setDisableDependentsState%28boolean%29来创建该功能。我认为设置偏好的依赖关系可以在xml中完成。

票数 0
EN

Stack Overflow用户

发布于 2012-10-05 16:29:43

我喜欢这样:

代码语言:javascript
代码运行次数:0
复制
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;
    }
}

您不需要在prefs.xml上声明"keyItemChecked“。第一次调用活动时,数据不存在,并且

代码语言:javascript
代码运行次数:0
复制
keyItemChecked = prefs.getInt("keyItemChecked",1);

将返回1。一旦您单击了默认项以外的其他项,数据将存在。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4307156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档