android listview android-edittext

android - Iterar a través de ListView y obtener valores EditText-Field



android-edittext (4)

Creé un ListView (myList) con un EditText-Field en cada fila (R.id.mannschaften). Debajo de ListView, he creado un botón y configurado un OnClickListener para él en el método OnCreate (). Ahora, cuando se hace clic en el botón, quiero iterar a través de ListView y obtener el valor del EditText-Field en cada fila y guardarlos en una String-List. ¿Pero cómo hago eso?

Aquí está mi Código:

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

Ya sé que getChildAt es solo para las filas visibles, pero no sé cómo hacerlo de manera diferente.


Creo que la respuesta de @Arius estuvo bastante cerca de ser la solución correcta. Solo quiero resaltar que View que debe obtener es View que contiene ListView . Entonces necesita getChildAt(position) relacionado con su 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())); } } .... }


Cuando utiliza myList.getAdapter().getView(i,null,null) obtiene una nueva instancia de la vista de elemento, pruebe el método ListView.getChildAt(position) esta manera:

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


En cuanto a por qué la respuesta seleccionada a veces arroja un nulo en el "et = (EditText) v.findViewById (i);"

¿No sería en ese momento cuando intente seleccionar el artículo en la posición i DENTRO de la vista que había seleccionado previamente? Por lo tanto, si hay menos elementos en las vistas secundarias que elementos en la lista completa, se anulará debido a que intento seleccionar elementos que no existen.

Tal vez un ciclo anidado podría resolver este problema? O si ya conoce el índice del elemento que necesita, simplemente dele el índice directamente.


Resolvió el problema con la ayuda de un amigo:

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