Autore Topic: Spinner  (Letto 2165 volte)

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Spinner
« il: 23 Gennaio 2013, 12:44:11 CET »
0
Ragazzi ho uno spinner con 4 item, ad ogni item vorrei assegnare un azione diversa, nello specifico vorrei far aprire ad ogni item una diversa activity, come posso farlo?
il mio codice:
Codice (Java): [Seleziona]
public class HelloSpinnerActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coup_apps1);
       
        Spinner spinner = (Spinner)findViewById(R.id.testSpinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        this,
                        android.R.layout.simple_spinner_item,
                        new String[]{"Home","Newsletter","Toolbar","Info"}
                        );
        // Specify the layout to use when the list of choices appears
       
       
        adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        spinner.setAdapter(adapter);
     
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                public void onItemSelected(AdapterView<?> adapter, View view,int pos, long id) {
                       
                ???????????????????
                ??????????????


       
                }
                public void onNothingSelected(AdapterView<?> arg0) {}
                });
   
    }
}

Grazie  :-)
Domani Smetto.

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Spinner
« Risposta #1 il: 23 Gennaio 2013, 15:01:12 CET »
0
Nessuno sa darmi una risposta?  :-)
Domani Smetto.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Spinner
« Risposta #2 il: 23 Gennaio 2013, 15:15:48 CET »
+1
Hai provato a guardare la documentazione ufficiale? Dal codice che hai postato capisco che il problema è l'implementazione del metodo onItemSelected dell'OnItemSelectedListener:

http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html#onItemSelected(android.widget.AdapterView<?>, android.view.View, int, long)

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Spinner
« Risposta #3 il: 23 Gennaio 2013, 15:40:29 CET »
0
Hai provato a guardare la documentazione ufficiale? Dal codice che hai postato capisco che il problema è l'implementazione del metodo onItemSelected dell'OnItemSelectedListener:

http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html#onItemSelected(android.widget.AdapterView<?>, android.view.View, int, long)

Ho cercato di trovare la soluzione sulla documentazione ufficiale ma sia lì sia in giro non riesco a capire come fare per assegnare ad ogni item position uno start activity
Grazie  :-)
Domani Smetto.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Spinner
« Risposta #4 il: 23 Gennaio 2013, 15:51:01 CET »
+1
Scusami ma non ho capito l'ultimo passaggio: "assegnare ad ogni item position uno start activity".

Ad ogni modo, quel metodo scatta quando un item viene selezionato; i parametri che ti vengono passati fanno appunto riferimento a questo item, e come da documentazione,  il parametro position   è appunto
Citazione
The position of the view in the adapter
che è quello che serve sapere a te.

Una volta recuperato l'item tramite la position, fai i tuoi controlli e lanci lo startActivity.

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Spinner
« Risposta #5 il: 23 Gennaio 2013, 16:12:26 CET »
0
Scusami ma non ho capito l'ultimo passaggio: "assegnare ad ogni item position uno start activity".

Ad ogni modo, quel metodo scatta quando un item viene selezionato; i parametri che ti vengono passati fanno appunto riferimento a questo item, e come da documentazione,  il parametro position   è appunto  che è quello che serve sapere a te.

Una volta recuperato l'item tramite la position, fai i tuoi controlli e lanci lo startActivity.
ma come faccio ad indicare che per position 1 deve fare tale azione, mentre per position 2 deve farne un'altra?
Grazie  :-)
Domani Smetto.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Spinner
« Risposta #6 il: 23 Gennaio 2013, 16:17:18 CET »
+1
Senza offesa, sia chiaro! Però queste sono le basi della programmazione (non Android, proprio programmazione base!)...

Codice (Java): [Seleziona]
if(position == x)
{
    doSomething();
}
else
{
    doSomethingElse();
}

Codice (Java): [Seleziona]
switch (position)
                        {
                                case 0:
                                        doSomething()
                                        break;
       
                                default:
                                       doSomethingElse()
                                        break;
                        }

Giusto per postare un paio di alternative...

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Spinner
« Risposta #7 il: 23 Gennaio 2013, 16:41:40 CET »
0
Senza offesa, sia chiaro! Però queste sono le basi della programmazione (non Android, proprio programmazione base!)...

Ho già provato con if e switch per impostare la position, ad esempio con questo codice:
Codice (Java): [Seleziona]
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                public void onItemSelected(AdapterView<?> adapter, View view,int position, long id) {
                        if(position == 0)
                        {
                                Intent myIntent = new Intent(HelloSpinnerActivity.this, Activity1.class);
                                HelloSpinnerActivity.this.startActivity(myIntent);
                             
                        }
                       
                        if(position == 1)
                        {
                                Intent myIntent = new Intent(HelloSpinnerActivity.this, Newsletter.class);
                                HelloSpinnerActivity.this.startActivity(myIntent);
                             
                        }
                       
                        if(position == 2)
                        {
                                Intent myIntent = new Intent(HelloSpinnerActivity.this, ServiceDemo01Activity.class);
                                HelloSpinnerActivity.this.startActivity(myIntent);
                             
                        }
                       
                        if(position == 3)
                        {
                                Intent myIntent = new Intent(HelloSpinnerActivity.this, Newsletter.class);
                                HelloSpinnerActivity.this.startActivity(myIntent);
                             
                        }

    }

                        @Override
                        public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub
                       
                 
       };
    });
  }
}

