Autore Topic: Spinner Tutorial by google e dubbio su evento non richiesto  (Letto 1131 volte)

Offline Paciotti

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • sergiofabbrini
    • paciotti83
    • paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Paciotti
  • Sistema operativo:
    Mac OS X 10.6 & Ubuntu 10.10
Spinner Tutorial by google e dubbio su evento non richiesto
« il: 18 Marzo 2011, 19:45:47 CET »
0
L'implementazione dello spinner come suggerito da google nel Tutorial Hello Vidgets
http://developer.android.com/resources/tutorials/views/hello-spinner.html
sembra veloce e rapida, ma ho notato che ogni volta che apro l'applicazione, il toast che dovrebbe essere visualizzato alla selezione di un elemento, compare senza interazione con l'utente.
Dovendo usare questo spinner per impostare delle preferenze, mi viene da pensare che mettendo il salvataggio dei dati nel metodo onItemSelected() ogni volta verrebbero sovrascritte...
Forse mi sono perso qualcosa riadattando il codice ai miei scopi, ma ho solo cambiato i nomi alle variabili e non credo di aver fatto tanta confusione.
Qualcuno saprebbe suggerirmi dove sbaglio o comunque come risolvere il problema?
Grazie

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Spinner Tutorial by google e dubbio su evento non richiesto
« Risposta #1 il: 19 Marzo 2011, 01:14:19 CET »
0
purtroppo quel metodo viene richiamato quando lo spinner viene mostrato.
é perchè di default viene impostato il primo valore della lista, e quindi richiama quel metodo...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Paciotti

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • sergiofabbrini
    • paciotti83
    • paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Paciotti
  • Sistema operativo:
    Mac OS X 10.6 & Ubuntu 10.10
Re:Spinner Tutorial by google e dubbio su evento non richiesto
« Risposta #2 il: 19 Marzo 2011, 11:11:01 CET »
0
Bella questa!
Mi sembra un po' scortese generare eventi che nessuno richiede...no?
Comunque credo di aver risolto:
Per prima cosa ho usato l'attributo xml android:entries per popolare lo spinner, evitando tutta la faccenda dell'adapter.
Poi leggo le preferenze PRIMA di settare il listener sullo spinner e se la preferenza è diversa da 0 uso spinner.setSelection() per impostarlo come la preferenza.
Infine settando il listener posso anche salvare nuovamente le preference.
Così dovrebbe funzionare.

P.S. è un po' off-topic, ma sto avendo problemi a far riconoscere l'array di string allo spinner: ho cancellato una voce, ma continua a visualizzarla anche dopo aver rimosso l'applicazione e riavviato sia tutto (eclipse, emulatore, cellulare, il pc mi manca, ma credo che sarebbe esagerato!). Ho provato ad aggiornare, ma non c'è verso di far sparire quell'item dallo spiner!!!

Offline Paciotti

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • sergiofabbrini
    • paciotti83
    • paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Paciotti
  • Sistema operativo:
    Mac OS X 10.6 & Ubuntu 10.10
Re:Spinner Tutorial by google e dubbio su evento non richiesto
« Risposta #3 il: 19 Marzo 2011, 11:32:06 CET »
0
Ormai per far funzionare il tutto mi manca solo di salvare le preferenze. Pensavo fosse facile, ma non so perchè dà un errore sul metodo getSharedPreferences() dicendo che tale metodo non è definito per la classe SharedPreferences. Questo è il sorgente:
Codice (Java): [Seleziona]
final class MyOnItemSelectedListener implements OnItemSelectedListener {
        public final static String MY_PREFERENCES = "PrefixPreferences";

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos,
                        long id) {
                SharedPreferences preferences = SharedPreferences.getSharedPreferences(
                                MY_PREFERENCES, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putInt("mode", pos);
                editor.commit();
                Toast.makeText(parent.getContext(), "Mode " + parent.getItemAtPosition(pos).toString()
                                                + " selected. Position: " + pos, Toast.LENGTH_LONG)     .show();
        }

        public void onNothingSelected(AdapterView parent) {
                // Do nothing.
        }
}
Questa casse si trova nel suo file che fa parte del package... non capisco cosa le manchi!
« Ultima modifica: 19 Marzo 2011, 11:33:57 CET da Paciotti »

Offline Paciotti

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • sergiofabbrini
    • paciotti83
    • paciotti
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Paciotti
  • Sistema operativo:
    Mac OS X 10.6 & Ubuntu 10.10
Re:Spinner Tutorial by google e dubbio su evento non richiesto
« Risposta #4 il: 19 Marzo 2011, 17:20:27 CET »
0
Ho risolto, anche se forse non è una soluzione molto elegante:
Rimossa la classe MyOnItemSelectedListener che ho postato prima! Ora salvo le preferenze non alla scelta dell'elemento, ma nel metodo onPause() prima di uscire dall'applicazione tramite spinner.getSelectedItemPosition().
Ovviamente ora non c'è nessun listener e nessun metodo è invocato senza volerlo.
Mi sembra comunque strano che non sia possibile settare un listener senza che venga chiamato automaticamente!