0

スピナーアイテムを特定の整数に等しく設定しようとしています。onItemSelectedを使用してこれを実行していますが、問題は、選択したアイテムに設定されている整数に、同じ行のIntegerと同じ行にある別のEditTextを掛ける必要があることです。少し混乱させるために、私が複数回実行しようとしている行のすべてのEditTextは、リストを参照してから繰り返して、すべてを追加できるようにします。選択したスピナーアイテムと同じ行に各EditTextを取得するにはどうすればよいですかInt値があります)選択したスピナーアイテムを掛けますか?これが私がこれまでに持っているものです....混乱してすみません!

    int count = 1;
double gradeValue;
List<EditText> allEd = new ArrayList<EditText>();
List<Spinner> allSp = new ArrayList<Spinner>();


@SuppressWarnings("deprecation")
public void onClick(View v) {
    TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1);

    switch(v.getId()){
    case R.id.button1:
        if(count != 16){
            count++;

            // Create the row only when the add button is clicked
            TableRow tempRow = new TableRow(MainActivity.this);
            EditText tempText1 = new EditText(MainActivity.this);
            EditText tempText2 = new EditText(MainActivity.this);
            TextView tempTextView = new TextView(MainActivity.this);
            Spinner spinnerTemp = new Spinner(MainActivity.this);
            EditText editText1 = (EditText) findViewById(R.id.editText1);
            EditText editText2 = (EditText) findViewById(R.id.editText2);
            TextView textView3 = (TextView) findViewById(R.id.textView3);
            Spinner s = (Spinner) findViewById(R.id.spinner1);
            tempTextView.setText(count + ".");

            tempRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            tempText1.setLayoutParams(editText1.getLayoutParams());
            tempText2.setLayoutParams(editText2.getLayoutParams());
            tempTextView.setLayoutParams(textView3.getLayoutParams());
            tempText1.setInputType(InputType.TYPE_CLASS_TEXT);
            tempText2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
            tempText2.setId(count);
            spinnerTemp.setLayoutParams(s.getLayoutParams());
            spinnerTemp.setId(count);
            String options[] = { "A+", "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "D-", "F" };

            ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, options);
            spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
            spinnerTemp.setAdapter(spinnerArrayAdapter);

            allEd.add(tempText2);
            allEd.add(editText2);
            allSp.add(spinnerTemp);

            tempRow.addView(tempTextView);
            tempRow.addView(tempText1);
            tempRow.addView(tempText2);
            tempRow.addView(spinnerTemp);
            tableLayout1.addView(tempRow);
        } 
        }
        break;
    case R.id.button2:
        if(count != 1){
            count--;
            tableLayout1.removeView(tableLayout1.getChildAt(count));
        }

        break;
    case R.id.button3:
        int calculation = 0;
        double spinnerChoice = 0;
        for(int i = 0; i < allEd.size(); i++) {
            EditText totalUnits = allEd.get(i);
            try {
            int units = Integer.parseInt(totalUnits.getText().toString());

            calculation += units;
            }catch (Exception e) {
                //ignore
            }

        for(int j = 0; j < allSp.size(); j++) {
            Spinner gradeTotal = allSp.get(j);
            try {
            int grades = gradeTotal.getCount();

            }catch (Exception e) {
                //ignore
            }

        }
    }
    }

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    if (pos == 0){
        //A+
        gradeValue = 4.0;
    } else if (pos == 1){
        //A
        gradeValue = 4.0;
    } else if (pos == 2){
        //A-
        gradeValue = 3.7;
    } else if (pos == 3){
        //B+
        gradeValue = 3.3;
    } else if (pos == 4){
        //B
        gradeValue = 3.0;
    } else if (pos == 5){
        //B-
        gradeValue = 2.7;
    } else if (pos == 6){
        //C+
        gradeValue = 2.3;
    } else if (pos == 7){
        //C
        gradeValue = 2.0;
    } else if (pos == 8){
        //C-
        gradeValue = 1.7;
    } else if (pos == 9){
        //D+
        gradeValue = 1.3;
    } else if (pos == 10){
        //D
        gradeValue = 1.0;
    } else if (pos == 11){
        //D-
        gradeValue = 0.7;
    } else if (pos == 12){
        //F
        gradeValue = 0.0;
    }
}
}
4

2 に答える 2

2

アダプターをループして、一致させたい値を探します。ループのインデックスを追跡します。一致するものが見つかったら、スピナーのselectedItemをそのインデックスに設定します。

于 2012-11-02T00:35:15.623 に答える
0

これは、テーブルレイアウトを使用しているため、本来よりも難しく見えます。すべての行が類似していて、デザインに悪影響を及ぼさない場合は、リストビューの使用を検討することをお勧めします。次に、同じ行にあるものを、それらの位置だけで参照できます。パラメーターとして便利に提供されます。

しかし、このようになっているので、配列リスト内のその位置にある選択されたスピナーアイテムのインデックスを取得できます。その後、EditTextarraylistを参照できます。setTag()頭のてっぺんから、あなたが選択したスピナーアイテムにラベルとしてやっていることを考えています。次に、タグを探して、存在する場合は何かを実行します。これが私が思いついたものです。この種のタスクにもっと役立つことがわかったので、onitemselectedメソッドをdoubleを返すメソッドに変更したことに注意してください。

    private double calcGradeValue (int pos) {
         if (pos == 0){
             //A+
             gradeValue = 4.0;
         } else if (pos == 1){
             //A
             gradeValue = 4.0;
         } else if (pos == 2){
             //A-
             gradeValue = 3.7;
         } else if (pos == 3){
             //B+
             gradeValue = 3.3;
         } else if (pos == 4){
             //B
             gradeValue = 3.0;
         } else if (pos == 5){
             //B-
             gradeValue = 2.7;
         } else if (pos == 6){
             //C+
             gradeValue = 2.3;
         } else if (pos == 7){
             //C
             gradeValue = 2.0;
         } else if (pos == 8){
             //C-
             gradeValue = 1.7;
         } else if (pos == 9){
             //D+
             gradeValue = 1.3;
         } else if (pos == 10){
             //D
             gradeValue = 1.0;
         } else if (pos == 11){
             //D-
             gradeValue = 0.7;
         } else if (pos == 12){
             //F
             gradeValue = 0.0;
         }
        return gradeValue;
    }

    public void spinnerLoop() {
        for(int i = 0; i < allSp.size(); i++) {
            if (allSp.get(i).getTag().toString() == "TAGGED!") {
                double gradeValue = calcGradeValue(allSp.get(i).getSelectedItemPosition()); 
                double calculation = (gradeValue) * (Integer.parseInt(allEd.get(i).getText().toString()));
//              do something with your calculation double
            }
        }
    }
于 2012-11-02T03:31:16.667 に答える