ListPreference с максимальным количеством выбираемых опций - PullRequest
0 голосов
/ 06 января 2010

Я хочу, чтобы в моем меню настроек был элемент, который выполняет следующие действия:

  • Показать список опций.
  • Многие выбираются
  • Максимальное количество вариантов для выбора 2.

Возможности, о которых я думал:

  1. Выполнение отдельного PreferenceScreen и отображение опций как checkBoxes, но я не знаю, где разместить логику максимум 2 опций.
  2. Расширение DialogPreference и выполнение этого вручную.

Какой лучший способ?

Ответы [ 2 ]

3 голосов
/ 06 января 2010

Расширение DialogPreference сделает вас ближе всего с точки зрения внешнего вида; Preference классы довольно негибкие и не расширяемые в моем опыте.

Я не могу вспомнить слишком много о PreferenceScreen, но я думаю, что это похоже.

В приложении, над которым я работал, мы использовали отдельные действия, запускаемые через Intent из элемента Preference на клике. Это позволило нам легко разрабатывать экраны предпочтений, которые требуют более сложной логики проверки, чем обычно.

1 голос
/ 06 января 2010

Вы можете поместить логику максимум двух параметров в OnSharedPreferenceChangeListener.

Таким образом, вы просто слушаете все настройки по мере их изменения и обновляете их, если выбрана неверная комбинация.

Итак, ваш код будет выглядеть примерно так:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
    //Code to calcuate how many are selected
    int code = numberSelected();

    if (count > 2) {
        sharedPreferences.edit().putBoolean(key,false).commit();
        Toast.makeText(this,"Can't select more than two!",Toast.LENGTH_LONG).show();
    }
}

Если вы создаете свой собственный PreferenceActivity, который реализует OnSharedPreferenceChangeListener, вы можете разрешить слушателю слушать только тогда, когда требуется выполнить что-то вроде этого:

@Override
protected void onResume() {
super.onResume();
    //Register the listener
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
...