Android获取偏好复选框

标签 android preferences

<分区>

Possible Duplicate:
Proper RadioGroup in PreferenceActivity

我有一个这样定义的首选项文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >      
        <PreferenceCategory android:title="Group One" >
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionA"
                android:title="Option A" />
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionB"
                android:title="Option B" />
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionC"
                android:title="Option C" />
        </PreferenceCategory>
        <PreferenceCategory android:title="Group Two" >
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionD"
                android:title="Option D" />
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionE"
                android:title="Option E" />
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionF"
                android:title="Option F" />
        </PreferenceCategory>
        <PreferenceCategory android:title="Group Tree" >
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionG"
                android:title="Option G" />
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionH"
                android:title="Option H" />
            <CheckBoxPreference
                android:defaultValue="false"
                android:key="optionI"
                android:title="Option I" />
        </PreferenceCategory>
</PreferenceScreen>

这个想法仅供用户选择。如果用户选中 Option I,则此选项会被选中,但如果他随后选中 Option DOption I 将变为未选中状态,而 Option D 被检查。

我想知道是否可以不使用 ListPreferences

如果它是一个对话框,我会使用 public void onClick(DialogInterface dialog, int which) 并遍历项目以完成我想要的但我不知道如何在首选项中执行此操作.

有什么建议吗?

**更新

根据 Gatekeeper 的建议,这是代码:

public class Preferences extends PreferenceActivity implements OnPreferenceClickListener {

    final CheckBoxPreference optionA = (CheckBoxPreference) findPreference("optionA");
    final CheckBoxPreference optionB = (CheckBoxPreference) findPreference("optionB");
    final CheckBoxPreference optionC = (CheckBoxPreference) findPreference("optionC");
    final CheckBoxPreference optionD = (CheckBoxPreference) findPreference("optionD");
    final CheckBoxPreference optionE = (CheckBoxPreference) findPreference("optionE");
    final CheckBoxPreference optionF = (CheckBoxPreference) findPreference("optionF");
    final CheckBoxPreference optionG = (CheckBoxPreference) findPreference("optionG");
    final CheckBoxPreference optionH = (CheckBoxPreference) findPreference("optionH");
    final CheckBoxPreference optionI = (CheckBoxPreference) findPreference("optionI");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
        System.out.println("It gets here");

    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        // TODO Auto-generated method stub
        System.out.println("This text is not printed on logcat");
        optionA.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionA.setChecked(true);
                return true;
            }
        });
        optionB.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionB.setChecked(true);
                return true;
            }
        });
        optionC.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionC.setChecked(true);
                return true;
            }
        });
        optionD.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionD.setChecked(true);
                return true;
            }
        });
        optionE.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionE.setChecked(true);
                return true;
            }
        });
        optionF.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionF.setChecked(true);
                return true;
            }
        });
        optionG.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionG.setChecked(true);
                return true;
            }
        });
        optionH.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionH.setChecked(true);
                return true;
            }
        });
        optionI.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
                unCheckAll();
                optionI.setChecked(true);
                return true;
            }
        });

        return true;
    }

    private void unCheckAll() {
        optionA.setChecked(false);
        optionB.setChecked(false);
        optionC.setChecked(false);
        optionD.setChecked(false);
        optionE.setChecked(false);
        optionF.setChecked(false);
        optionG.setChecked(false);
        optionH.setChecked(false);
        optionI.setChecked(false);

    }
}

显示了我的偏好,但在我单击一个选项后,其他所有选项都被取消了。这没有发生。有什么建议吗?

最佳答案

我不太确定您为什么不想使用 ListPreference,但无论哪种方式,您需要做的是当您通过您偏好的 onClick() 方法时,您需要取消选中所有复选框,然后选中只是你想要的复选框。

有点像

optionD.setOnPreferenceClickListener(new OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        unCheckAll();
        optionD.setChecked(true);
        return true;
    }
});

private void unCheckAll() {
    optionA.setChecked(false);
    optionB.setChecked(false);
    optionC.setChecked(false);
    // Rest of Options go here
}

更新#2

private CheckBoxPreference optionA;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs);
    System.out.println("It gets here");

    optionA = (CheckBoxPreference) findPreference("optionA");
    optionA.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {
            unCheckAll();
            optionA.setChecked(true);
            return true;
        }
    });

}

为您的所有选项做这个例子。在调用 addPreferencesFromResource(R.xml.prefs) 之前,您正在尝试从首选项文件中找到您的选项;

关于Android获取偏好复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096676/

相关文章:

android - Firestore 适配器获取所有用户文档但不是当前用户文档以显示在 RecyclerView 中

Android 小部件多种尺寸你确定他们在配置 Activity 中选择的尺寸吗

Android PreferenceActivity 跨应用创建 MODE_WORLD_WRITEABLE 首选项

android - 使用复选框以编程方式填充首选项

android - 如何在 PreferenceFragment 中加载首选项默认值?

android - 当用户从我的 PreferenceActivity(SettingActivity) 中选择选项时,如何隐藏通知

android - 无法访问 genymotion 相机?

Android-在 ListView 点击时打开新 Activity

java - 如何将 Reader 解析为日历?

Android 偏好设置 : How to load the default values when the user hasn't used the preferences-screen?