Android Listview动态加载的图像-第一个列表项显示Listview中加载的所有图像,然后清除

Android Listview动态加载的图像-第一个列表项显示Listview中加载的所有图像,然后清除,android,listview,android-listview,Android,Listview,Android Listview,因此,我从每个listview项目的URL动态加载图像 问题: 我似乎有一个错误,在加载listview时,第一个listview项目的ImageView会在所有listview项目的所有图像中闪烁。在加载完所有项目后,listview项目会一个接一个地显示它们的图像,而第一个项目会获得正确的图像 我不知道发生了什么,为什么会这样 这是我的图像加载任务 private class DownloadImageTask extends AsyncTask<String, Void, Bitma

因此,我从每个listview项目的URL动态加载图像

问题:

我似乎有一个错误,在加载listview时,第一个listview项目的ImageView会在所有listview项目的所有图像中闪烁。在加载完所有项目后,listview项目会一个接一个地显示它们的图像,而第一个项目会获得正确的图像

我不知道发生了什么,为什么会这样

这是我的图像加载任务

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    private final WeakReference bmImage;

    public DownloadImageTask(ImageView image) {
        bmImage = new WeakReference(image);
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap bitmap ) {
        if (isCancelled()) {
            bitmap  = null;
        }

        if (bmImage != null) {
            ImageView imageView = (ImageView)bmImage.get();

            // if the imageView was not retrieved
            if (imageView != null) {

                // if the image source is not empty
                if(bitmap != null){
                    imageView.setImageBitmap(bitmap);
                }else{
                    // set placeholder image
                    imageView.setImageDrawable(imageView.getContext().getResources()
                            .getDrawable(R.drawable.social_eyes_bare_owl));
                }
            }
        }
    }
}
私有类下载ImageTask扩展异步任务{
私人最终WeakReference bmImage;
公共下载ImageTask(ImageView图像){
bmImage=新的WeakReference(图像);
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon11=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon11=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon11;
}
受保护的void onPostExecute(位图){
如果(isCancelled()){
位图=空;
}
如果(bmImage!=null){
ImageView ImageView=(ImageView)bmImage.get();
//如果未检索到imageView
如果(imageView!=null){
//如果图像源不是空的
if(位图!=null){
设置图像位图(位图);
}否则{
//设置占位符图像
imageView.setImageDrawable(imageView.getContext().getResources())
.getDrawable(R.drawable.social_-eyes_-bare_-owl));
}
}
}
}
}

我在使用类似的图像下载程序时遇到了同样的问题。问题可能不在下载程序中,而是在您从中输入URL的位置。因此,如果可能,您可以更新调用此图像加载器的代码。

将位图图像存储到列表的一个属性中,并在
getView
方法中从中读取,而不是传递
ImageView
@shayanpourvatan,您能详细说明一下吗?嗨,乔治,您解决过这个问题吗?有一个非常相似的问题。