2012-05-17 24 views
47

Mam 1-50 rekordów w bazie danych. Pobieram te dane za pomocą kursora i ustawię te wartości na Spinner za pomocą Simple Cursor Adapter. Teraz to, czego potrzebuję, to ustawić jedną wartość, aby domyślnie była to 39-ta wartość. Ale nie przez swoją pozycję chcę ustawić według jej wartości.Jak ustawić domyślne ustawienie pokrętła zamiast jego wartości zamiast pozycji?

wiem jak ustawić domyślny pokrętła przez jego pozycję

spinner.setSelection(39) 

będzie ustawić pokrętła do tej wartości.

Ale nie miałem pojęcia o ustawieniu domyślnej wersji spinnera na wartość (tekst) w bazie danych. Znam wartości w bazie danych. Na przykład "książki" są jedną z wartości w grze. Muszę ustawić domyślny spinner jako książki.

Czy jest jakiś sposób na zrobienie tego?

+1

Wydaje się, że wszystko, co potrzebne jest, aby pobrać wartość z db. Czy coś nie rozumiem? – keyser

+0

@keyser Nie. Pobrałem wartość z bazy danych i ustawiłem ją na pokrętło za pomocą prostego adaptera kursora. Teraz chodzi o to, że muszę ustawić jedną wartość przędzarki jako domyślną przez jej wartość, a nie przez jego położenie. wyraźnie – GoCrazy

+0

Nie, nadal wydaje się, że po prostu trzeba uzyskać wartość z db sam i ustawić go z pinner.setSelection (somepositionvalue). – Orest

Odpowiedz

14

W końcu rozwiązał problem stosując następujący sposób, w którym pozycja turbinki może dostać jego ciąg

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

wywołanie metody

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

Mam nadzieję, że pomoże to komuś ..

+0

Może nieco szczuplejsze i bardziej elegancka wersja może wyglądać następująco: public class SpinnerHelper {public static int getPosition (String displayText, String fieldName, Kursor Kursor) { int position = -1; cursor.moveToFirst(); while (cursor.moveToNext()) { Tekst ciągu = cursor.getString (cursor.getColumnIndex (fieldName)); jeśli (tekst.equals (displayText)) { position = cursor.getPosition(); przerwa; } } Pozycja powrotu; } } –

97

Jeśli ustawiasz wartości tarczy przez arraylist lub array, możesz ustawić pokrętło za pomocą indeksu wartości.

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

zobaczyć link How to set selected item of Spinner by value, not by position?

+1

Dziękuję za odpowiedź. Wiem, że jest to możliwe za pomocą ArrayAdapter. Czy to samo możliwe dzięki Simple Cursor Adapter? – GoCrazy

+0

@Vino Tak, sprawdź następującą odpowiedź: http://stackoverflow.com/a/11667045/293280 –

+2

To jest prawdziwa odpowiedź. –

8

Porównaj ciąg o wartości od indeksu

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

to jak to zrobiłem:

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