Obtener valor (String) de ArrayList <ArrayList <String >> (); En Java

Sé que es cuestión simple, pero en

ArrayList<ArrayList<String>> collection; ArrayList<String> listOfSomething; collection= new ArrayList<ArrayList<String>>(); listOfSomething = new ArrayList<String>(); listOfSomething.Add("first"); listOfSomething.Add("second"); collection.Add(listOfSomething); listOfSomething.Clear(); listOfSomething.Add("first"); collection.Add(listOfSomething); 

Quiero tomar String de ArrayList de ArrayList, y no sé cómo hacerlo. Por ejemplo voy

 ArrayList<String> myList = collection.get(0); String s = myList.get(0); 

¡y funciona! pero:

Gran actualización:

 private List<S> valuesS; private List<Z> valuesZ; ArrayList<ArrayList<String>> listOfS; ArrayList<String> listOfZ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Zdatasource = new ZDataSource(this); Zdatasource.open(); valuesZ = Zdatasource.getAllZ(); Sdatasource = new SDataSource(this); Sdatasource.open(); valuesS = Sdatasource.getAllS(); List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>(); listOfS = new ArrayList<ArrayList<String>>(); listOfZ = new ArrayList<String>(); for (S i : valuesS) { // S is class for (Z j : valuesZ) { // Z is class if(j.getNumerS().equals(i.getNumerS())) { listOfZ.add(j.getNumerZ()); } else { //listOfZ.add("nothing"); } } listOfS.add(listOfZ); if(!listOf.isEmpty()) listOfZ.clear(); } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { try { ArrayList<String> myList = listOfS.get(groupPosition); String s = myList.get(childPosition); PrintToast("group "+Integer.toString(groupPosition)+", child "+Integer.toString(childPosition) + " , "+ s); } catch(Exception e) { Log.e("FS", e.toString()); } return true; } 

Return me java.lang.IndexOutOfBoundsException: El índice no válido 1, el tamaño es 0 cuando hago clic en el elemento que realmente debería existir. No mostrar el código que generan ListView, pero puedo decirte que mi lista contiene 3 elementos: primero es Null listOfZ, la segunda listaOfZ tiene 2 elementos, la tercera listaOfZ tiene 1 elemento.

 listOfSomething.Clear(); listOfSomething.Add("first"); collection.Add(listOfSomething); 

Usted está borrando la lista aquí y añadiendo un elemento ("primero"), la primera referencia de listOfSomething se actualiza, así sonce tanto referencia el mismo objeto, por lo que cuando se accede al segundo elemento myList.get(1) (que no existe Más) obtendrá el nulo.

Observe ambos collection.Add(listOfSomething); Salvo dos referencias al mismo objeto arraylist.

Debe crear dos instancias diferentes para dos elementos:

 ArrayList<ArrayList<String>> collection = new ArrayList<ArrayList<String>>(); ArrayList<String> listOfSomething1 = new ArrayList<String>(); listOfSomething1.Add("first"); listOfSomething1.Add("second"); ArrayList<String> listOfSomething2 = new ArrayList<String>(); listOfSomething2.Add("first"); collection.Add(listOfSomething1); collection.Add(listOfSomething2); 

Porque el segundo elemento es nulo después de borrar la lista.

Utilizar:

 String s = myList.get(0); 

Y recuerde, el índice 0 es el primer elemento .

La forma correcta de iterar en una lista dentro de la lista es:

 //iterate on the general list for(int i = 0 ; i < collection.size() ; i++) { ArrayList<String> currentList = collection.get(i); //now iterate on the current list for (int j = 0; j < currentList.size(); j++) { String s = currentList.get(1); } } 

Una forma más limpia de iterar las listas es:

 // initialise the collection collection = new ArrayList<ArrayList<String>>(); // iterate for (ArrayList<String> innerList : collection) { for (String string : innerList) { // do stuff with string } } 
  • Detección de líneas en una imagen de hoja musical en Android
  • Emulador de emparejamiento de par con emulador de Android
  • ¿Hay una manera de obtener la cuenta de los métodos numéricos utilizados en un archivo jar
  • El audio no está claro durante la transmisión entre una clase de Java y la actividad de Android
  • ¿Cómo implemento correctamente Immersive Full-Screen Mode en Android?
  • ¿Cómo obtener una vista desde dentro de Espresso para pasar a un IdlingResource?
  • Grabar un archivo wav desde el micrófono en Android - problemas
  • Google Voice recibe notificaciones de llamada nueva
  • Cómo comprobar si EditText tiene un valor en Android / Java
  • ¿Cuál es la diferencia entre DataOutputStream y ObjectOutputStream?
  • ¿Qué tipo de formatos de imagen debo utilizar en una aplicación de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.