Android 微调器创建运行事件
Android Spinner creation runs event
我试图搜索答案,但很难找到要搜索的正确术语。
所以我的问题是我正在以编程方式创建一个 TableRow,其中包含 2 个带有选项的微调器。当我在那个微调器上选择一些东西时,它会在下面创建另一行,设计相同但微调器上的值不同。我的问题是,每当我创建第二行时,它就是循环中的 运行 onItemSelect。我相信循环正在发生,因为事件是 运行 在生成的新微调器上。有没有办法在我创建它时不使用它 运行 但只有当我 select 它的选项时才使用它?
不知道您对代码有什么要求,但我会在这里放一些其他的东西,请尽快post。
我创建了微调器:
spin1 = new Spinner(this);
spin1.setLayoutParams(new TableRow.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
spin1.setOnItemSelectedListener(this);
在项目 select 上我添加了这个:
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);
然后它不断地创建新行直到无穷大.. 有什么帮助吗?
谢谢。
您的 setSelection() 调用可能会调用 onItemSelect 事件,从而创建 onItemSelect 调用的无限循环,该循环也会无限调用 newRow()。
从您的代码中不清楚是否是实际情况,请提供 *.xml 布局或至少 Java 代码中创建微调器和设置的完整部分onItemSelectListener.
我试图搜索答案,但很难找到要搜索的正确术语。 所以我的问题是我正在以编程方式创建一个 TableRow,其中包含 2 个带有选项的微调器。当我在那个微调器上选择一些东西时,它会在下面创建另一行,设计相同但微调器上的值不同。我的问题是,每当我创建第二行时,它就是循环中的 运行 onItemSelect。我相信循环正在发生,因为事件是 运行 在生成的新微调器上。有没有办法在我创建它时不使用它 运行 但只有当我 select 它的选项时才使用它?
不知道您对代码有什么要求,但我会在这里放一些其他的东西,请尽快post。
我创建了微调器:
spin1 = new Spinner(this);
spin1.setLayoutParams(new TableRow.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
spin1.setOnItemSelectedListener(this);
在项目 select 上我添加了这个:
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);
然后它不断地创建新行直到无穷大.. 有什么帮助吗?
谢谢。
您的 setSelection() 调用可能会调用 onItemSelect 事件,从而创建 onItemSelect 调用的无限循环,该循环也会无限调用 newRow()。
从您的代码中不清楚是否是实际情况,请提供 *.xml 布局或至少 Java 代码中创建微调器和设置的完整部分onItemSelectListener.