Я пытаюсь реализовать свой пользовательский адаптер, но я столкнулся с проблемами производительности. Кажется, что каждый раз, когда я просматриваю список, он загружается снова и снова. Я хочу, чтобы он удерживал представление и отображал только видимую часть. У моего элемента списка есть просмотр изображений и текст. Мой код:Пользовательский адаптер smart scrolling
class CustomAdapter extends BaseAdapter {
private Context context;
private ArrayList<CounselorInfo> counselors;
private static LayoutInflater inflater = null;
CustomAdapter(Context context, ArrayList<CounselorInfo> counselors) {
this.context = context;
this.counselors = counselors;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return counselors.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
private class Holder
{
TextView textView;
ImageView imageView;
}@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder = new Holder();
View rowView = inflater.inflate(R.layout.counselors_list, null);
holder.textView = (TextView) rowView.findViewById(R.id.nameCounselor);
holder.imageView = (ImageView) rowView.findViewById(R.id.imageCounselor);
holder.textView.setText(counselors.get(position).getName());
ImageLoadTask imageLoad = new ImageLoadTask(" http:// " + counselors.get(position).getImageURL(), holder.imageView);
imageLoad.execute();
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
});
return rowView;
}
}
Android студия дает предложения по этой строке:
View rowView = inflater.inflate(R.layout.counselors_list, null);
он говорит: Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling.
Но я использую внутренний держатель класса, так что я не знаю, как решить эту проблему ,
Это, как я делал это в прошлом. В принципе, он проверяет, имеет ли представление, представленное в вызове getView() значение null. Если да, то он создает новый. В противном случае, поскольку вы обладаете всей информацией тегом, она просто «перерабатывает», что рассматривает информацию. –
@JuLes Спасибо, после некоторых изменений мне удалось заставить его работать. Отмечено, как ответили. –