Pergunta

Eu quero ter um elemento no meu menu de preferência que faça o seguinte:

  • Mostre uma lista de opções.
  • Muitos são selecionáveis
  • Quantidade máxima de opções a serem escolhidas 2.

Possibilidades que eu pensei:

  1. Fazendo um separado PreferenceScreen e mostrando opções como checkBoxes, mas não sei onde colocar a lógica das opções max 2.
  2. Estendendo -se DialogPreference e fazendo isso à mão.

Qual é a melhor maneira?

Foi útil?

Solução

Estendendo -se DialogPreference você o levaria mais próximo em termos de aparência e sensação; a Preference As aulas são razoavelmente inacessíveis e não extensíveis em minha experiência.

Não me lembro muito sobre PreferenceScreen, mas imagino que seja semelhante.

Em um aplicativo em que trabalhei, acabamos usando atividades separadas, lançadas via Intent a partir de um Preference Item OnClick. Isso nos permitiu desenvolver facilmente telas de preferência que exigem uma lógica de validação um pouco mais complexa do que a usual.

Outras dicas

Você pode colocar a lógica do máximo de duas opções em um OnSharedPreferenceChangeListener.

Então você apenas ouve todas as preferências à medida que elas mudam e as atualizam se uma combinação inválida for selecionada.

Portanto, seu código seria algo como o seguinte:

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();
    }
}

Se você criar o seu próprio PreferenceActivity isso implementa OnSharedPreferenceChangeListener Você pode permitir que o ouvinte esteja ouvindo apenas quando necessário fazer algo assim:

@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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top