I've created a ListView (myList) with one EditText-Field in each row (R.id.mannschaften). Under the ListView, I've created a Button and set an OnClickListener for it in the OnCreate()-Method. Now when the Button is clicked, I want to iterate through the ListView and get the value of the EditText-Field in every row and save them in a String-List. But how do I do that?
Here is my Code:
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());
}
.....
}
I already know, that getChildAt is only for the visible rows, but I don't know how to do it differently.
I think the answer from @Arius was quite close to be right solution. I just want to highlight that
View
you should get isView
which contain withListView
. So you need togetChildAt(position)
related with yourListView
.Solved the Problem with the help of a friend:
When you use
myList.getAdapter().getView(i,null,null)
you are getting a new instance of the item view, try theListView.getChildAt(position)
method like this:Regarding why the selected answer might sometimes throw a null on the "et = (EditText) v.findViewById(i);"
Would it not be at that point trying to select the item at position i WITHIN the view that you had previously selected? Thus if there are fewer items in the child views than there are items in the whole list, you would get null due to i trying to select items that don't exist.
Perhaps a nested loop could solve this problem? Or if you already know the index of the element you need, simply give it the index directly.