Я хотел бы отображать элементы с адаптером в ListView, но когда getView вызывается в ArrayAdapter, он отображает хорошее изображение, но не на хорошем элементе, когда я прокручиваю. Это похоже на то, что findViewById не дал мне хорошего идентификатора макета.Android ListView getView отображаемое изображение случайно
public class ItemPackAdapter extends ArrayAdapter<Pack> {
Context context;
public ItemPackAdapter(Context context, ArrayList<Pack> pack) {
super(context, 0, pack);
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// Check if an existing view is being reused, otherwise inflate the view
final Pack pack = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_pack, parent, false);
holder = new ViewHolder();
holder.textView1 = (TextView) convertView.findViewById(R.id.textView1);
holder.textView2 = (TextView) convertView.findViewById(R.id.textView2);
holder.textView3 = (TextView) convertView.findViewById(R.id.textView3);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
if (!pack.getImageName().equals("null")) {
UrlGenerator urlGenerator = new UrlGenerator();
String url = urlGenerator.getDownloadPicture(pack.getImageName());
DownloadPicture downloadPicture = new DownloadPicture(holder.imageView, url, getContext());
downloadPicture.start();
}
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView1.setText(pack.getSomething1());
holder.textView2.setText(pack.getSomething2());
holder.textView3.setText(pack.getSomething3());
if (!pack.getImageName().equals("null")) {
UrlGenerator urlGenerator = new UrlGenerator();
String url = urlGenerator.getDownloadPicture(pack.getImageName());
DownloadPicture downloadPicture = new DownloadPicture(holder.imageView, url, getContext());
downloadPicture.start();
}
if(pack.getImageName().equals("null")){
holder.imageView.setImageBitmap(null);
}
return convertView;
}
static class ViewHolder {
TextView textView1;
TextView textView2;
TextView textView3;
ImageView imageView;
}
}
На самом деле я нашел решение с:
if(pack.getImageName().equals("null")){
holder.imageView.setImageBitmap(null);
}
Но когда я прокрутке на ListView, я могу видеть изображение в неправильном пункте, и мне нужно прокрутить еще раз, чтобы позвонить GetView в удалите изображение с предыдущим условием. Я хотел бы что-то более чистое: p
Заранее спасибо. И извините за мой плохой английский.
Этот вопрос связан с утилизацией взглядов. Чтобы избежать этой проблемы, вы можете использовать 'Picasso' или любую другую библиотеку загрузки изображений. –