我有这样定义的偏好文件:
<?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 D
,则Option 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);
}
}
我的偏好显示但是在我点击某个选项之后,它被其他所有人所取代。这不会发生。建议?
答案 0 :(得分:1)
我不太清楚为什么你不想使用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)之前,您正试图从首选项文件中查找选项;
答案 1 :(得分:1)
您可以使用代码来执行此操作。实现onPreferenceChangeListener()并使用状态来获得所需的响应。