获取以编程方式创建的微调器的位置

时间:2012-07-30 22:19:30

标签: android eclipse spinner programmatically-created

用户在EditText中输入一个数字,该应用程序然后以编程方式创建许多微调器。当用户点击我用户界面底部的“保存”按钮时,我无法获取这些微调器的位置以保存它们。

当我尝试使用mArraySpinner.add(spinner.getSelectedItemPosition());获取位置时如下所示,我在数组中有几个空位,就像侦听器在创建时触发一样,然后它只会保存最后一个元素中的最后一个旋转器位置数组。

以下是我用以下代码创建微调器的代码:

for(int i = 1; i <= numStockTanks; i++) {
        TableRow tR = new TableRow(this);
        // creates the textView
        tV1 = new TextView(this);
        tV1.setText("Stock Tank #" + i + " size: ");

        // add spinner to row
        spinner = new Spinner(this);
        ArrayAdapter<CharSequence> adapterStockTankSize = ArrayAdapter.createFromResource(
                this, R.array.StockTankSize, android.R.layout.simple_spinner_item);
        adapterStockTankSize.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapterStockTankSize);
        spinner.setTag(i + 600);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onNothingSelected(AdapterView<?> parent) {}
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                mArraySpinner.add(spinner.getSelectedItemPosition());
            }
        });

        // add the TextView and the editText to the new TableRow
        tR.addView(tV1);
        tR.addView(spinner);

        // add the TableRow to the TableLayout
        tL.addView(tR,new TableLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    
    } // end for statement

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您每次都重新分配spinner变量,但onItemSelected方法正在使用此变量。您需要每次重新声明此微调器变量,以便该方法查找唯一的Spinner对象。

spinner = new Spinner(this);更改为final Spinner spinner = new Spinner(this);,并删除您已经spinner的任何声明。