Autore Topic: Problema spinner.setOnItemSelectedListener()  (Letto 1220 volte)

Offline Ery86

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Window XP/7
Problema spinner.setOnItemSelectedListener()
« il: 02 Aprile 2011, 16:39:32 CEST »
0
Ciao a tutti!
Sono nuova di questo forum, ma non dello sviluppo di applicazioni Android! ;-)
Ho un problema che mi sta facendo impazzire!  :'(

Premessa: la mia applicazione deve visualizzare una serie di Button e di TextView la cui creazione avviene dinamicamente.
In pratica voglio che, cliccando sui miei Button, venga visualizzata una lista da cui scegliere l'elemento che verrà visualizzato poi nei vari TextView. Si tratta della stessa identica lista che viene visualizzata quando si clicca uno spinner.
Per far questo ho aggiunto nel metodo onClick dei miei Button uno spinner.performClick().
Fin qui tutto bene (la lista viene visualizzata), il problema si verifica dopo: il metodo setOnItemSelected che associo io allo spinner non viene mai chiamato, quindi non ho modo di aggiornar da lì il valore dei miei TextView.
Dal momento che lo spinner implementa già di default un suo listener per la selezione dei suoi elementi, quando chiamo il getSelectedItem() rileva correttamente l'elemento selezionato, ma non mi aggiorna il TextView (ovviamente direi!), anche perchè setto i miei TextView dopo la chiamata spinner.performClick(), quindi lo fa quando la lista si apre e non quando si chiude. 

Se non riesco proprio a passare per il mio listener, c'è un modo per capire quando la mia lista si è chiusa in modo da poter aggiornare i TextView correttamente?
Una possibile soluzione, ma che mi fa altrettanto schifo, è aggiungere un nuovo Button (per esempio) che, cliccandolo, fa una sorta di refresh e tutto funziona, ma non è quello che voglio io.

Qualche idea? Qualsiasi soluzione alternativa è ben accetta! Grazie!  :D



« Ultima modifica: 02 Aprile 2011, 16:43:51 CEST da Ery86 »

Offline g4b0

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
    • gabo 3.0
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    Debian Testing
Re:Problema spinner.setOnItemSelectedListener()
« Risposta #1 il: 06 Ottobre 2011, 09:29:44 CEST »
0
Ciao,
Ho lo stesso identico problema: uno spinner lanciato da un menu, la lista viene visualizzata, ma non passa dentro al Listener definito in setOnItemSelectedListener(), quindi mi perdo il risultato.

Come hai risolto? Qualcun'altro sa come implementare una ricerca da una lista (stile spinner) partendo da un Button o da un Menu?

Grazie
--
g4b0, linux user n. 369000
http://brosulo.net

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:Problema spinner.setOnItemSelectedListener()
« Risposta #2 il: 06 Ottobre 2011, 14:04:52 CEST »
0
[...]

Ho un problema che mi sta facendo impazzire!  :'(

[...]
A mio parere dovresti postare un po' di codice per cercare di trovare una soluzione...
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline g4b0

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
    • gabo 3.0
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    Debian Testing
Re:Problema spinner.setOnItemSelectedListener()
« Risposta #3 il: 06 Ottobre 2011, 14:53:26 CEST »
0
Ecco qua:

Dentro onCreate creo lo spinner e definisco setOnItemSelectedListener, ma l'esecuzione non vi passa mai:
Codice (Java): [Seleziona]
// Definisco lo spinner per la selezione del db remoto
spinnerDbRemoti = new Spinner(this);
ArrayAdapter<String> adapterDbRemotiName = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arrayDbRemotiName);
adapterDbRemotiName.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerDbRemoti.setAdapter(adapterDbRemotiName);

/* NON PASSA DI QUA */
spinnerDbRemoti.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {

                int item = spinnerDbRemoti.getSelectedItemPosition();
                if (mDbHelper.setDbRemotoActive(arrayDbRemoti[item])) {
                        selectedDbRemoto = arrayDbRemotiName[position];
                        Toast.makeText(getBaseContext(), "DB selezionato  " + selectedDbRemoto, Toast.LENGTH_SHORT).show();
                } else {
                        Toast.makeText(getBaseContext(), "DB NON selezionato  " + selectedDbRemoto, Toast.LENGTH_SHORT).show();
                }

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
                Toast.makeText(getBaseContext(), "AAA", Toast.LENGTH_SHORT).show();
        }

});

Alla pressione del tasto del menu lancio il .performClick() dello spinner, mi visualizza l'elenco desiderato, mi permette di cliccare, ma non passa mai dal listener di cui sopra.
Codice (Java): [Seleziona]
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch (item.getItemId()) {
        case ADD_DB:
                // Aggiungo un db

                return true;
        case LIST_DB:
                // Elenco i un db
                spinnerDbRemoti.performClick();

                return true;
        }

        return super.onMenuItemSelected(featureId, item);
}
--
g4b0, linux user n. 369000
http://brosulo.net

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Problema spinner.setOnItemSelectedListener()
« Risposta #4 il: 06 Ottobre 2011, 23:55:44 CEST »
0
Credo tu debba settare un onItemClickListener() e non un onItemSelectedListener().  ;-)

Offline g4b0

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
    • gabo 3.0
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    Debian Testing
Re:Problema spinner.setOnItemSelectedListener()
« Risposta #5 il: 13 Ottobre 2011, 11:33:55 CEST »
0
Ho provato con

Codice (Java): [Seleziona]
spinnerDbRemoti.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, Long id) {
                Toast.makeText(getBaseContext(), "Elemento cliccato", Toast.LENGTH_SHORT).show();
        }
});

Ma mi da questo errore:

Codice: [Seleziona]
E/AndroidRuntime(  276): FATAL EXCEPTION: main
E/AndroidRuntime(  276): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.edisoft.ediflash/net.edisoft.ediflash.EdiFlashActivity}: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.

Come faccio a gestire questo spinner?
--
g4b0, linux user n. 369000
http://brosulo.net