I have a Button that adds a row with an EditText to a TableLayout. I need to find out the input in each EditText of the rows that are added.
For example: Someone adds 3 rows, meaning there are 3 EditText. In each EditText, they put the number 3. I need to store the values of the EditText that were added to the layout and add them all up by the click of a button.
Would I use a list then iterate that list? I’m not sure about how I would do this.
This is my code so far…
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;
}
When you create each of the
EditTexts, you need to to add them to an array-like container, such as anArrayList<EditText>. Whenever you need to access any of these dynamicEditTexts, you can retrieve them from theArrayList.I can see that you are already creating an
ArrayList<EditText>in youronClick()method. That’s great, but you need to move theArrayListoutside theonClick()method so that you can reference it from any other methods you create. So move this line…outside the method, so that the beginning few lines of
onClick()now look like this…Also, make sure you’re adding all the
EditTexts to theArrayList– I see there is a lineallEd.add(tempText2);but I can’t see any line forallEd.add(tempText1);– if you need to accesstempText1, make sure you add it to the list.To perform the ‘adding’ caluclation, you need to loop over the entries in the
ArrayList, get their values, then add them together. Something like this…