2013-11-21 2 views
0

У меня есть массив Spinners, hours []. Я настраиваю его в цикле. Когда элемент выбран, мне нужно его взять и вставить в таблицу базы данных, поэтому мне нужно значение счетчика циклов в функции onItemSelected(). Как мне это сделать? Вот код:Использование значений извне onItemSelected

for(int i=0; i<36; i++) 
    { 
     hours[i].setAdapter(adapter); 
     hours[i].setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
       { 
        public void onItemSelected(AdapterView<?> adapterView, View view, int x, long l) 
        { 
         String in=String.valueOf(adapterView.getSelectedItem()); 
         DBHelper db=new DBHelper(AcceptTimetable.this, null, null, 1); 
         db.changeHour((int)Math.ceil(i/6), (i+1)%6, new Subject(in)); 
         //need to use i here, but it's giving an error 
         db.close(); 
        } 

        public void onNothingSelected(AdapterView<?> arg) 
        { 
         //do nothing 
        } 
       }); 
    } 

Кроме того, я не уверен, что строка в = String.valueOf (adapterView.getSelectedItem()); верно. Может ли кто-нибудь сказать мне, как получить выбранное значение от Spinner? Большое спасибо.

ответ

0

Попробуйте это ..

for(int i=0; i<36; i++) 
    { 
     Log.v("Select Items in Spinner",hours[i].getSelectedItem().toString().trim()); 
    } 

С этого журнала вы можете увидеть результаты.

0

Существует два способа сделать это. Проще, но менее эффективно включать hours[i].setPrompt(String.valueOf(i)), а затем извлекать это значение внутри слушателя через int index = Int.parse(((Spinner) adapterView).getPrompt()).

Более эффективным способом является расширение Spinner в отдельном классе и добавление атрибута индекса и сохранение индекса в нем.

EDIT: метод getSelectedItem() возвращает объект, тип которого соответствует один указанный вами при инициализации адаптера вы связанный с вашим AdapterView

+0

Спасибо большое! Но теперь я обновил свой код, а часы - это 2D-массив. Поэтому мне нужно передать два значения: i и j. Могу ли я как-то это сделать с помощью setPrompt()? Или есть другой способ сделать это? Я не понял, как это сделать, расширив Spinner –

+0

Я создал класс Spin, расширяя Spinner, и добавил две переменные i и j. Я изменил свой код соответственно, но теперь он дает мне ошибку на часов [0] [0] = (Spin) findViewById (R.id.ttmon1); «Ошибка раздувания класса Spin» Как это исправить? –

+0

Жаль, что я не вошел в систему два дня. Внутри класса Spin вам нужно явно написать конструктор преобразования, который преобразует объект 'View' в объект' Spin' – NitroNbg

Смежные вопросы