通过迭代的ListView并获得的EditText字段值(Iterate through ListV

2019-07-18 03:29发布

我创建了一个ListView(myList中)有一个的EditText场每一行(R.id.mannschaften)。 在ListView中,我创建了一个按钮,并在OnCreate()设置一个OnClickListener它 - 方法。 现在,单击该按钮时,我想通过ListView控件进行迭代,并得到各行中的EditText字段的值,并将其保存在一个字符串列表。 但我怎么做呢?

这是我的代码:

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只为可见行,但我不知道如何做到这一点不同。

Answer 1:

当您使用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());
    }
....
}


Answer 2:

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

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());
    }
....
}


Answer 3:

我觉得从@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()));
        }
    }
    ....
}


Answer 4:

至于为什么选择的答案有时可能会扔在一个空的“等=(EditText上)v.findViewById(我);”

这岂不是在这一点上试图在我的位置中的观点,即你以前选择的选择项目? 因此,如果在孩子的意见较少的项目以外还有整个列表中的项目,你会得到空因我试图选择不存在的项目。

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



文章来源: Iterate through ListView and get EditText-Field values