Как установить Spinner Default по его значению вместо позиции?

У меня есть 1-50 записей в базе данных. Я извлекаю эти данные с помощью курсора и устанавливаю эти значения в Spinner с помощью Simple Cursor Adapter. Теперь мне нужно, чтобы я установил одно значение, скажем, 39-е значение по умолчанию. Но не по своей позиции, которую я хочу установить по ее значению.

Я знаю, как установить значение параметра spinner по его позиции

   spinner.setSelection(39) 

задает значение счетчика для этого значения.

Но я не имел никакого представления о том, чтобы установить значение параметра spinner по его значению (тексту) в базе данных. Я знаю значения в базе данных. Например, "книги" являются одним из значений в счетчике. Мне нужно установить значение по умолчанию в качестве книг.

Есть ли способ сделать это?

Ответ 1

Наконец, я решил проблему, используя следующий способ, в котором положение счетчика можно получить по его строке

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

Вызов метода

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

Я надеюсь, что это поможет кому-то...

Ответ 2

Если вы устанавливаете значения счетчика с помощью arraylist или array, вы можете установить выбор счетчика с помощью индекса значения.

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

см. ссылку Как установить выбранный элемент Spinner по значению, а не по позиции?

Ответ 3

Сравнить строку со значением из индекса

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

Ответ 4

вот как я это сделал:

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