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

Respuesta
 
Herramientas
  #1  
Viejo 04/08/16, 10:30:07
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Problema con ViewHolder

Vereis, tengo un problema con una lista y el patron ViewHolder, es el tipico problema de que al hacer scroll se desmonta todo y no me mantiene las posiciones de algunos elementos, por ejemplo, al pulsar un item de la lista me cambie el color del texto y se mantenga al hacer scroll, he conseguido cambiar el color del texto pero se me cambia en otros elementos tambien, en definitiva...que no se como mantener las views de cada elemento.
__________________
Responder Con Cita


  #2  
Viejo 04/08/16, 10:41:30
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Cada vez que recicles (reutilices) un elemento de vista tienes que establecer TODOS los atributos que pueden cambiar de un elemento de la lista al otro.

O cambias todos los atributos o te puedes encontrar con valores que no son los que esperabas porque se cambiaron.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 04/08/16, 10:55:08
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Eso es precisamente lo que no consigo hacer mocelet, este es el codigo del adapter, me funciona bien, lo unico que al pulsar el elemento no me mantiene las posiciones

Código:
public class AdapterServeri extends ArrayAdapter<String> {

   private Context context;
   private int[] nombre;
   private String[] frase;

 

   public AdapterServeri(Context context, int[] nombre, String[] frase) {
        super(context, R.layout.adapter_doble,frase);
        this.nombre = nombre;
        this.frase = frase;
        this.context = context;
    } 
   
   @Override
public long getItemId(int position) {
        return position;}

    @Override
public int getViewTypeCount() {
        return getCount();
    }

    @Override
public int getItemViewType(int position) {
        return position;
    }

    private class ViewHolder {
        TextView nombre;
        TextView frase;        
    }
  
    @Override  
public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        if (convertView == null) {

            LayoutInflater inflater = LayoutInflater.from(context);  
            convertView = inflater.inflate(R.layout.adapter_doble, null);            
            holder = new ViewHolder();
            holder.n = (TextView) convertView.findViewById(R.id.personaje);
            holder.f = (TextView) convertView.findViewById(R.id.frase);

            convertView.setTag(holder);
            
        } else {  
            holder = (ViewHolder) convertView.getTag();
        }

        final String temp = getItem(position);
        holder.n.setText(nombre[position]);
        holder.f.setText(frase[position]);
       
        return convertView;  
    }

}
__________________
Responder Con Cita
  #4  
Viejo 04/08/16, 11:16:18
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Ese código que has puesto solo es para actualizar el texto del nombre y la frase. No veo que establezcas el color del texto en ningún sitio si es algo que puede cambiar de un elemento a otro.

Si lo que haces al hacer una pulsación es cambiar "a pelo" el color de la view, mal. Porque al hacer scroll la view pertenecerá a otro item de la lista y estará con un color que no corresponde.

Todos los atributos que puedan cambiar, TODOS, tienes que establecerlos en el adapter. Y en vez de cambiar directamente la vista cambias el modelo y llamas onNotifyDataSetChanged() para que la lista se actualice. Para eso necesitarás un color[position] por ejemplo, igual que haces con el nombre o la frase.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #5  
Viejo 04/08/16, 11:56:51
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Creo que ya lo solucione, ya me cambia el color del texto correctamente y me mantiene por ejemplo el estado de los checkbox, imagenes etc, Aqui encontre una de las soluciones, y aparte cambie algunas lineas en el getView del adapter.

Con esto se me soluciono.

View v = convertView;
ViewHolder holder;
__________________
Responder Con Cita
  #6  
Viejo 04/08/16, 12:25:19
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Si se te ha solucionado bien, aunque la solución que enlazas en cuanto hagas scroll y se recicle alguna view va a volver a estar todo patas arriba porque cambias las propiedades de views directamente.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #7  
Viejo 04/08/16, 18:58:04
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Del enlace solo he cogido la solucion para el "setOnItemClickListener" para cambiar el color de los textos al pulsar, hago scroll y va perfecto, no me descontrola nada
__________________
Responder Con Cita
Respuesta

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



Hora actual: 20:00:44 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /