|
||
|
![]() |
![]() |
Avisos |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Problema ListView
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í: Código:
@override public rowMessages getItem(int position) { return mylista.get(mylista.size() - 1 - position); } Código:
@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_clase_centro, null); break; case 2: convertView = layoutInflater.inflate(R.layout.listado_circular_clase_externo, null); break; } holder.setIdentificador((TextView)convertView.findViewById(R.id.identificador)); holder.setIdMensaje((TextView)convertView.findViewById(R.id.id_mensaje)); holder.setNombre((TextView)convertView.findViewById(R.id.remitente)); holder.setMensaje((TextView)convertView.findViewById(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.getIdentificador()); return convertView; } Me trae de cabeza. A ver si alguien me puede ayudar. |
|
#2
|
||||
|
||||
Al hacer scroll se reutilizan views de las filas (convertView no es null).
En ese caso, cambias el texto y demás, pero la alineación solo la estableces al crearse una vista de fila por primera vez, si se reutiliza en el scroll no cambia y de ahí que aparezca como quiera. EDIT: Precisamente la idea de android de reutilizar filas es para no tener que inflarlas o crearlas. Lo ideal es que tus filas tengan un único layout (así son reutilizables) y cambies únicamente algunas propiedades, igual que haces con el texto.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 11/02/15 a las 21:18:11. |
#3
|
||||
|
||||
antes que nada, gracias por contestar tan rápido. ¿Se te ocurreo alguna forma de solucionarlo?
|
#4
|
||||
|
||||
Si tus dos layouts de filas son casi iguales, y cambia por ejemplo que cierto textview está pegado a la derecha o a la izquierda es fácil. Un único layout y modificas la alineación del textview cada vez.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|