迭代ListView并获取EditText-Field值

erd*_*inz 26 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());
    }
    .....
}
Run Code Online (Sandbox Code Playgroud)

我已经知道,getChildAt仅适用于可见行,但我不知道如何以不同方式执行.

小智 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());
    }
....
}
Run Code Online (Sandbox Code Playgroud)


erd*_*inz 19

在朋友的帮助下解决了问题:

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());
    }
....
}
Run Code Online (Sandbox Code Playgroud)

  • `findViewById()`应该占用资源ID而不是索引! (3认同)
  • 也许是因为你需要用XML中的元素的真实名称来补充它? (2认同)

nan*_*ing 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()));
        }
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)