android listview适配器asynctask图片加载

时间:2015-10-27 13:55:42

标签: android android-listview android-asynctask android-adapter

我得到的问题是:

当我滚动列表视图时,在加载项目(例如x)图像视图之前,滚动后,该项目的(x)图像被加载并显示在其他项目(例如y)的图像视图中,持续很短的时间直到该项目(y)未加载imageview。

我正在使用Android Universal Image Loader库。我在listview 游标适配器的bindView中有以下asynctask:

@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图像之前滚动时)?

listview项目的内部回收会导致问题吗?

1 个答案:

答案 0 :(得分:0)

问题似乎与Android Universal Image Loader库有关。我刚搬到毕加索。