android listview 适配器 asynctask 图像加载

Posted

技术标签:

【中文标题】android listview 适配器 asynctask 图像加载【英文标题】:android listview adapter asynctask image load 【发布时间】:2016-01-26 23:31:52 【问题描述】:

我遇到的问题是:

当我在加载一个项目的(比如 x)图像视图之前滚动列表视图,然后在滚动之后,该项目的 (x) 图像被加载并在其他项目的(比如 y)图像视图中显示一小段时间,直到该项目(y) imageview 未加载。

我正在使用 android 通用图像加载器库。我的列表视图 游标适配器 的 bindView 中有以下异步任务:

@Override
public void bindView(View view, Context context, Cursor cursor) 
...
    ImageView imageView = (ImageView) view.findViewById(R.id.icon);
    new DownloadImageAsyncTask(url, imageView).execute();
...


private class DownloadImageAsyncTask extends AsyncTask<Void, Void, Bitmap> 

        String image_link;
        ImageView imageView;
        final WeakReference<ImageView> viewReference;

        public DownloadImageAsyncTask(String image_link, ImageView imageView) 
            this.image_link = image_link;
            this.imageView = imageView;
            viewReference = new WeakReference<ImageView>( imageView );
        

        @Override
        protected Bitmap doInBackground(Void... params) 
            ... // downloading bitmap here
        

        @Override
        protected void onPostExecute(Bitmap bitmap) 

            ImageView imageView = viewReference.get();
            if( imageView != null ) 

                ImageLoader imageLoader = ImageLoader.getInstance();

                DisplayImageOptions options = new DisplayImageOptions.Builder()
                        .cacheOnDisk(true).cacheInMemory(true)
                        .showImageOnFail(R.drawable.ic_contact_picture)
                        .displayer(new FadeInBitmapDisplayer(300)).build();

                imageLoader.displayImage(image_link, imageView, options); // new options will be used
                
        

为什么应该在项目 x 中的图像在项目 y 中显示很短的时间(在加载项目 x 图像之前滚动时)?

列表视图项的内部回收是否会导致问题?

【问题讨论】:

你能显示你的适配器的getView吗? 你有一张包含图片的大清单吗? @JellevanEs 我正在使用光标适配器,它没有 getView @PedroAGSantos 我有大约 50 个项目,每个项目都有一个图像视图 您的 Viewholder 模式可能有误。或者您可能忘记为加载图像设置空图像。也使用 Picasso 或 Glide 库。它们是异步显示图像的最佳库。 【参考方案1】:

问题似乎出在 Android 通用图像加载器库上。我刚搬到毕加索。

【讨论】:

以上是关于android listview 适配器 asynctask 图像加载的主要内容,如果未能解决你的问题,请参考以下文章

Android-ListView两种适配器以及事件监听

android ListView 用法

android中的listview计数与适配器计数

带有arraylist的listview,android中的简单适配器

带有自定义适配器的 Android ListView 有视觉故障

如何修复动态适配器包装器 Android 中的 notifyDataSetChanged/ListView 问题