i have three checkboxes in my preference screen. i want to make the user select only one checkbox at a time. How do i achieve this?
thank you in advance.
i have three checkboxes in my preference screen. i want to make the user select only one checkbox at a time. How do i achieve this?
thank you in advance.
On
using radio group maybe? :) http://developer.android.com/resources/tutorials/views/hello-formstuff.html#RadioButtons
or if you really need to use checkbox widget, you could check other checkboxes using isChecked() and untick then via setChecked(false) in your OnCheckedChangeListener class implementation
On
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
//mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
mLocationChangedListener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
mChbLocationLastChanged = (CheckBoxPreference) preference;
return true;
}
};
mLocationClickListener = new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
setLocationAccuracy();
return true;
}
};
mChbLocationHigh = (CheckBoxPreference) findPreference("pref_chb_location_high_accuracy_key");
mChbLocationHigh.setOnPreferenceChangeListener(mLocationChangedListener);
mChbLocationHigh.setOnPreferenceClickListener(mLocationClickListener);
mChbLocationBalanced = (CheckBoxPreference) findPreference("pref_chb_location_balanced_power_key");
mChbLocationBalanced.setOnPreferenceChangeListener(mLocationChangedListener);
mChbLocationBalanced
.setOnPreferenceClickListener(mLocationClickListener);
mChbLocationLowPower = (CheckBoxPreference) findPreference("pref_chb_location_low_power_key");
mChbLocationLowPower.setOnPreferenceChangeListener(mLocationChangedListener);
mChbLocationLowPower
.setOnPreferenceClickListener(mLocationClickListener);
mChbLocationNoPower = (CheckBoxPreference) findPreference("pref_chb_location_no_power_key");
mChbLocationNoPower.setOnPreferenceChangeListener(mLocationChangedListener);
mChbLocationNoPower
.setOnPreferenceClickListener(mLocationClickListener);
}
private void setLocationAccuracy() {
boolean isChecked = mChbLocationLastChanged.isChecked();
String key = mChbLocationLastChanged.getKey();
if (key.equalsIgnoreCase("pref_chb_location_high_accuracy_key")) {
mChbLocationBalanced.setChecked(false);
mChbLocationLowPower.setChecked(false);
mChbLocationNoPower.setChecked(false);
} else if (key.equalsIgnoreCase("pref_chb_location_balanced_power_key")) {
mChbLocationHigh.setChecked(false);
mChbLocationLowPower.setChecked(false);
mChbLocationNoPower.setChecked(false);
} else if (key.equalsIgnoreCase("pref_chb_location_low_power_key")) {
mChbLocationHigh.setChecked(false);
mChbLocationBalanced.setChecked(false);
mChbLocationNoPower.setChecked(false);
} else if (key.equalsIgnoreCase("pref_chb_location_no_power_key")) {
mChbLocationHigh.setChecked(false);
mChbLocationBalanced.setChecked(false);
mChbLocationLowPower.setChecked(false);
}
if (!mChbLocationLastChanged.isChecked())
mChbLocationLastChanged.setChecked(true);
}
You would need to create an onpreferenceChangelistener:
Then to use it,
Or, you can use a ListPreference which will pop up a radio group and you can just put the three option in there. That's what I did in my App, but If the checkboxpreferences are needed, then that of course will work.
Here's my listpreference (for choosing how long it will ring for):
And here's my XML for the @array/ringTime and @array/ringSetting
I know this is a 5-month old question as of today, but I thought this might help someone else. :)
And then for implementing the listpreference inside my code: