ラジオ リストのように機能する複数の CheckBoxPreferences を同じ画面に表示したいと考えていました。私はそれのいくつかの実装を見ましたが、最終的には私自身のものを書きました。おそらくそれは誰かを助けるでしょう。
1 に答える
1
1) 次のようなグループ クラスを作成します。
public class CheckBoxPreferenceGroup {
private List<CheckBoxPreference> mGroup;
public CheckBoxPreferenceGroup(PreferenceManager manager, String[] keys) {
mGroup = new ArrayList<CheckBoxPreference>(keys.length);
for (int i = 0; i < keys.length; i++) {
final CheckBoxPreference cbx = (CheckBoxPreference) manager.findPreference(keys[i]);
cbx.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
onCheckBoxClick(cbx);
return true;
}
});
mGroup.add(cbx);
}
}
private void onCheckBoxClick(CheckBoxPreference newChecked) {
CheckBoxPreference oldChecked = null;
for (CheckBoxPreference item : mGroup) {
if (item != newChecked && item.isChecked()) {
oldChecked = item;
break;
}
}
if (oldChecked != null)
oldChecked.setChecked(false);
}
}
2) 文字列 (String[] キー) の配列を提供して、設定を検索できるようにします。
3) 次のように使用します。
public static class ScreenSettingsPreferenceFragment extends PreferenceFragment {
private static CheckBoxPreferenceGroup mAlertGroup;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_screen_notifications);
PreferenceManager.setDefaultValues(getActivity().getApplicationContext(), R.xml.preferences, false);
PreferenceManager pm = getPreferenceManager();
mAlertGroup = new CheckBoxPreferenceGroup(pm, getResources().getStringArray(R.array.pref_checkboxes));
}
}
pref_checkboxesは、チェックボックス キーの文字列配列です。
<string-array name="pref_checkboxes">
<item>pref_cbx1</item>
<item>pref_cbx2</item>
<item>pref_cbx3</item>
<item>pref_cbx4</item>
</string-array>
于 2012-11-01T19:39:18.417 に答える