如何从编程创建的微调器中获取位置

时间:2012-07-28 12:32:13

标签: android spinner

当用户在edittext中输入数字时,我的应用程序会创建并显示许多微调器。然后,用户将从每个微调器中选择一个项目,然后单击一个保存按钮。我已经在互联网上看了一眼,却一直无法找到从微调器中检索位置的方法。以下是我创建微调器的方法:

//numStockTanks is the number of spinners to be created
numStockTanks = Integer.parseInt(numOfStockTanks.getText().toString());             
    // creates all the fields
    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> adapterStockTankSize2 = ArrayAdapter.createFromResource(
                this, R.array.StockTankSize, android.R.layout.simple_spinner_item);
        adapterStockTankSize2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapterStockTankSize2);
        spinner.setId(1000 + i);

        // 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
} // end getNumberCreateSpinner ()

我尝试了几种不同的方法来获得微调器的位置,但我似乎无法弄明白。这是我现在拥有的:

ArrayList<Integer> mArraySpinner = new ArrayList<Integer>();
for (int i = 0; i < numStockTanks; i++) {
           spinner = (Spinner) findViewById(1000 + i);
           if (spinner.getSelectedItemPosition() == 1) {
               mArraySpinner.add(100);
           } else if (spinner.getSelectedItemPosition() == 2) {
               mArraySpinner.add(200);
           } else if (spinner.getSelectedItemPosition() == 3) {
               mArraySpinner.add(210);
          } else if (spinner.getSelectedItemPosition() == 4) {
               mArraySpinner.add(295);
           } else if (spinner.getSelectedItemPosition() == 5) {
               mArraySpinner.add(400);
          } else mArraySpinner.add(0);
    } // end for statement

感谢您的帮助

编辑: 在第一个答案后更新到我的最新尝试

修改编辑: 当我调试行“spinner =(Spinner)findViewById(1000 + i);”它说null,所以我知道我没有正确地指向我的微调器这是我需要帮助的

编辑:碰撞

2 个答案:

答案 0 :(得分:1)

您正在使用1000++作为微调器ID。当你试图让微调器进入时,你可以用100++检查它。

请更新您在代码中写入的if条件。 将100更改为1000

我已经更改了代码中的示例代码。

spinner = (Spinner) findViewById(1000 + i);
       if (spinner.getId().equals("1000")) {
           mArraySpinner.add(spinner.getSelectedItemPosition());
       } 
       else if(....){....}

答案 1 :(得分:0)

我在创建微调器时(在创建微调器的循环内)设置onItemSelectedListener,并使用它将值设置为一个类字段的数组。

mArraySpinner = new Array<Integer>[numStockTanks];
for(int i = 1; i <= numStockTanks; i++) { 

      // code to set spinner adapter, etc.

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
       mArraySpinner[i] = spinner.getSelectedItemPosition();
    }
});