2012-05-17 3 views
47

Ich habe 1-50 Datensätze in der Datenbank. Ich hole diese Daten mit dem Cursor und setze diese Werte mit dem Simple Cursor Adapter auf Spinner. Nun, was ich brauche ist, ich möchte einen Wert sagen 39. Wert als Standard. Aber nicht durch seine Position möchte ich durch seinen Wert festgelegt werden.Wie setze ich Spinner-Standard durch seinen Wert statt Position?

Ich weiß, wie die Spinner Standard durch seine Position setzen

spinner.setSelection(39) 

die Spinner auf diesen Wert gesetzt.

Aber ich hatte keine Ahnung über die Einstellung der Spinner Standard durch seinen Wert (Text) in der Datenbank. Ich kenne die Werte in der Datenbank. Für zB "Bücher" ist einer der Werte im Spinner. Ich muss den Spinner Standard als Bücher setzen.

Gibt es eine Möglichkeit, dies zu tun?

+1

Es scheint, als ob alles, was Sie benötigen einen Wert aus der db zu holen. Oder verstehe ich etwas falsch? – keyser

+0

@keyser Nein .. Ich holte Wert von der Datenbank und setzte ihn zum Spinner unter Verwendung des einfachen Cursoradapters. Jetzt ist die Sache, dass ich einen Wert des Drehbeschleunigers als Voreinstellungswert durch seinen Wert nicht durch seine Position einstellen muss. Habe ich erklärt klar – GoCrazy

+0

Nein, es scheint immer noch, dass Sie nur den Wert von db selbst abrufen müssen und setzen Sie es mit pinner.setSelection (somepositionvalue). – Orest

Antwort

14

Schließlich sehen, löste ich das Problem, indem folgende Weise verwendet wird, in dem die Position des Spinners sein kann

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

Aufruf der Methode durch die Zeichenfolge erhalten

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

Ich hoffe, es wird für einige helfen ..

+0

Vielleicht eine etwas schlankere und elegantere Version könnte so aussehen: public class SpinnerHelper { public static int getPosition (String displayText, String fieldName, Cursorcursor) { int position = -1; cursor.moveToFirst(); while (cursor.moveToNext()) { Zeichenfolge text = cursor.getString (cursor.getColumnIndex (fieldName)); wenn (Text.gleich (displayText)) { position = cursor.getPosition(); Pause; } } Rückstellposition; } } –

97

Wenn Sie die Drehfeldwerte auf arraylist oder array einstellen, können Sie die Auswahl des Drehfelds mithilfe des Index des Werts festlegen.

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

den Link How to set selected item of Spinner by value, not by position?

+1

Danke für deine Antwort .. Ich kenne es möglich mit ArrayAdapter .. Ist das gleiche möglich mit Simple Cursor Adapter? – GoCrazy

+0

@Vino Ja, überprüfen Sie die folgende Antwort: http://StackOverflow.com/a/11667045/293280 –

+2

Dies ist die echte Antwort. –

8

Vergleich Zeichenfolge mit dem Wert aus dem Index

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

das ist, wie ich es tat:

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