android - 在 ListView 中重复图像...正在从视频中加载缩略图

标签 android listview bitmap mediastore

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

这是我的适配器代码

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

无论如何我可以解决这个问题...???? 早些时候从服务器下载图像时,我通过保留 Week References of Url、Async Drawable 和 Async Task 解决了这个问题但是当从存储加载时如何解决这个问题

最佳答案

请试试这个

像这样更改 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;
}

并声明 View view=null;作为类级别变量。 希望能帮助到你。谢谢。引用这里。 https://androidruler.wordpress.com/2016/02/21/android-custom-listview-example/

关于android - 在 ListView 中重复图像...正在从视频中加载缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562874/

相关文章:

android - 在Android中定义RelativeLayout View 的Z顺序

android - 我想在运行时在屏幕上显示多个标记,这些标记具有从服务器接收到的不同 ID

android - android 中使用 arraylist 项的 ListView 问题

android - 在 Android camera2 下将 YUV_420_888 转换为位图的图像不正确

c++ - 使用 GDI+ 的图层

android - 如何从 imageView Android 中获取位图的真实坐标(X,Y)

java - 如何从 android spinner 获取文本?

android - 支持 1.5 目标屏幕,无法使应用程序不缩放

android 闹钟在 onReceive 期间死亡

listview - Wicket listview 跳过 `list` 标签