While there is now RadioButton Preference widget in Android, you can use the existing CheckBoxPreference widget, add the same OnPreferenceClickListener and add a little code to ensure that only one CheckBox gets clicked.
To start with, here is a sample of a preference XML file.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<PreferenceCategory android:title="@string/pref_view_mode"> <CheckBoxPreference android:title="test1" android:defaultValue="1" android:key="cbViewModeList" /> <CheckBoxPreference android:title="test2" android:defaultValue="0" android:key="cbViewModeCalendar" /> </PreferenceCategory> |
And in the onCreate() method, you can do it like this:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
@Override public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); addPreferencesFromResource(R.xml.pref_setting); final ArrayList<CheckBoxPreference> alViewMode = new ArrayList<>(); Preference.OnPreferenceClickListener listener = new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { for (CheckBoxPreference cbp : alViewMode) { if (!cbp.getKey().equals(preference.getKey()) && cbp.isChecked()) { cbp.setChecked(false); } else if (cbp.getKey().equals(preference.getKey()) && !cbp.isChecked()) { cbp.setChecked(true); } } return false; } }; CheckBoxPreference cbpViewModeList = (CheckBoxPreference) getPreferenceManager().findPreference("cbViewModeList"); cbpViewModeList.setOnPreferenceClickListener(listener); CheckBoxPreference cbpViewModeCalendar = (CheckBoxPreference) getPreferenceManager().findPreference("cbViewModeCalendar"); cbpViewModeCalendar.setOnPreferenceClickListener(listener); alViewMode.add(cbpViewModeList); alViewMode.add(cbpViewModeCalendar); } |
That should do it.