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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top