que estoy teniendo problemas con algún código BaseAdapter que me he adaptado de un libro. He estado usando variaciones de este código por todas partes en mi aplicación, pero recién me di cuenta de que al desplazarme por una larga lista, los elementos en el ListView se mezclan y no se muestran todos los elementos.BaseAdapter causando ListView para ir fuera de servicio cuando desplazado
Es muy difícil describir el comportamiento exacto, pero es fácil ver si se toma una lista ordenada de 50 artículos y empezar a desplazarse hacia arriba y hacia abajo.
class ContactAdapter extends BaseAdapter {
ArrayList<Contact> mContacts;
public ContactAdapter(ArrayList<Contact> contacts) {
mContacts = contacts;
}
@Override
public int getCount() {
return mContacts.size();
}
@Override
public Object getItem(int position) {
return mContacts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null){
LayoutInflater li = getLayoutInflater();
view = li.inflate(R.layout.groups_item, null);
TextView label = (TextView)view.findViewById(R.id.groups_item_title);
label.setText(mContacts.get(position).getName());
label = (TextView)view.findViewById(R.id.groups_item_subtitle);
label.setText(mContacts.get(position).getNumber());
}
else
{
view = convertView;
}
return view;
}
}
Oh, ya veo. Entonces, ¿ListView solo contiene como máximo el número de Vistas necesarias para llenar la pantalla? –
@Mr. Ambiguo: más o menos. Puede almacenar en caché un par para poder reaccionar rápidamente a las solicitudes de desplazamiento. Sin embargo, en un 'ListView' con espacio de UI para 10 filas y un' Adaptador' de 1,000 filas, el número de 'Vistas' será mucho más cercano a 10 que 1,000. Probablemente como 12 o 14. Ese es el punto de reciclaje de filas con 'convertView', por lo que Android no tiene que crear (y más tarde GC) un lío completo de widgets de fila. – CommonsWare