BaseAdapter中的ConverView的作用和ListView的优化
Каждый элемент в ListView является представлением. Когда элемент выходит из видимой области, представление, соответствующее этому элементу, будет переработано. Это представление является преобразованным. Если преобразование не применимо, каждый раз, когда элемент удаляется из screen, к элементу добавляется новое представление, что увеличивает накладные расходы, поэтому преобразование может повторно использовать эти новые существующие элементы.
Что касается оптимизации, если макет каждого элемента очень сложен, поиск элемента управления с помощью findViewById, несомненно, увеличит системные издержки. Ссылаясь на тег и используя getTag для получения привязанного объекта ViewHolder, объект ViewHolder сохраняет элементы управления в макете и является выбирается ViewHolder Controls, чтобы избежать тяжелого растрирования и повысить эффективность. Нечего и
говорить, код:
частный класс MyAdapter расширяет 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;
}
}
частный класс ViewHolder {
ImageView picture;
Заголовок TextView;
}
}