Java 如何从动态创建的编辑文本中获取输入?
我有一个Java 如何从动态创建的编辑文本中获取输入?,java,android,arraylist,android-edittext,Java,Android,Arraylist,Android Edittext,我有一个按钮,它将带有编辑文本的行添加到表格布局。我需要找出所添加行的每个EditText中的输入 例如:某人添加了3行,这意味着有3个EditText。在每个EditText中,他们将数字放在3上。我需要存储添加到布局中的EditText的值,并通过单击按钮将它们全部添加起来 我会使用一个列表然后迭代该列表吗?我不知道该怎么做 这是我到目前为止的代码 int count = 1; public void onCreate(Bundle savedInstanceState) { su
按钮
,它将带有编辑文本的行
添加到表格布局
。我需要找出所添加行的每个EditText
中的输入
例如:某人添加了3行,这意味着有3个EditText
。在每个EditText
中,他们将数字放在3上。我需要存储添加到布局中的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;
}
int count=1;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSavedState();
Button ButtonAd=(按钮)findViewById(R.id.button1);
Button buttonDel=(按钮)findViewById(R.id.button2);
Button buttonCalc=(按钮)findViewById(R.id.button3);
ButtonAd.setOnClickListener(此);
buttonDel.setOnClickListener(此);
}
公共void onClick(视图v){
TableLayout tableLayout1=(TableLayout)findViewById(R.id.tableLayout1);
List allEd=new ArrayList();
开关(v.getId()){
案例R.id.button1:
如果(计数!=16){
计数++;
//仅在单击“添加”按钮时创建行
TableRow tempRow=新的TableRow(MainActivity.this);
EditText TestExt1=新的EditText(MainActivity.this);
EditText TestExt2=新的EditText(MainActivity.this);
TextView testextview=新的TextView(MainActivity.this);
EditText editText1=(EditText)findViewById(R.id.editText1);
EditText editText2=(EditText)findViewById(R.id.editText2);
TextView textView3=(TextView)findViewById(R.id.textView3);
setText(计数+”);
tempRow.setLayoutParams(新的LayoutParams(LayoutParams.FILL\u父级,LayoutParams.WRAP\u内容));
testext1.setLayoutParams(editText1.getLayoutParams());
testext2.setLayoutParams(editText2.getLayoutParams());
testextview.setLayoutParams(textView3.getLayoutParams());
testext1.setInputType(InputType.TYPE\u CLASS\u TEXT);
testext2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
setId(计数);
新增(2);
addView(extview);
tempRow.addView(ext1);
tempRow.addView(ext2);
tableLayout1.addView(tempRow);
}
否则{
final AlertDialog AlertDialog=新建AlertDialog.Builder(MainActivity.this).create();//读取更新
alertDialog.setTitle(“错误”);
setMessage(“您只能有10行!”);
alertDialog.setButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
alertDialog.disclose();
}
});
alertDialog.show();
}
打破
案例R.id.按钮2:
如果(计数!=1){
计数--;
tableLayout1.removeView(tableLayout1.getChildAt(count));
}
否则{
final AlertDialog AlertDialog=新建AlertDialog.Builder(MainActivity.this).create();//读取更新
alertDialog.setTitle(“错误”);
setMessage(“您必须至少有一行!”);
alertDialog.setButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
alertDialog.disclose();
}
});
alertDialog.show();
}
打破
外壳R.id.按钮3:
String[]strings=新字符串[allEd.size()];
for(int i=0;i
您需要保留对每个按钮按下时添加的EditText
的引用。由于您不知道将添加多少,我建议使用列表来存储它们。将其作为成员变量,然后您可以从列表中的EditText
访问输入。当您创建每个时>EditText
s,您需要将它们添加到类似数组的容器中,例如ArrayList
。每当您需要访问这些动态EditText
s时,您都可以从ArrayList
中检索它们
我可以看到您已经在onClick()
方法中创建了一个ArrayList
。这很好,但是您需要将ArrayList
移动到onClick()
方法之外,以便您可以从您创建的任何其他方法中引用它。因此,请移动此行
List<EditText> allEd = new ArrayList<EditText>();
另外,确保您正在将所有EditText
s添加到ArrayList
-我看到有一行allEd.add(testext2);
但是我看不到allEd.add(testext1)的任何行;
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:
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;