Reputation: 11
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
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