ListPreference с максимальным количеством выбираемых опций

StackOverflow https://stackoverflow.com/questions/2013981

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Расширяющийся DialogPreference это сделало бы вас наиболее близкими с точки зрения внешнего вида;в Preference по моему опыту, классы довольно негибкие и не поддающиеся расширению.

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

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

Другие советы

Вы можете поместить логику максимум из двух вариантов в 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top