BaseAdapter中的ConverView的作用和ListView的优化
Chaque élément de la ListView est une vue. Lorsqu'un élément glisse hors de la zone visible, la vue correspondant à cet élément sera recyclée. Cette vue est la vue convergente. Si la vue convergente n'est pas applicable, chaque fois que l'élément est supprimé de la écran, une nouvelle vue est ajoutée à l'élément, ce qui augmente la surcharge, de sorte que le converview puisse réutiliser ces éléments nouvellement existants.
En ce qui concerne l'optimisation, si la mise en page de chaque élément est très compliquée, trouver le contrôle via findViewById augmentera sans aucun doute la surcharge du système. En référençant le Tag et en utilisant getTag pour obtenir l'objet ViewHolder lié, l'objet ViewHolder stocke les contrôles dans la mise en page et est sélectionné par ViewHolder Controls pour éviter un filtrage lourd et améliorer l'efficacité. Pas
grand chose à dire, le code:
la classe privée MyAdapter étend BaseAdapter {
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{ ViewHolder viewHolder;
LayoutInflater inflater=LayoutInflater.from(getActivity());
if(convertView==null){
viewHolder=new ViewHolder();
convertView =inflater.inflate(R.layout.listitem,null);
viewHolder.picture=(ImageView)convertView.findViewById(R.id.thumbnail);
viewHolder.title=(TextView)convertView.findViewById(R.id.title);
convertView.setTag(viewHolder);
}
else{
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.picture.setImageBitmap((Bitmap)list.get(position).get("thumbNail"));
viewHolder.title.setText((String)list.get(position).get("title"));
return convertView;
}
}
classe privée ViewHolder {ImageView
image;
Titre TextView;
}
}