1

ユーザーがに番号を入力するEditTextと、アプリはプログラムでその数のスピナーを作成します。ユーザーがUIの下部にある[保存]ボタンをクリックしたときに、これらのスピナーの位置を取得して保存するのに問題があります。

次のように位置を取得しようとすると、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

ご協力いただきありがとうございます

4

1 に答える 1

0

spinner毎回変数を再割り当てしていますが、onItemSelectedメソッドはこの変数を使用しています。Spinnerメソッドが一意のオブジェクトを検索するように、毎回このスピナー変数を再宣言する必要があります。

に変更spinner = new Spinner(this);し、すでにfinal Spinner spinner = new Spinner(this);宣言しているものをすべて削除します。spinner

于 2012-07-30T22:25:41.937 に答える