Hola a todos. A ver si me pueden ayudar.
Tengo el siguiente problema: Tengo un ArrayList de objetos. Y quiero mostrar estos objetos del ArrayList en un ListView con un Adapter personalizado. La cosa esta en que solo me muestra el último objeto del ArrayList tantas veces como objetos haya en el array. Osea, si hay tres objetos, me muestra el último tres veces..........
Les dejo el código el adapter y del que contiene el ListView a ver que opinan:
public class IncidenciaAdapter extends ArrayAdapter {
// Hacemos que nuestra clase herede las características de un ArrayAdapter
Activity context;
ArrayList<Incidencia> datos = new ArrayList<>();
/* Creamos las variables necesarias para capturar el contexto
* y los datos que se publicarán en la lista
*/
public IncidenciaAdapter(Activity context,ArrayList<Incidencia> datos) {
super(context,R.layout.listview,datos);
this.context=context;
this.datos=datos;
// TODO Auto-generated constructor stub
}
/* Constructor de la clase, donde pasamos por parámetro los datos
* a mostrar en la lista y el contexto
*/
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater=context.getLayoutInflater();
View item=inflater.inflate(R.layout.listview, null);
TextView codigo=(TextView) item.findViewById(R.id.textView10);
codigo.setText(datos.get(position).getCodigo());
TextView estado=(TextView) item.findViewById(R.id.textView11);
estado.setText(datos.get(position).getEstado());
TextView fecha=(TextView) item.findViewById(R.id.textView12);
fecha.setText(datos.get(position).getFecha());
TextView dispositivo=(TextView) item.findViewById(R.id.textView13);
dispositivo.setText(datos.get(position).getDispositivo());
TextView categoria=(TextView) item.findViewById(R.id.textView14);
categoria.setText(datos.get(position).getCategoria());
TextView severidad=(TextView) item.findViewById(R.id.textView15);
severidad.setText(datos.get(position).getSeveridad());
TextView prioridad=(TextView) item.findViewById(R.id.textView16);
prioridad.setText(datos.get(position).getPrioridad());
TextView resumen=(TextView) item.findViewById(R.id.textView17);
resumen.setText(datos.get(position).getResumen());
TextView descripcion=(TextView) item.findViewById(R.id.textView18);
descripcion.setText(datos.get(position).getDescripcion());
return item;
}
}
Y este es el otro:
public class Encontrar extends Activity {
Incidencia aux = new Incidencia();
ArrayList<Incidencia> datos = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.encontrar);
aux.setCodigo("0");
aux.setEstado("nuevo");
aux.setFecha("junio");
aux.setDispositivo("raton");
aux.setCategoria("periferico");
aux.setSeveridad("mucha");
aux.setPrioridad("alta");
aux.setResumen("resumido");
aux.setDescripcion("descripcion");
datos.add(aux);
aux.setCodigo("1");
aux.setEstado("en curso");
aux.setFecha("marzo");
aux.setDispositivo("monitor");
aux.setCategoria("periferico");
aux.setSeveridad("poca");
aux.setPrioridad("alta");
aux.setResumen("resumiendo");
aux.setDescripcion("decripción");
datos.add(aux);
aux.setCodigo("2");
aux.setEstado("en curso");
aux.setFecha("mayo");
aux.setDispositivo("torre");
aux.setCategoria("hardware");
aux.setSeveridad("poca");
aux.setPrioridad("alta");
aux.setResumen("resumiendo");
aux.setDescripcion("decripción");
datos.add(aux);
int num = datos.size();
Toast.makeText(getApplicationContext(), "num="+num, Toast.LENGTH_SHORT).show();
IncidenciaAdapter miAdaptador=new IncidenciaAdapter(this,datos);
ListView lstvista = (ListView) findViewById(R.id.listView);
lstvista.setAdapter(miAdaptador);
}
}
He creado tres objetos de prueba, y muestra el ultimo tres veces en el ListView, y no consigo ver cual es el problema.
EDITADO: Me acabo de dar cuenta que el error esta en la clase Encontrar, pues cada vez que añado un objeto al ArrayList parece que borra lo que hay y añade el ultimo tantas veces como objetos haya. Me explico:
Inserto el primero y compruebo que hay en el codigo del primer objeto, y efectivamente hay un 0.
Inserto el segundo y compruebo que hay en el código del primer objeto, y resulta que hay un 1.
Si inserto el tercero y vuelvo a mirar el mismo hay un 2, y resulta que hay un dos en los tres objetos.