shabah1975
11/02/15, 21:05:07
Hola,
mi problema es el siguiente:
tengo una app en la que hay mensajería entre distintos usuarios. La lista tiene dos tipos de fila, según el remitente del mensaje. Para ser más claros; los mensajes de uno salen alineados a la izquierda y los del otro alineados a la derecha. Dentro de cada fila va un entero que determina qué tipo de diseño cogerá el adaptador. La lista se muestra al revés; es decir, los mensajes más nuevos se muestran al final, por lo que en el adapter la función getItem queda así:
override
public rowMessages getItem(int position) {
return mylista.get(mylista.size() - 1 - position);
}
la función getView queda así:
override
public View getView(int position, View convertView, ViewGroup parent) {
rowMessages row = getItem(position);
Integer tipo=row.getTipo();
HolderMessages holder=null;
if(convertView==null){
holder=new HolderMessages();
switch (tipo){
case 1:
convertView = layoutInflater.inflate(R.layout.listado_circular_c lase_centro, null);
break;
case 2:
convertView = layoutInflater.inflate(R.layout.listado_circular_c lase_externo, null);
break;
}
holder.setIdentificador((TextView)convertView.find ViewById(R.id.identificador));
holder.setIdMensaje((TextView)convertView.findView ById(R.id.id_mensaje));
holder.setNombre((TextView)convertView.findViewByI d(R.id.remitente));
holder.setMensaje((TextView)convertView.findViewBy Id(R.id.texto_mensaje));
holder.setFecha((TextView)convertView.findViewById (R.id.fecha_mensaje));
convertView.setTag(holder);
}else{
holder = (HolderMessages) convertView.getTag();
}
holder.getMensaje().setText(row.getMensaje());
holder.getFecha().setText(row.getFecha());
holder.getIdMensaje().setText(row.getIdMensaje());
holder.getNombre().setText(row.getNombre());
holder.getIdentificador().setText(row.getIdentific ador());
return convertView;
}
El caso es que cuando la petición a la base de datos, los elementos que está a la vista en el listview salen bien, alineados donde deben, pero cuando hago scroll hacia abajo, los elementos que en un principio están fuera de la vista, ya no salen alineados donde deben. La variable "tipo", como se ve en el código, la coge de la fila ("row"), y el mensaje que muestra es el correcto, por lo que la fila es la correcta (lo he mirado con debug).
Me trae de cabeza. A ver si alguien me puede ayudar.
mi problema es el siguiente:
tengo una app en la que hay mensajería entre distintos usuarios. La lista tiene dos tipos de fila, según el remitente del mensaje. Para ser más claros; los mensajes de uno salen alineados a la izquierda y los del otro alineados a la derecha. Dentro de cada fila va un entero que determina qué tipo de diseño cogerá el adaptador. La lista se muestra al revés; es decir, los mensajes más nuevos se muestran al final, por lo que en el adapter la función getItem queda así:
override
public rowMessages getItem(int position) {
return mylista.get(mylista.size() - 1 - position);
}
la función getView queda así:
override
public View getView(int position, View convertView, ViewGroup parent) {
rowMessages row = getItem(position);
Integer tipo=row.getTipo();
HolderMessages holder=null;
if(convertView==null){
holder=new HolderMessages();
switch (tipo){
case 1:
convertView = layoutInflater.inflate(R.layout.listado_circular_c lase_centro, null);
break;
case 2:
convertView = layoutInflater.inflate(R.layout.listado_circular_c lase_externo, null);
break;
}
holder.setIdentificador((TextView)convertView.find ViewById(R.id.identificador));
holder.setIdMensaje((TextView)convertView.findView ById(R.id.id_mensaje));
holder.setNombre((TextView)convertView.findViewByI d(R.id.remitente));
holder.setMensaje((TextView)convertView.findViewBy Id(R.id.texto_mensaje));
holder.setFecha((TextView)convertView.findViewById (R.id.fecha_mensaje));
convertView.setTag(holder);
}else{
holder = (HolderMessages) convertView.getTag();
}
holder.getMensaje().setText(row.getMensaje());
holder.getFecha().setText(row.getFecha());
holder.getIdMensaje().setText(row.getIdMensaje());
holder.getNombre().setText(row.getNombre());
holder.getIdentificador().setText(row.getIdentific ador());
return convertView;
}
El caso es que cuando la petición a la base de datos, los elementos que está a la vista en el listview salen bien, alineados donde deben, pero cuando hago scroll hacia abajo, los elementos que en un principio están fuera de la vista, ya no salen alineados donde deben. La variable "tipo", como se ve en el código, la coge de la fila ("row"), y el mensaje que muestra es el correcto, por lo que la fila es la correcta (lo he mirado con debug).
Me trae de cabeza. A ver si alguien me puede ayudar.