Autore Topic: Salvare selezione utente da spinner  (Letto 1008 volte)

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Salvare selezione utente da spinner
« il: 19 Aprile 2011, 13:03:35 CEST »
0
Ciao a tutti!
Sono nuovo del forum e soprattutto della programmazione android, quindi vi prego di perdonarmi per la domanda banale.
Ho creato due spinner che contengono gli stessi item: uno è lo spinner s1 (luogo di partenza) ed uno è lo spinner s2 (luogo di arrivo).
A questo punto vorrei inserire in due variabili intere distinte la posizione dell'item che l'utente ha selezionato da entrambi gli spinner.
Ho provato ad usare:

Codice: [Seleziona]
int partenza=s1.getSelectedItemPosition();
ma naturalmente mi salva sempre 0 perché suppongo di non aver inserito un meccanismo che dia il tempo all'utente di fare le sue scelte... magari un bel button "Conferma" da premere dopo la scelta dei due campi per salvare gli item selezionati... solo dopo andrei quindi a leggere con il metodo getSelectedItemPosition().
Come posso fare a realizzare una cosa del genere? So che è più semplice a farsi che a dirsi ma ancora sono proprio alle basi di android... spero possiate/vogliate aiutarmi  ;-) GRAZIE!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Salvare selezione utente da spinner
« Risposta #1 il: 19 Aprile 2011, 13:33:04 CEST »
0
C'è da creare un listener

Codice (Java): [Seleziona]
public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {
      Toast.makeText(parent.getContext()), "The choice is " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}

E associarlo allo spinner

Codice (Java): [Seleziona]
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

Ripreso direttamente dal tutorial HELLO SPINNER : Spinner | Android Developers
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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:Salvare selezione utente da spinner
« Risposta #2 il: 19 Aprile 2011, 13:35:18 CEST »
0
crei un bottone conferma, e quando l'utente lo preme, usando un OnClickListener sul bottone ti prendi i due indici degli spinner!
non ho memoria del codice esatto, ma ti basta fare (circa)
Codice (Java): [Seleziona]
button.setOnClickListener(new OnClickListener{
@Override
onClick(View v){
int partenza=s1.getSelectedItemPosition();
int arrivo=s2.getSelectedItemPosition();
//salvati partenza e arrivo da qualche parte (db,file,variabile)
//prosegui con il tuo lavoro che va eseguito quando l'utente clicca il bottone
}

});
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Salvare selezione utente da spinner
« Risposta #3 il: 19 Aprile 2011, 15:40:40 CEST »
0
Ciao e grazie per le risposte! La soluzione che più si avvicina alla mia idea è quella di Nicola_D. L'idea del button mi piace... mi interessa fare in modo che l'utente inserisca le sue preferenze e poi prema il button per "salvarle" ... per adesso il codice è questo:

Codice: [Seleziona]
Button confirmButton = (Button) findViewById(R.id.button1);

        confirmButton.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                               
                                int partenza=s1.getSelectedItemPosition();
                                int arrivo=s2.getSelectedItemPosition();       
                               
                        }


                });

