Elenco Android Preferenza Un passo indietro
-
12-11-2019 - |
Domanda
Ho un elenco di elenchi nel sistema di preferenza per la mia app Android per consentire a un utente di selezionare da uno dei dati di un massimo di 5 account diversi. All'interno delle preferenze devono essere in grado di passare da un numero tra gli account che desiderano utilizzare attualmente. Il problema è che quando faccio clic su una delle selezioni, ottengo la selezione da prima L'elenco è stato aperto. Codice come segue:
// Get the Account Preferences pointer
final ListPreference accountPref = (ListPreference) findPreference("accountPref");
CharSequence[] entries = { "Account 1", "Account 2", "Account 3", "Account 4", "Account 5" };
CharSequence[] entryValues = { "1", "2", "3", "4", "5" };
accountPref.setEntries(entries);
accountPref.setEntryValues(entryValues);
accountPref.setDefaultValue("1");
accountPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.i("theApp", "Selected = " + accountPref.getValue());
return true;
}
});
Quindi, se seleziono la terza voce nella finestra di dialogo, il registro restituisce "1". Se quindi seleziono il 5 °, restituisce "3". Sembra che stia restituendo la selezione prima la nuova selezione. Come faccio a ottenere il attuale selezione, non l'ultima?
Soluzione
Se è così, è perché stai leggendo accountPref.getValue()
. Il valore non è stato ancora commesso, è impegnato solo una volta onPreferenceChange()
ritorna true
. Invece, usa il newValue
parametro per leggere ciò che ha l'utente Appena raccolto.