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  
Viejo 11/02/15, 21:05:07
Avatar de shabah1975
shabah1975 shabah1975 no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: feb 2015
Mensajes: 2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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);
    }
la función getView queda así:

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;
    }
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.
Responder Con Cita


  #2  
Viejo 11/02/15, 21:15:04
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.

Última edición por mocelet Día 11/02/15 a las 21:18:11
Responder Con Cita
  #3  
Viejo 11/02/15, 21:19:19
Avatar de shabah1975
shabah1975 shabah1975 no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: feb 2015
Mensajes: 2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
antes que nada, gracias por contestar tan rápido. ¿Se te ocurreo alguna forma de solucionarlo?
Responder Con Cita
  #4  
Viejo 11/02/15, 21:23:52
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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.
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 14:13:38 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007