2016-02-11 4 views
1

Я попытался найти ответ, но трудно найти правильные условия для поиска. Итак, моя проблема в том, что я создаю программно TableRow с двумя прядильщиками с выбором на нем. Когда я выбираю что-то на этом счетчике, он создает еще одну строку ниже с тем же дизайном, но с другими значениями на прядильщиках. Моя проблема в том, что всякий раз, когда я создаю вторую строку, он запускает onItemSelect в цикле. Цикл, я считаю, происходит потому, что событие запускается на новом счетчике, который генерируется. Есть ли способ, чтобы он не работал, когда я его создавал, но только когда я выбираю параметры на нем?Android Spinner creation запускает событие

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

Я создаю вертушку:

spin1 = new Spinner(this); 
spin1.setLayoutParams(new TableRow.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT)); 
spin1.setOnItemSelectedListener(this); 

По вопросу выбора добавить это:

TableRow tableRowNow = (TableRow) parent.getParent(); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
          this, android.R.layout.simple_spinner_item,   indiceSpinnerArray1); 
         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner sItems = (Spinner) tableRowNow.getChildAt(0); 
sItems.setAdapter(adapter); 
sItems.setSelection(position); 


ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(
          this, android.R.layout.simple_spinner_item,  spinnerArray2); 
         adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner sItems11 = (Spinner) tableRowNow.getChildAt(1); 
sItems11.setAdapter(adapter1); 
sItems11.setSelection(1); 
sItems11.setEnabled(false); 

newRow(); 

TableLayout tabLayoutTemp1 = (TableLayout) tableRowNow.getParent(); 
int numRowTemp = tabLayoutTemp1.indexOfChild(tableRowNow); 

TableRow secondTabRow = (TableRow) tabLayoutTemp1.getChildAt(numRowTemp + 1); 
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(
          this, android.R.layout.simple_spinner_item,  spinnerArray3); 
         adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner sItems2 = (Spinner) secondTabRow.getChildAt(1); 
sItems2.setAdapter(adapter2); 

А потом он просто продолжает создавать новые строки в бесконечность .. любая помощь?

спасибо.

ответ

0

Возможно, что вызовы setSelection() вызывают событие onItemSelect, тем самым создавая бесконечный цикл вызовов onItemSelect, который также вызывает newRow() бесконечно.

Непонятно из вашего кода, если это фактический случай, пожалуйста, укажите макет * .xml или, по крайней мере, полную часть вашего Java-кода, где вы создаете счетчик, и установите onItemSelectListener.

+0

Вы были правы, я переписал код и обнаружил, что проблема заключается в вызове onItemSelect при каждом создании spinner. Решила его, используя приемы setTag и getTag. Спасибо за вашу помощь. – Morce

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