迭代ListView并获取EditText-Field值

时间:2013-01-12 13:25:04

标签: android listview android-edittext

我创建了一个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仅适用于可见行,但我不知道如何以不同方式执行此操作。

4 个答案:

答案 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。

也许嵌套循环可以解决这个问题?或者,如果您已经知道所需元素的索引,只需直接给它索引。