Dan
Dan

Reputation: 11

Repeating Images in ListView...Loading Thumbnails from Videos

I am trying to Load Video thumbnails from MediaStore but due to the converting/recycling view behavior of List Views Images are Getting Repeated...Same Images at different positions on scrolling

Here is my Adapter Code

public class VideoListAdapter extends BaseAdapter {

    private ArrayList<VideoDetails> mVideosList;
    private Context mContext;
    private LayoutInflater mLayoutInflater;
    ContentResolver crThumb;
    private float mSize;

    BitmapFactory.Options options=new BitmapFactory.Options();


    public VideoListAdapter(ArrayList<VideoDetails> mVideosList, Context mContext) {
        this.mVideosList = mVideosList;
        this.mContext = mContext;
        mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        options.inSampleSize = 1;
        crThumb = mContext.getContentResolver();
    }

    @Override
    public int getCount() {
        return mVideosList.size();
    }

    @Override
    public Object getItem(int position) {
        return mVideosList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView == null)
        {
            holder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.video_row_layout,null,false);
            holder.mVideoTitleTextView = (TextView) convertView.findViewById(R.id.VideoTitleTextView);
            holder.mVideoSizeTextView = (TextView) convertView.findViewById(R.id.videoSizeTextView);
            holder.mVideoThumbImage = (ImageView) convertView.findViewById(R.id.videoThumbImageView);
            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.mVideoTitleTextView.setText(mVideosList.get(position).getTitle());
        mSize = Float.parseFloat(mVideosList.get(position).getVideoSize());
        holder.mVideoSizeTextView.setText(" Size(MB):"+mSize/1024*1024);
        Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb, mVideosList.get(position).getVideoId(), MediaStore.Video.Thumbnails.MICRO_KIND, options);
        holder.mVideoThumbImage.setImageBitmap(curThumb);
        return  convertView;
    }

    private static class ViewHolder
    {
        TextView mVideoTitleTextView;
        TextView mVideoSizeTextView;
        ImageView mVideoThumbImage;
    }
}

Anyway I can Solve this Problem...???? Earlier While Downloading Images from server I solved This Problem By Keeping Week References of Url,Async Drawable and Async Task But when loading from storage How to solve this Issue

Upvotes: 1

Views: 332

Answers (1)

Jagjit Singh
Jagjit Singh

Reputation: 1969

Please try this

Change getView Method like this.

public View getView(int position, View convertView, ViewGroup parent) {
    view=convertView;
    ViewHolder holder;
    if(convertView == null)
    {
        holder = new ViewHolder();
        view = mLayoutInflater.inflate(R.layout.video_row_layout,null,false);
        holder.mVideoTitleTextView = (TextView) convertView.findViewById(R.id.VideoTitleTextView);
        holder.mVideoSizeTextView = (TextView) convertView.findViewById(R.id.videoSizeTextView);
        holder.mVideoThumbImage = (ImageView) convertView.findViewById(R.id.videoThumbImageView);
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.mVideoTitleTextView.setText(mVideosList.get(position).getTitle());
    mSize = Float.parseFloat(mVideosList.get(position).getVideoSize());
    holder.mVideoSizeTextView.setText(" Size(MB):"+mSize/1024*1024);
    Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb, mVideosList.get(position).getVideoId(), MediaStore.Video.Thumbnails.MICRO_KIND, options);
    holder.mVideoThumbImage.setImageBitmap(curThumb);
    return  view;
}

And Declare View view=null; as class level variable. Hope it helps. thanks. Refer here. https://androidruler.wordpress.com/2016/02/21/android-custom-listview-example/

Upvotes: 1

Related Questions