ListView mit ViewHolder, ImageViews und AsyncTask

C

CoffeeCode

Ambitioniertes Mitglied
2
Ich habe eine ListView deren ListItem 4 ImageViews besitzt. Damit das Laden flüssig abläuft habe ich einen AsyncTaks für die Thumbnails und einen ViewHolder eingebaut.

Das Problem an meiner Implementation ist das die ImageViews beim hin und her Scrollen auf einmal verschwinden und an der falschen Stelle angezeigt werden.
Ich finde den Fehler leider nicht, vermute allerdings das es was mit dem AsyncTask und dem ViewHolder zu tun hat.

Code: CollectionListAdapter.java
 
Hier der wichtige Code auf einen Blick. Den gesammten gibts im Link oben.

Code:
 @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        Collection collection = collectionList.get(i);

        Log.d(TAG, "element : " + i + " folderpath :" + collection.getFolderPath());
        ViewHolder holder;

        if(view == null){
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.item_collection_row, null);
            holder = new ViewHolder();
            holder.name = (TextView) view.findViewById(R.id.textViewName);
            holder.date = (TextView) view.findViewById(R.id.textViewDate);
            holder.location = (TextView) view.findViewById(R.id.textViewLocation);
            holder.active = (TextView) view.findViewById(R.id.textViewActiveCollection);
            holder.count = (TextView) view.findViewById(R.id.textViewImageCount);
            holder.imageView[0] = (ImageView) view.findViewById(R.id.imageViewThumb0);
            holder.imageView[1] = (ImageView) view.findViewById(R.id.imageViewThumb1);
            holder.imageView[2] = (ImageView) view.findViewById(R.id.imageViewThumb2);
            holder.imageView[3] = (ImageView) view.findViewById(R.id.imageViewThumb3);
            holder.position = i;
            view.setTag(holder);
        }
        else{
            holder = (ViewHolder) view.getTag();
            holder.imageView[0].setImageBitmap(null);
            holder.imageView[1].setImageBitmap(null);
            holder.imageView[2].setImageBitmap(null);
            holder.imageView[3].setImageBitmap(null);
        }

        holder.name.setText(collection.getName());
        holder.date.setText(collection.getDate());
        holder.location.setText(collection.getLocation());
        holder.count.setText(String.valueOf(getImageCount((collection))));

        imagePaths = MediaManager.getFirstFourImagePaths(collection.getFolderPath());
        new ThumbnailTask(i, holder).execute(imagePaths);


        //highlighten um active collection vorzuheben
        //TODO kann in Fragment umgelagert werden listview.setSelected(i, true)....
        if( ((int)collection.getId()) == activeCollectionId){
            holder.active.setVisibility(View.VISIBLE);
            //view.setBackgroundColor(context.getResources().getColor(R.color.collection_highlight));
        }
        else{
            holder.active.setVisibility(View.INVISIBLE);
            //view.setBackgroundColor(context.getResources().getColor(R.color.bg_gray));
        }
        return view;
    }
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.021
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
128
swa00
swa00
D
Antworten
9
Aufrufe
1.767
jogimuc
J
Zurück
Oben Unten