我必须根据数据库中的数据行创建n个edittexts。我在LinearLayout
中添加了它们,如:
for(Some Condition)
{
EditText et = new EditText (this);
et.setValue(SomeVal);
li.addView(et);
}
然后,我将LinearLayout添加到ScrollView,我在AlertDialog中将其用作视图。
我是否需要为每个EditText分配id,以及我如何以后访问每个EditText的值。
我喜欢从另一方面解决这个问题。
使用LinearLayout并逐个搜索子项。
例如:
String a;
for (int i = 0; i< linearLayout.getChildCount(); i++){
a = ((EditText) linearLayout.getChildAt(i)).getText().toString();
Log.i("go", "TextView text is:" + a);
}
在您的情况下,将linearLayout更改为li。
不要像这样创建视图。使用自定义适配器和ListView或RecyclerView:https://www.journaldev.com/10416/android-listview-with-custom-adapter-example-tutorial
您将能够通过其在后备阵列中的位置来引用每个项目。
要稍后访问这些Edittexts,请将它们添加到某个集合中,然后通过位置访问:
Arraylist<EditText> edittexts = new Arraylist()
for(Some Condition) {
EditText et = new EditText (this);
et.setValue(SomeVal);
li.addView(et);
edittexts.add(et);
}
如果你想坚持这种方式,你可以创建一个HashMap
HashMap<Integer/*EditText Id*/,EditText> myEditTexts = new HashMap<>();
然后在你的代码中
for(Some Condition)
{
EditText et = new EditText(this);
et.setValue(SomeVal);
/*Add This*/
myEditTexts.put(intId,et);
li.addView(et);
}
然后你可以打电话给它
myEditTexts.get(Id);
或者你可以使用RecyclerView
和EditTexts
并按位置到达它(如果你不知道如何,如果你想要这个选项,你可以问我方向)
如果你有LinearLayout
的引用变量,你在其中添加值,那么你可以使用下面的代码获取它的所有子视图并访问它们的数据。添加它们时,您不需要将ID分配给EditText。
for (int i = 0; i < ll_main.getChildCount(); i++) {
EditText child = (EditText)ll_main.getChildAt(i);
child.getText();
}
确保您的布局中只包含EditTexts,或者在转换为EditText之前需要检查对象。
试试这个
添加动态编辑文本: -
EditText et;
List<EditText> edtList = new ArrayList<EditText>();
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
// add edittext
for (int j = 1; j <= n; j++) {
et = new EditText(this);
edtList.add(et);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
et.setLayoutParams(p);
et.setText("Text");
et.setId(j);
ll.addView(et);
}
检索编辑文本: -
int id[]=new int[edtList.size()];
for(int i=0; i < edtList.size(); i++){
id[i] = edtList.get(i).getId();
}
我希望这对你有所帮助!
谢谢。