2016-02-22 85 views
0

我想从MediaStore加载视频缩略图,但由于列表视图的转换/回收视图行为图像正在重复...在滚动上的不同位置上的相同图像在ListView中重复图像...从视频加载缩略图

这是我的适配器代码

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; 
    } 
} 

无论如何,我可以解决这个问题????? 从服务器早些时候在下载图像我解决了这个问题通过保持网址,异步绘制对象和异步任务的周参考但从存储加载如何来解决这个问题

回答

2

时,请尝试这个

变化getView喜欢这种方法。

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;作为类级变量。 希望它有帮助。谢谢。请参阅此处。 https://androidruler.wordpress.com/2016/02/21/android-custom-listview-example/

相关问题