Ich möchte Elemente mit einem Adapter in einem ListView anzeigen, aber wenn GetView im ArrayAdapter aufgerufen wird, zeigt es das gute Bild, aber nicht auf das gute Element beim Scrollen. Es ist wie wenn die findViewById mir die gute ID des Layouts nicht geben würde.Android ListView getView Anzeige Bild nach dem Zufallsprinzip
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;
}
}
Eigentlich fand ich eine Lösung mit:
if(pack.getImageName().equals("null")){
holder.imageView.setImageBitmap(null);
}
Aber wenn ich auf dem Listview verschiebe, kann ich das Bild in dem falschen Artikel sehen, und ich muß wieder blättern getView rufen Löschen Sie das Bild mit der vorherigen Bedingung. Ich möchte etwas sauberer: p
Vielen Dank im Voraus. Und Entschuldigung für mein schlechtes Englisch.
Das Problem ist, bis hin zum Recycling von Ansichten durch. Sie können Picasso oder eine andere Bibliothek zum Laden von Bildern verwenden, um dieses Problem zu vermeiden. –