【发布时间】:2018-07-31 10:56:45
【问题描述】:
我已经成功地以编程方式创建了一个 TableLayout,其中包含多个 TextViews 和 EditTexts。
我想要的:是在输入文本后从 EditTexts 中获取文本。
我的尝试: 是在我创建 TableLayout 的循环中使用 addTextChangedListener()。
我的问题是:我设法从创建的第一个 EditText(左上 EditText)中获取文本。但是在向其他 EditText 输入文本时,我无法从其他 EditText 获取文本。
问题: 将 addTextChangedListener() 添加到 TableLayout 中的多个 EditText 的正确过程是什么?按创建时间还是以后?如果以后 - 我怎样才能以最好的方式单独访问 EditTexts?
任何有关修复我的代码的建议将不胜感激。
public void inflateView(String[] names){
tableLayout = (TableLayout)findViewById(R.id.table1);
TableRow tableRow;
TextView textView;
EditText[][] eTxts = new EditText[names.length-1][rows.length-1];
for (int i = 0; i < rows.length; i++) {
tableRow = new TableRow(getApplicationContext());
textView = new TextView(getApplicationContext());
textView.setText(rows[i]);
textView.setTextSize(20);
textView.setId(i);
textView.setPadding(20, 20, 20, 20);
tableRow.addView(textView);
if(i<1) {
for (int j = 0; j < names.length; j++) {
textView = new TextView(getApplicationContext());
textView.setText(names[j]);
textView.setTextSize(20);
textView.setId(j);
textView.setPadding(20, 20, 20, 20);
tableRow.addView(textView);
}
}
else{
for (int j = 0; j < names.length; j++) {
edit = new EditText(getApplicationContext());
edit.setText("");
edit.setTextSize(20);
edit.setId(j);
//eTxts[i][j] = edit;
edit.setPadding(20, 20, 20, 20);
final int jj = j; //Der kan være en fejl i final
edit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
Log.d("Entered TextWatcher", jj+"");
//points points points
int plottedPoint = 0;
for (int i = 0; i < tableLayout.getChildCount(); i++) {
TableRow mRow = (TableRow) tableLayout.getChildAt(i); //Det er derfor den kun tager den første.
Object et = mRow.getChildAt(i);
//TextView mTextView = (TextView) mRow.getChildAt(1);
if(et instanceof EditText) {
EditText e = (EditText) et;
if(!e.getText().toString().equals("")){
try {
plottedPoint = Integer.parseInt(e.getText().toString());
Log.i("edittext value : ", e.getText().toString());
} catch(Exception ex){
Toast.makeText(getApplicationContext(), "Not a number", Toast.LENGTH_SHORT);
ex.printStackTrace();
}
}
}
}
}
});
tableRow.addView(edit);
}
}
tableLayout.addView(tableRow);
}
}
【问题讨论】:
-
循环使用多个编辑文本不是好的做法。
-
请参考this 处理多个编辑文本。
-
我会尝试按照链接中的提示进行操作。谢谢你。在这种情况下,您对避免使用 EditText 循环的最佳做法有什么建议吗?我应该先创建一个 EditTexts 数组,然后再将它们推送到 TableLayout 中吗?
-
您可以通过循环创建多个edittext,但在循环中从edittext获取值并不是最好的方式,这就是我分享链接的原因。
-
太棒了。谢谢。
标签: android android-edittext android-tablelayout