0

ラジオ リストのように機能する複数の CheckBoxPreferences を同じ画面に表示したいと考えていました。私はそれのいくつかの実装を見ましたが、最終的には私自身のものを書きました。おそらくそれは誰かを助けるでしょう。

4

1 に答える 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 に答える