Autore Topic: Spinner setOnItemSelectedListener Vs setOnItemClickListener  (Letto 363 volte)

Offline lucab

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +10
    • Mostra profilo
    • Lucabportal
  • Dispositivo Android:
    Nexus 5 - Nexus One
  • Play Store ID:
    Luca Biasotto
  • Sistema operativo:
    Mac OS X
Spinner setOnItemSelectedListener Vs setOnItemClickListener
« il: 24 Agosto 2014, 15:26:58 CEST »
0
Ciao Ragazzi,

ho un problemino con uno spinner che non riesco proprio a risolvere.

Ho uno spinner così dichiarato:

Codice (Java): [Seleziona]
 <Spinner
                android:id="@+id/spinnerFrequenza"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />

ho la necessità di intercettare la selezione di un elemento dello spinner e per farlo ho usato:

Codice (Java): [Seleziona]
spinnerFrequenza.setOnItemSelectedListener(new OnItemSelectedListener() {

                        @Override
                        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) {
                                //fai qualcosa
                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> arg0) {
                                // Non fa niente
                        }
                });

Fin qui nessun problema se non fosse che ho la necessità di rilevare anche se viene riselezionato lo stesso elemento ma il listener "setOnItemSelectedListener" scatta solo se viene cambiata la selezione se si riseleziona lo stesso non scatta nulla!

Ho provato con setOnItemClickListener ma non è supportato dallo spinner.

Qualche idea?
Grazie in anticipo
Luca

P.s. ho trovato una soluzione aggiungendo il listener seguente, ma è pessima come soluzione:

Codice (Java): [Seleziona]
spinnerFrequenza.setOnTouchListener(new OnTouchListener() {
               
                                        @Override
                                        public boolean onTouch(View v, MotionEvent event) {
                                                spinnerFrequenza.setSelection(0);
                                                return false;
                                        }
                                });
Le occasioni arrivano una volta sola, se non le afferri al volo passeranno altri alla storia.

iClaude

  • Visitatore
Re:Spinner setOnItemSelectedListener Vs setOnItemClickListener
« Risposta #1 il: 24 Agosto 2014, 22:54:08 CEST »
+2
Ciao, il problema è che nel metodo setSelection della classe AbsSpinner viene fatto un controllo per verificare che l'elemento selezionato sia diverso da quello vecchio, in caso contrario non viene invocato nessun metodo.
Per risolvere il problema basta creare una classe Spinner personalizzata dove si forza la variabile contenente il vecchio elemento selezionato ad un valore impossibile (tipo -1) in modo tale che venga considerato sempre diverso da quello nuovo.
Qua ho fatto un breve tutorial, però in inglese:
Android - The Technical Blog: Spinner with "re-select" functionality

Offline lucab

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +10
    • Mostra profilo
    • Lucabportal
  • Dispositivo Android:
    Nexus 5 - Nexus One
  • Play Store ID:
    Luca Biasotto
  • Sistema operativo:
    Mac OS X
Re:Spinner setOnItemSelectedListener Vs setOnItemClickListener
« Risposta #2 il: 26 Agosto 2014, 10:43:34 CEST »
0
Ciao, il problema è che nel metodo setSelection della classe AbsSpinner viene fatto un controllo per verificare che l'elemento selezionato sia diverso da quello vecchio, in caso contrario non viene invocato nessun metodo.
Per risolvere il problema basta creare una classe Spinner personalizzata dove si forza la variabile contenente il vecchio elemento selezionato ad un valore impossibile (tipo -1) in modo tale che venga considerato sempre diverso da quello nuovo.
Qua ho fatto un breve tutorial, però in inglese:
Android - The Technical Blog: Spinner with "re-select" functionality

Ottima soluzione, non ci avevo pensato, ho seguito il tuo tutorial e ho risolto.
Grazie infinite.
Luca
Le occasioni arrivano una volta sola, se non le afferri al volo passeranno altri alla storia.