我试图搜索答案,但很难找到正确的搜索字词。 所以我的问题是我正在以编程方式创建一个带有2个微调器的TableRow,并选择它。当我在该微调器上选择一些东西时,它会在下面创建另一行,但设计相同,但在微调器上有不同的值。我的问题是每当我创建第二行时,它就会在循环中运行onItemSelect。我相信循环正在发生,因为事件正在生成的新微调器上运行。有没有办法在我创建时不运行它,但只有当我选择它上面的选项时才会运行?
不知道你需要从代码中得到什么,但我会在这里放一些其他的东西只是要求我尽快发布。
我创建了微调器:
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 :(得分:0)
你的setSelection()调用可能正在调用onItemSelect事件,从而创建onItemSelect调用的无限循环,它也无限地调用newRow()。
从您的代码中不清楚这是否是实际情况,请提供* .xml布局或至少创建微调器的Java代码的完整部分并设置onItemSelectListener。