Ho dovuto inserire "final" davanti alla definizione dei miei spinner altrimenti mi dava errore.
Una volta acqusite le scelte dell'utente, dovrei passare ad un'activity successiva portandomi dietro questi valori... dovrei fare dei confronti con altri valori.. come posso fare, ad esempio, se volessi inserirli in una variabile (int) ed in seguito stamparli? grazie mille!! siete gentilissimi! ;-)

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:Salvare selezione utente da spinner
« Risposta #4 il: 19 Aprile 2011, 16:29:54 CEST »
0
devi inserire i due int nell'intent che poi usi per richiamare l'activity successiva.
Poi dall'activity dopo ti prendi gli int e li usi come piu ti piace
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Salvare selezione utente da spinner
« Risposta #5 il: 19 Aprile 2011, 19:30:24 CEST »
0
Sembra molto semplice a dirsi... suppongo anche a farsi.. Android mi sta stupendo come grado di apprendimento.. in passato ho sviluppato su Symbian... mani nei capelli! Cmq.. c'è mica un tutorial che posso seguire per capire come concatenare due activity e fare in modo che la prima passi parametri alla seconda? In questo momento i due interi (partenza e arrivo) sono attributi di un metodo void che quindi non restituisce nulla... cosa mi consigli di fare per renderli disponibili al di fuori di questo metodo al fine di passarli all'activity successiva? Scusate ancora le domande da apprendista e grazie per l'aiuto!!!  O:-)

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:Salvare selezione utente da spinner
« Risposta #6 il: 19 Aprile 2011, 20:17:35 CEST »
0
Sembra molto semplice a dirsi... suppongo anche a farsi.. Android mi sta stupendo come grado di apprendimento.. in passato ho sviluppato su Symbian... mani nei capelli! Cmq.. c'è mica un tutorial che posso seguire per capire come concatenare due activity e fare in modo che la prima passi parametri alla seconda? In questo momento i due interi (partenza e arrivo) sono attributi di un metodo void che quindi non restituisce nulla... cosa mi consigli di fare per renderli disponibili al di fuori di questo metodo al fine di passarli all'activity successiva? Scusate ancora le domande da apprendista e grazie per l'aiuto!!!  O:-)
per avere le variabili fuori dal metodo, basta che le metti globali nell'activity, come si fa in java...
per passare i valori ad un altra activity puoi leggere qui [facile] Passaggio di dati tra un'activity ed un'altra - Android Developers Italia
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Salvare selezione utente da spinner
« Risposta #7 il: 19 Aprile 2011, 21:04:05 CEST »
0
Citazione
per avere le variabili fuori dal metodo, basta che le metti globali nell'activity, come si fa in java...

Ah ok.. dovevo immaginarmelo..  :-) chissà perché penso sempre che sia più difficile del normale..  :-P

Citazione
per passare i valori ad un altra activity puoi leggere qui [facile] Passaggio di dati tra un'activity ed un'altra - Android Developers Italia

Ottimo! E' proprio quello che mi serviva! Ti ringrazio tantissimo! Metto il risolto al topic e ti auguro una buona serata. Alla prossima!  ;-)

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Salvare selezione utente da spinner
« Risposta #8 il: 26 Aprile 2011, 10:15:36 CEST »
0
Ragazzi scusate ma sono di nuovo bloccato..
Citazione
per avere le variabili fuori dal metodo, basta che le metti globali nell'activity, come si fa in java...
Ci ho provato ma mi dà questo errore: "Cannot refer to a non-final variable partenza inside an inner class defined in a different method"
Il problema è che le mie variabili intere partenza e arrivo non possono essere definite fuori dal metodo perché se lo faccio mi impone che siano final.. ma se le imposto final, dentro onClick, non posso modificarle... è un gatto che si morde la coda.. penso sia un problema di java con gli incapsulamenti... questo è il mio codice attuale:

Codice: [Seleziona]
package hello.spinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;

public class HelloSpinner extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       
        final Spinner s1 = (Spinner) findViewById(R.id.spinner1);
        ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this, R.array.departure, android.R.layout.simple_spinner_item);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s1.setAdapter(adapter1);
       
        final Spinner s2 = (Spinner) findViewById(R.id.spinner2);
        ArrayAdapter adapter2 = ArrayAdapter.createFromResource(this, R.array.arrivals, android.R.layout.simple_spinner_item);
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s2.setAdapter(adapter2);
       
        Button confirmButton = (Button) findViewById(R.id.button1);
        final TextView outputView = (TextView) findViewById(R.id.departuresResult);
        final TextView outputView2 = (TextView) findViewById(R.id.arrivalsResult);
       
        confirmButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                                int partenza=s1.getSelectedItemPosition()+1;
                                int arrivo=s2.getSelectedItemPosition()+1;
                                outputView.setText(String.format("ID Stazione di partenza: %1$d", partenza));
                                outputView2.setText(String.format("ID Stazione di arrivo: %1$d", arrivo));
                }
                });
               
       
        }
   
}

In questo modo funziona: cliccando sul button riesco a visualizzare le posizioni delle selezioni fatte sugli spinner.
Quello che voglio fare però è, una volta premuto il tasto, passare ad un'activity successiva passandogli però anche gli interi partenza e arrivo che mi servono per confronti successivi... non è che se lascio quelle due variabili dentro onClick invece che come globali, poi non posso accedervi nell'activity successiva? Come potrei cambiare la chiamata di onClick in modo da realizzare quello che mi serve? Grazie a tutti!!