Todos los elementos de An ArrayList cambian cuando se agrega uno nuevo?

En primer lugar, disculpas por no poder suministrar ningún código fuente. Mi proyecto es bastante grande y vincular todo sería poco práctico, y no he sido capaz de reducir el problema que es excesivamente molesto. Haré mi mejor esfuerzo para explicarlo aquí.

Estoy dinámicamente creando nuevas instancias de una clase en cada bucle en mi código. Esta instancia se da dinámicamente un par de propiedades mientras que en el bucle, 'nombre' por ejemplo. Al final de cada bucle, la instancia recién generada se agrega a una ArrayList mantenida en otra clase, tercera.

Sin embargo, el problema es que cuando se agrega un nuevo elemento, por cualquier razón, todos los elementos anteriores cambian para coincidir exactamente con lo último. Mi conjetura es que el ArrayList está creando una referencia al elemento creado dinámicamente de modo que siempre que cambie, todos cambian, pero no sé arreglar esto.

Estaría agradecido por cualquier consejo y disculpas de nuevo por la calidad de esta explicación. Publicaré cualquier parte específica del código que desee ver

Según lo solicitado – XmlHandler.java – http://pastebin.com/mGmWt1RD ParsedDataSet.java = http://pastebin.com/k1xb3KBe Content.java = http://pastebin.com/UxiL2f9q

Sólo para reducir su tiempo de comprensión – El proyecto es un lector epub. El XMLHandler se llama desde un analizador SAX en otra clase no mostrada. El XMLHandler se utiliza 3 veces diferentes para 3 diferentes conjuntos de XML por lo que hay algún desorden allí.

El problema reside en el 'toc' ArrayList. El 'toc', o TableOfContents, contiene las instancias de Contenido a las que se hará referencia posteriormente (no se muestran). Estoy tratando de pasar los datos de cada nueva instancia de "Contenido" y luego pasar a que en el ArrayList estática

He visto a la gente reportar este tipo de problema muchas veces, y siempre se reduce a esto: en realidad no estás creando una nueva instancia, sino que usas la misma para cada iteración del bucle. Es un error fácil de cometer, especialmente si vienes de un idioma con semántica de copia diferente. Hay varias formas diferentes de cometer este error; Si usted edita su pregunta para mostrar el código de bucle, estoy seguro de que seré capaz de explicar lo que está sucediendo.

OK, ahora que ha agregado el código: el problema es que en "Contenido", todos los miembros de los datos están marcados como "estáticos". En Java, esto significa que hay una variable compartida por todos los objetos, es decir, la variable tiene el mismo valor para cada objeto. Así que de hecho estás creando muchos objetos de Contenido para ponerlos en el ArrayList, pero todos ellos parecen idénticos! Elimine los atributos "estáticos" de los miembros de datos de Content, y todo estará listo.

ArrayList sólo almacena la referencia de elementos. Asegúrese de que su código se vea así:

ArrayList list= new ArrayList(); loop(...){ MyObject newOne = new MyObject(); newOne.setXXX(xxx); list.add(newOne); } 

Codigo erroneo:

 ArrayList list= new ArrayList(); MyObject sameOne= new MyObject(); loop(...){ sameOne.setXXX(xxx); list.add(sameOne); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.