Domanda

Voglio avere un elemento a mio menu delle preferenze che fa il seguente:

  • Mostra un elenco di opzioni.
  • Molti sono selezionabili
  • importo massimo di opzioni da scegliere 2.

Le possibilità ho pensato di:

  1. Fare un PreferenceScreen separato e mostrando opzioni come checkBoxes, ma non so dove posizionare la logica del massimo 2 opzioni.
  2. L'estensione DialogPreference e farlo a mano.

Qual è il modo migliore?

È stato utile?

Soluzione

L'estensione DialogPreference sarebbe ottenere il più vicino in termini di look-and-feel; le classi Preference sono abbastanza poco flessibile e poco estensibile nella mia esperienza.

Non riesco a ricordare troppo di PreferenceScreen, ma immagino che sia simile.

In un app ho lavorato, abbiamo finito con attività separate, lanciati tramite Intent da un elemento Preference onClick. Questo ci ha permesso di sviluppare facilmente schermi privilegiate che richiedono logica di convalida di un po 'più complesso rispetto al solito.

Altri suggerimenti

È possibile inserire la logica del massimo due opzioni in un OnSharedPreferenceChangeListener .

Quindi, basta ascoltare tutte le preferenze che cambiano e aggiornare loro se si seleziona una combinazione non valida.

Così il vostro codice sarebbe qualcosa di simile al seguente:

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 si crea il proprio PreferenceActivity che implementa OnSharedPreferenceChangeListener è possibile attivare l'ascoltatore ad essere solo l'ascolto quando necessario fare qualcosa di simile:

@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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top