1

Button行を追加するEditTextがありTableLayoutます。追加された各行の入力を見つける必要がありますEditText

例:誰かが3行を追加します。これは、3行があることを意味しますEditText。それぞれに3という数字を入れています。レイアウトに追加されたEditTextの値を保存し、ボタンをクリックするだけでそれらをすべて追加する必要があります。EditText

リストを使用して、そのリストを繰り返しますか?これをどのように行うかはわかりません。

これはこれまでの私のコードです...

int count = 1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);       
    setContentView(R.layout.activity_main);
    getSavedState();

    Button buttonAdd = (Button) findViewById(R.id.button1);
    Button buttonDel = (Button) findViewById(R.id.button2);
    Button buttonCalc = (Button) findViewById(R.id.button3);
    buttonAdd.setOnClickListener(this);
    buttonDel.setOnClickListener(this);
}

public void onClick(View v) {
    TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1);
    List<EditText> allEd = new ArrayList<EditText>();

    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);
                EditText editText1 = (EditText) findViewById(R.id.editText1);
                EditText 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);
                allEd.add(tempText2);

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

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

                alertDialog.show();
            }
            break;
        case R.id.button2:
            if(count != 1){
                count--;
                tableLayout1.removeView(tableLayout1.getChildAt(count));
        } 
            else {
                final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update
                alertDialog.setTitle("Error");
                alertDialog.setMessage("You must have at least one row!");

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

                alertDialog.show();
            }
            break;
        case R.id.button3:
            String[] strings = new String[allEd.size()];
            for(int i = 0; i < allEd.size(); i++) {
                strings[i] = allEd.get(i).getText().toString();
                int input = Integer.parseInt(strings[i]);

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

                alertDialog.show();
            }
        break;

    }
4

2 に答える 2

2

EditTextボタンを押すたびに追加されるsへの参照を保持する必要があります。追加される数がわからないので、を使用しList<EditText>て保存することをお勧めします。これをメンバー変数にするとEditText、リスト内のsからの入力にアクセスできます。

于 2012-10-31T01:05:04.797 に答える
1

それぞれを作成するときは、EditTextそれらを。などの配列のようなコンテナに追加する必要がありますArrayList<EditText>。これらの動的なもののいずれかにアクセスする必要があるときはいつでも、EditTextからそれらを取得できますArrayList

メソッドですでにを作成していることがわかりArrayList<EditText>ますonClick()。これはすばらしいことですが、作成する他のメソッドから参照できるようにArrayList、メソッドの外側に移動する必要があります。onClick()したがって、この行を移動します...

List<EditText> allEd = new ArrayList<EditText>();

メソッドの外にあるので、今の最初の数行は次のonClick()ようになります...

List<EditText> allEd = new ArrayList<EditText>();

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

    switch(v.getId()){
    case R.id.button1:

また、すべてのEditTextsを追加していることを確認してArrayListください-行はありますが、行allEd.add(tempText2);が表示されませんallEd.add(tempText1);-アクセスする必要がある場合tempText1は、必ずリストに追加してください。

'adding'計算を実行するには、のエントリをループし、ArrayListそれらの値を取得してから、それらを一緒に追加する必要があります。このようなもの...

case R.id.button3:
    // calculate the value first
    int calculation = 0;
    for (int i=0;i<allEd.size();i++){
        // get the entry
        EditText textField = addEd.get(i);

        try {
            // get the value, as a number
            int numberValue = Integer.parseInt(textField.getText());
            // add it to the calculation
            calculation += numberValue;
        } 
        catch (Exception e){
            // ignore errors if the input is empty or isn't a number
        }
    }

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

    alertDialog.show();
break;
于 2012-10-31T01:22:30.640 に答える