J'ai des problèmes avec le code BaseAdapter que j'ai adapté à partir d'un livre. J'ai utilisé des variantes de ce code partout dans mon application, mais seulement réalisé en faisant défiler une longue liste les éléments dans le ListView deviennent brouillés et tous les éléments ne sont pas affichés.BaseAdapter provoquant le désordre de ListView lors du défilement
Il est très difficile de décrire le comportement exact, mais il est facile de voir si vous prenez une liste triée de 50 éléments et commencez à défiler vers le haut et vers le bas.
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, je vois. Ainsi, le ListView ne contient que le nombre de vues nécessaires pour remplir l'écran. –
@Mr. Ambigueux: Plus ou moins. Il peut mettre en cache un couple pour pouvoir réagir rapidement aux demandes de défilement. Cependant, dans un 'ListView' avec un espace UI pour 10 lignes et un' Adapter' de 1000 lignes, le nombre de 'Views' sera beaucoup plus proche de 10 que 1,000. Probablement comme 12 ou 14. C'est le point de recyclage de ligne avec 'convertView', donc Android n'a pas à créer (et plus tard GC) tout un tas de widgets de ligne. – CommonsWare