2012-05-17 14 views
47

Ho 1-50 record nel database. Sto recuperando quei dati usando il cursore e impostando quei valori su Spinner usando Simple Cursor Adapter. Ora quello che mi serve è che voglio impostare un valore per dire il 39 ° valore come predefinito. Ma non per la sua posizione voglio fissare il suo valore.Come impostare lo Spinner predefinito in base al valore anziché alla posizione?

so come impostare il default filatore dalla sua posizione

spinner.setSelection(39) 

imposterà il filatore a quel valore.

Ma non avevo idea di come impostare il valore dello spinner in base al suo valore (testo) nel database. Conosco i valori nel database. Ad esempio, "libri" è uno dei valori nel filatore. Ho bisogno di impostare il filatore di default come libri.

Esiste un modo per farlo?

+1

Sembra come se tutto ciò che serve è quello di recuperare un valore dal db. O sto fraintendendo qualcosa? – keyser

+0

@keyser No .. Ho recuperato il valore dal database e l'ho impostato su spinner utilizzando un semplice adattatore per il cursore. Ora la cosa è che devo impostare un valore dello spinner come predefinito per il suo valore non per la sua posizione .. ho spiegato chiaramente – GoCrazy

+0

No, sembra ancora che devi solo ottenere il valore da db stesso e impostarlo con pinner.setSelection (somepositionvalue). – Orest

risposta

14

Infine, ho risolto il problema utilizzando modo seguente, in cui la posizione del filatore può essere ottiene dalla relativa stringa

private int getPostiton(String locationid,Cursor cursor) 
{ 
    int i; 
    cursor.moveToFirst(); 
    for(i=0;i< cursor.getCount()-1;i++) 
    { 

     String locationVal = cursor.getString(cursor.getColumnIndex(RoadMoveDataBase.LT_LOCATION)); 
     if(locationVal.equals(locationid)) 
     { 
      position = i+1; 
      break; 
     } 
     else 
     { 
      position = 0; 
     } 
     cursor.moveToNext(); 
    } 

chiamata al metodo

Spinner location2 = (Spinner)findViewById(R.id.spinner1); 
    int location2id = getPostiton(cursor.getString(3),cursor); 
    location2.setSelection(location2id); 

Spero che possa essere d'aiuto per qualcuno ..

+0

Forse una versione un po 'più snella ed elegante potrebbe essere questa: public class SpinnerHelper { public static int getPosition (String displayText, String fieldName, Cursor cursor) { int position = -1; cursor.moveToFirst(); while (cursor.moveToNext()) { Stringa text = cursor.getString (cursor.getColumnIndex (fieldName)); se (testo.equals (displayText)) { position = cursor.getPosition(); interruzione; } } posizione di ritorno; } } –

97

Se si impostano i valori degli spinner di arraylist o array, è possibile impostare la selezione dello spinner utilizzando l'indice del valore.

String myString = "some value"; //the value you want the position for 

ArrayAdapter myAdap = (ArrayAdapter) mySpinner.getAdapter(); //cast to an ArrayAdapter 

int spinnerPosition = myAdap.getPosition(myString); 

//set the default according to value 
spinner.setSelection(spinnerPosition); 

vedere il link How to set selected item of Spinner by value, not by position?

+1

Grazie per la tua risposta .. So che è possibile utilizzare ArrayAdapter .. È lo stesso possibile con Simple Cursor Adapter ?? – GoCrazy

+0

@Vino Sì, controlla la risposta seguente: http://stackoverflow.com/a/11667045/293280 –

+2

Questa è la vera risposta. –

8

Confronta stringa con valore dall'indice

private void selectSpinnerValue(Spinner spinner, String myString) 
    { 
     int index = 0; 
     for(int i = 0; i < spinner.getCount(); i++){ 
      if(spinner.getItemAtPosition(i).toString().equals(myString)){ 
       spinner.setSelection(i); 
       break; 
      } 
     } 
    } 
1

questo è come ho fatto:

String[] listAges = getResources().getStringArray(R.array.ages); 

     // Creating adapter for spinner 
     ArrayAdapter<String> dataAdapter = 
       new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listAges); 

     // Drop down layout style - list view with radio button 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // attaching data adapter to spinner 
     spinner_age.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.spinner_icon), PorterDuff.Mode.SRC_ATOP); 
     spinner_age.setAdapter(dataAdapter); 
     spinner_age.setSelection(0); 
     spinner_age.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       String item = parent.getItemAtPosition(position).toString(); 

       if(position > 0){ 
        // get spinner value 
        Toast.makeText(parent.getContext(), "Age..." + item, Toast.LENGTH_SHORT).show(); 
       }else{ 
        // show toast select gender 
        Toast.makeText(parent.getContext(), "none" + item, Toast.LENGTH_SHORT).show(); 
       } 
      } 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
      } 
     });