ma il risultato è che il primo intent (con position = 0) si avvia da solo senza cliccarci sopra, dopodichè lo spinner non mostra più alcun item e cliccandoci sopra viene mostrata solo una barra bianca vuota, non vi è alcun errore nel logcat ma quando clicco sullo spinner il messaggio è il seguente:
Codice: [Seleziona]
W/InputManagerService(61): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4066cd00

ho quindi pensato che vi sia un modo specifico per assegnare ogni item tramite la position ad una specifica azione.
Grazie  :-)
Domani Smetto.

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
R: Spinner
« Risposta #8 il: 23 Gennaio 2013, 16:45:57 CET »
0
Perché la catena di if la devi fare all'onClick sull'item, non al suo select. Il primo elemento viene selezionato di default, per questo ti fa partire l'azione.

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:R: Spinner
« Risposta #9 il: 23 Gennaio 2013, 16:50:12 CET »
0
Perché la catena di if la devi fare all'onClick sull'item, non al suo select. Il primo elemento viene selezionato di default, per questo ti fa partire l'azione.

il problema è che, cito:


A spinner does not support item click events. Calling this method will raise an exception.

Better use OnItemSelectedListener() instead:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        // your code here
    }

    @Override
    public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
    }

});
Domani Smetto.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Spinner
« Risposta #10 il: 23 Gennaio 2013, 16:51:08 CET »
+1
Sul fatto che il caso 0 parta "in automatico" dipenda dal funzionamento dello spinner, che ha sempre un elemento selezionato a differenza di una lista (in genere, il primo elemento).

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Spinner
« Risposta #11 il: 23 Gennaio 2013, 17:01:27 CET »
0
Sul fatto che il caso 0 parta "in automatico" dipenda dal funzionamento dello spinner, che ha sempre un elemento selezionato a differenza di una lista (in genere, il primo elemento).
Ma esso parte in automatico senza che io clicchi sul widget dello spinner, appena lancio l'applicazione esso parte, dopodichè lo spinner non viene più visualizzato.
Come posso risolvere questo fatto?
Grazie  :-)
Domani Smetto.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Spinner
« Risposta #12 il: 23 Gennaio 2013, 17:10:06 CET »
+1
Citazione
Ma esso parte in automatico senza che io clicchi sul widget dello spinner
Ripeto: a differenza di una lista, uno spinner ha sempre un elemento selezionato. In genere è il primo. Ergo, senza bisogno di toccare il widget, parte il codice per la selezione del primo elemento  :-)

Ci sono varie "soluzioni" (virgoletto dato che questo dovrebbe essere considerato un comportamento caratteristico, e non un bug).
Una è quella di memorizzare l'ultima selezione effettuata e confrontarla con quella appena scattata: se sono uguali (o se non c'è selezione precedente), non fai scattare l'azione associata.

Offline Valeboccaccio

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGSII
  • Sistema operativo:
    Windows 7
Re:Spinner
« Risposta #13 il: 23 Gennaio 2013, 17:22:23 CET »
0
Ripeto: a differenza di una lista, uno spinner ha sempre un elemento selezionato. In genere è il primo. Ergo, senza bisogno di toccare il widget, parte il codice per la selezione del primo elemento  :-)

Ci sono varie "soluzioni" (virgoletto dato che questo dovrebbe essere considerato un comportamento caratteristico, e non un bug).
Una è quella di memorizzare l'ultima selezione effettuata e confrontarla con quella appena scattata: se sono uguali (o se non c'è selezione precedente), non fai scattare l'azione associata.

E il problema che dopo l'avvio automatico dell'azione con position = 0 lo spinner non mostra più alcun item e cliccandoci sopra viene mostrata solo una barra bianca vuota, non vi è alcun errore nel logcat ma quando clicco sullo spinner il messaggio è il seguente:
Codice: [Seleziona]
W/InputManagerService(61): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$perchè? è come posso risolverlo?  :-)
Domani Smetto.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Spinner
« Risposta #14 il: 23 Gennaio 2013, 17:26:48 CET »
0
Scusa ma se all'avvio parte il codice corrispondente alla selezione dell'item con position == 0, come fai a sapere che lo spinner non è correttamente popolato? non dovresti essere passato ad un'altra activity?