Autore Topic: Spinner e dato visualizzato di default  (Letto 1072 volte)

Offline andromeda

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    tablet Mediacom 850i
  • Sistema operativo:
    Windows XP
Spinner e dato visualizzato di default
« il: 27 Giugno 2012, 18:11:47 CEST »
0
Ciao a tutti,
continuo ad andare avanti con con la mia app cocktail, ma mi trovo ad affrontare un ultimo problema (spero) per finire la prima versione...:
sia nella pagina di inserimento che di modifica del cocktail ho inserito uno spinner che ho collegato ad un arry inserito nelle risorse res/values/strings.xml che espone un elenco del tipo di cocktail : Aperitivo, Digestivo, Pomeridiano...
Funziona tutto alla perfezione se non che per la pagina di modifica dove alla sua apertura vorrei che lo spinner mostrasse il valore del database e non il primo valore dell' elenco.

L'unica cosa che sono riuscito a trovare è stata la funzione setSelection(int) che ruchiede l'ordinale dell'array e non il valore. Ora non avevdo trovato altro, anche se storcendo il naso ho creato un enum e ho cercato di impostare il setSelection confrontando il valore estratto dal data base con l'enum ma con scarsi risultati è come sel il confronto desse sempre un valore falso e pertanto la variabile rimane sempre con il valore iniziale.....

Le domande sono due:
1) esiste un modo + diretto al posto di setSelection per avere l'effetto da me descritto?
2) che errore faccio che non riesco a risolvere neanche con enum?

di seguito il codice:
Array:
Codice (XML): [Seleziona]
<string-array name="tipo_cocktel">
        <item>Digestivo</item>
        <item>Aperitivo</item>
        <item>Pomeridiano</item>
</string-array>
 
Spinner:
Codice (XML): [Seleziona]
       <Spinner              
               android:id="@+id/tipoI"
               android:entries="@array/tipo_cocktel"
               android:layout_marginLeft="5dip"
               android:textAppearance="?android:attr/textAppearanceLarge"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:gravity="center_horizontal"
               android:textSize="10dp"
               android:textStyle="bold"
               android:padding="1dip">
        </Spinner>


Parte del codice incriminata:
Codice (Java): [Seleziona]
public class Modifica  extends Activity {
        String id = "";
        enum eTipo {Digestivo,Aperitivo,Pomeridiano};
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
       
        final Intent miaIntentD = new Intent( this, Demo.class);
        setContentView(R.layout.modifica);  
        //Recuperiamo il parametro passato dall'altra Activity
        String idmod = getIntent().getExtras().getString("ParametroID");
 
        //apriamo il db
        MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();
       
        //**************************************************************************************************
        //VISUALIZZAZIONE DEI DATI
        //**************************************************************************************************
       
        //Recuperimo i dati chiamando la query con il parametro recuperato prima
        Cursor d=db.fetchDettaglio (idmod, MyDatabase.ProductsMetaData.ID);
        d.moveToNext();
 
        //Richiamo tutti i campi
        TextView idTx = (TextView) findViewById(R.id.idE);
        EditText nomeTx = (EditText) findViewById(R.id.nomeI);
        EditText famigliaTx = (EditText) findViewById(R.id.famigliaI);
        Spinner tipoTx = (Spinner) findViewById(R.id.tipoI);
        EditText composizioneTx = (EditText) findViewById(R.id.composizioneI);
        EditText tipobicchiereTx = (EditText) findViewById(R.id.tipobicchiereI);
        EditText preparazioneTx = (EditText) findViewById(R.id.preparazioneI);
        EditText decorazioneTx = (EditText) findViewById(R.id.decorazioneI);
        //Recupero i valori delle colonne
        id = d.getString(0);
        String nome = d.getString(1);
        String famiglia = d.getString(2);
        String tipo = d.getString(3);
        String composizione = d.getString(4);
        String tipobicchiere = d.getString(5);
        String preparazione = d.getString(6);
        String decorazione = d.getString(7);
       
       
        //Inserisco i dati nei campi
        idTx.append(id);
        nomeTx.append(nome);
        famigliaTx.append(famiglia);
        Toast.makeText(
        this,
        "Valore costruito: " + tipo ,
        Toast.LENGTH_LONG
        ).show();

       
         int i= eTipo.Digestivo.ordinal();
                if (tipo ==eTipo.Digestivo.name())
                 i=eTipo.Digestivo.ordinal();
         else if (tipo == eTipo.Aperitivo.name())
                 i=eTipo.Aperitivo.ordinal();
         else if (tipo == eTipo.Pomeridiano.name())
                 i=eTipo.Pomeridiano.ordinal();
         
         Toast.makeText(
                        this,
                        "Valore costruito: " + tipo + "  " + eTipo.Aperitivo.name(),
                        Toast.LENGTH_LONG
                        ).show();
        tipoTx.setSelection(i);
        composizioneTx.append(composizione);
        tipobicchiereTx.append(tipobicchiere);
        preparazioneTx.append(preparazione);
        decorazioneTx.append(decorazione);
 
        //Chiudo il DB
        db.close();

Un grazie in anticipo  :-)

Offline andromeda

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    tablet Mediacom 850i
  • Sistema operativo:
    Windows XP
Re:Spinner e dato visualizzato di default
« Risposta #1 il: 27 Giugno 2012, 18:30:33 CEST »
0
Alla seconda domanda mi sono risposto da solo:
utilizzando compareTo funziona
Codice (Java): [Seleziona]
      int i= eTipo.Digestivo.ordinal();
                if (tipo.compareTo(eTipo.Digestivo.name())== 0)
                 i=eTipo.Digestivo.ordinal();
         else if (tipo.compareTo(eTipo.Aperitivo.name())== 0)
                 i=eTipo.Aperitivo.ordinal();
         else if (tipo.compareTo(eTipo.Pomeridiano.name())== 0)
                 i=eTipo.Pomeridiano.ordinal();

rimane comunque la prima domanda....