android - ListView 中的 ImageViews 不显示

标签 android listview caching android-asynctask android-imageview

我有带有 EventAdapter 的 ListView。

public class EventAdapter extends BaseAdapter {
...
public View getView(int position, View view, ViewGroup parent) {
     ...
     cache.imgIcon.setImageDrawable(ImgCache.setImg(url, progressBar));
     ...
}

ImgCache 其类用于缓存图像。

public class ImgCache {
    public static HashMap<String, Drawable> imgCache;

    // get img from cache if exist, or download and put in cache
    public static Drawable setImg(final String link, final ProgressBar progressBar) {
        final Drawable[] image = {null};
        if (imgCache.containsKey(link)) {
            image[0] = imgCache.get(link);
            progressBar.setVisibility(View.INVISIBLE);
        } else {
            new AsyncTask<Void, Void, Drawable>() {
                @Override
                protected Drawable doInBackground(Void... params) {
                    URL url = null;
                    try {
                        url = new URL(link);
                        URLConnection connection = url.openConnection();
                        image[0] = Drawable.createFromStream(connection.getInputStream(), "src");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    imgCache.put(link, image[0]);
                    return image[0];
                }

                @Override
                protected void onPostExecute(Drawable result) {
                    progressBar.setVisibility(View.INVISIBLE);
                }
            }.execute();
        }
        return image[0];
    }
}

问题是什么?

在我使用 ListView 打开我的 Activity 之后,所有图像开始加载。但是加载完成后它们不显示。它看起来像:

enter image description here

然后我尝试向下滚动 2 个项目,然后返回到之前的位置。进行此操作后,我可以看到 2 个带图像的上部项目。当我滚动到它们时,所有向下的图像也都可见。

enter image description here

最佳答案

根据您的问题,您似乎需要在下载图像后刷新 ListView(因为当您滚动时它们会出现):

adapter.notifyDataSetChanged();

关于android - ListView 中的 ImageViews 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16039964/

相关文章:

java - 媒体播放器淡入

java - Android:Array Adapter 和 ListView,抛出一些奇怪的引用错误?

caching - Smarty 缓存与数据库内容错误

c# - 检查数据行中是否存在具有给定名称的列

java - 使用 Hazelcast 的多播对不同的 Web 应用程序使用相同的 hibernate L2 缓存

为多个应用程序提供服务的 Java 缓存

android - 对于 Android 应用程序,哪个是最好的 firebase 或 php 和 json with mysql?

android - flutter ,水平导航

java - 如何正确使用mediaPlayer?

listview - ListView中如何维护widget的状态?