我的首选项屏幕中有三个复选框。我想让用户一次只选择一个复选框。我如何实现这一目标?
先感谢您。
您需要创建一个 onpreferenceChangelistener:
prefChangeListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference == pref1 && newValue.toString().equals("true")){
pref2.setChecked(false);
pref3.setChecked(false);
}
if (preference == pref2 && newValue.toString().equals("true")){
pref1.setChecked(false);
pref3.setChecked(false);
}
if (preference == pref3 && newValue.toString().equals("true")){
pref1.setChecked(false);
pref2.setChecked(false);
}
return true;
}
};
然后使用它,
pref1.setOnPreferenceChangeListener(prefChangeListener);
pref2.setOnPreferenceChangeListener(prefChangeListener);
pref3.setOnPreferenceChangeListener(prefChangeListener);
或者,您可以使用 ListPreference 来弹出一个单选组,然后您可以将三个选项放在那里。这就是我在我的应用程序中所做的,但如果需要复选框首选项,那么这当然会起作用。
这是我的列表偏好(用于选择响铃的时间):
<ListPreference android:persistent="true"
android:title="Ring Time"
android:summary="Choose how long the phone will ring when activated"
android:key="ringTime"
android:defaultValue="ringNot"
android:entries="@array/ringTime"
android:entryValues="@array/ringSetting" />
这是我的 @array/ringTime 和 @array/ringSetting 的 XML
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="ringTime">
<item>Don\'t Ring</item>
<item>Ring 30 Seconds</item>
<item>Ring 2 Minutes</item>
<item>Ring 5 Minutes</item>
</string-array>
<string-array name="ringSetting">
<item>ringNot</item>
<item>ring30Sec</item>
<item>ring2Min</item>
<item>ring5Min</item>
</string-array>
</resources>
我知道这是一个 5 个月大的问题,截至今天,但我认为这可能对其他人有所帮助。:)
然后在我的代码中实现 listpreference:
ringTime = pref.getString("ringTime", "ringNot");//ListPreferences are stored as strings
if (ringTime.equals(ring30Sec))
//ring for 30 seconds
else if (ringTime.equals(ring2Min))
//ring for 2 minutes
else if (ringTime.equals(ring5Min))
//ring for 5 minutes
else Toast.makeText(getBaseContext(), "Not Ringing", Toast.LENGTH_LONG).show();
这称为单选按钮。别客气
也许使用广播组?:) http://developer.android.com/resources/tutorials/views/hello-formstuff.html#RadioButtons
或者,如果您确实需要使用复选框小部件,您可以使用 isChecked() 检查其他复选框,然后在 OnCheckedChangeListener 类实现中通过 setChecked(false) 取消勾选
@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);
}