我创建了一个ListView(myList),每行有一个EditText-Field(R.id.mannschaften)。在ListView下,我创建了一个Button,并在OnCreate() - Method中为它设置了一个OnClickListener。 现在,当单击Button时,我想迭代ListView并获取每行中EditText-Field的值并将它们保存在String-List中。但是我该怎么做?
这是我的代码:
private void ButtonClick() {
/** get all values of the EditText-Fields */
View v;
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < myList.getCount(); i++) {
v = myList.getChildAt(i);
et = (EditText) v.findViewById(R.id.mannschaften);
mannschaftsnamen.add(et.getText().toString());
}
.....
}
我已经知道,getChildAt仅适用于可见行,但我不知道如何以不同方式执行此操作。
答案 0 :(得分:34)
当您使用myList.getAdapter().getView(i,null,null)
时,您将获得项目视图的新实例,请尝试ListView.getChildAt(position)
这样的方法:
private void ButtonClick() {
/** get all values of the EditText-Fields */
View v;
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < myList.getCount(); i++) {
v = myList.getChildAt(i);
et = (EditText) v.findViewById(R.id.editText1);
mannschaftsnamen.add(et.getText().toString());
}
....
}
答案 1 :(得分:18)
在朋友的帮助下解决问题:
private void ButtonClick() {
/** get all values of the EditText-Fields */
View v;
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < myList.getCount(); i++) {
v = myList.getAdapter().getView(i, null, null);
et = (EditText) v.findViewById(i);
mannschaftsnamen.add(et.getText().toString());
}
....
}
答案 2 :(得分:7)
我认为@Arius的答案非常接近正确的解决方案。我只想强调View
你应该得到View
,其中包含ListView
。因此,您需要getChildAt(position)
与您的ListView
相关联。
private void ButtonClick() {
/** get all values of the EditText-Fields
find your ListView local variable you had created for example :
private ListView listview;
You also need to catch null value of EditText first. */
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < listview.getCount(); i++) {
et = (EditText) listview.getChildAt(i).findViewById(R.id.editText1);
if (et!=null) {
mannschaftsnamen.add(String.valueOf(et.getText()));
/** you can try to log your values EditText */
log.v("ypgs", String.valueOf(et.getText()));
}
}
....
}
答案 3 :(得分:0)
关于为什么所选答案有时会在“et =(EditText)v.findViewById(i);”
上抛出null是否在此时尝试在您之前选择的视图中选择位置i处的项目?因此,如果子视图中的项目少于整个列表中的项目,那么由于我尝试选择不存在的项目,您将获得null。
也许嵌套循环可以解决这个问题?或者,如果您已经知道所需元素的索引,只需直接给它索引。