1

ユーザーが編集テキストに数字を入力すると、アプリはその数のスピナーを作成して表示します。次に、ユーザーは各スピナーからアイテムを選択し、保存ボタンをクリックします。インターネットで調べましたが、スピナーから位置を取得する方法を見つけることができませんでした。スピナーの作成方法は次のとおりです。

//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と表示されているので、スピナーを正しく指していないことがわかります。これは私が助けを必要としているものです

編集:バンプ

4

2 に答える 2

1

1000++スピナーIDに使用しています。スピナーポージングを取得しようとしている間は、 でチェックし100++ます。

コードに記述されている if 条件を更新してください。100に変更1000

私はあなたのコードから以下のサンプルコードを変更して入れました。

spinner = (Spinner) findViewById(1000 + i);
       if (spinner.getId().equals("1000")) {
           mArraySpinner.add(spinner.getSelectedItemPosition());
       } 
       else if(....){....}
于 2012-07-28T12:38:53.970 に答える
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();
    }
});
于 2012-07-28T12:49:53.637 に答える