0

我有一个 ArrayList,其中引用了动态添加的 EditTexts 的输入。我迭代 ArrayList 以便我可以获取 EditTexts 的所有值并将它们加在一起。但是,我的 layout.xml 中确实有一个非动态添加的 EditText。

问题是,每当我单击我的计算按钮并且屏幕上唯一的 EditText 是已经布局的 EditText 并且它的输入为 1 或任何其他数字时,我的计算按钮将总输入显示为 0。每当我添加 1 或更多editTexts动态,总输入包括我点击计算按钮后已经布局的EditText。

即使唯一的输入是非动态的editText,我也需要获得正确的总输入。

int count = 1;
double gradeValue;
List<EditText> allEd = new ArrayList<EditText>();
List<Spinner> allSp = new ArrayList<Spinner>();
EditText editText1;
EditText editText2;
EditText tempText1;
EditText tempText2;
Spinner spinner1;
Spinner spinnerTemp;



@Override 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button buttonAdd = (Button) findViewById(R.id.button1);
    Button buttonDel = (Button) findViewById(R.id.button2);
    Button buttonCalc = (Button) findViewById(R.id.button3);

    spinner1 = (Spinner) findViewById(R.id.spinner1);
    String[] options = new String[13]; 
    options[0] = "A+";
    options[1] = "A";
    options[2] = "A-";
    options[3] = "B+";
    options[4] = "B";
    options[5] = "B-";
    options[6] = "C+";
    options[7] = "C";
    options[8] = "C-";
    options[9] = "D+";
    options[10] = "D";
    options[11] = "D-";
    options[12] = "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
    spinner1.setAdapter(spinnerArrayAdapter);

    allEd.add(editText2);
    allSp.add(spinner1);

    buttonAdd.setOnClickListener(this);
    buttonDel.setOnClickListener(this);
    buttonCalc.setOnClickListener(this);


}


@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);
            editText1 = (EditText) findViewById(R.id.editText1);
            editText2 = (EditText) findViewById(R.id.editText2);
            TextView textView3 = (TextView) findViewById(R.id.textView3);
            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(spinner1.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);
            allSp.add(spinnerTemp);



            tempRow.addView(tempTextView);
            tempRow.addView(tempText1);
            tempRow.addView(tempText2);
            tempRow.addView(spinnerTemp);
            tableLayout1.addView(tempRow);
        } else {
            final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update
            alertDialog.setTitle("Error");
            alertDialog.setMessage("You can only have up to 16 rows!");

            alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    alertDialog.dismiss();
                }
            });

            alertDialog.show();
        }
        break;




case R.id.button3:
        int calculation = 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
            }

        }
        double grade = 0;
        for(int i = 0; i < allSp.size(); i++) {
                double gradeValue = calcGradeValue(allSp.get(i).getSelectedItemPosition()); 
                try {
                double calculation1 = (gradeValue) * (Integer.parseInt(allEd.get(i).getText().toString()));

                grade += calculation1;
                }catch (Exception e) {
                    //ignore
                }
            }

        final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update
        alertDialog.setTitle("Your calculated GPA");
        alertDialog.setMessage("Your calculated GPA is: " + (grade));
        alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                alertDialog.dismiss();
            }
        });

        alertDialog.show();
4

2 回答 2

0

我认为也许你没有初始化值editText2,并且你尝试将空对象添加到列表中,但如果没有任何源代码,我真的什么也说不出来。

于 2012-11-03T19:00:25.230 回答
0

我认为您需要查看将 tempText2 editText 添加到列表的位置。检查它是否不是添加动态编辑文本的结果。

看看你在哪里添加以下内容

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

由于添加了动态字段,您可能只添加了 tempText2 。因此,当您不添加动态字段时,arraylist 将为空。结果为 0。当您添加动态字段时,这将导致计算工作。

很难说这就是它没有更多的代码。

于 2012-11-03T19:23:00.080 回答