【问题标题】:Android ListView with AsyncTask image issue带有 AsyncTask 图像问题的 Android ListView
【发布时间】:2013-11-29 02:44:38
【问题描述】:

我有一个 ListView,它显示电话簿中的某些联系人。我使用这个https://stackoverflow.com/a/10235381/1809507 作为缓存类并使用AsyncTask。

当联系人没有照片时,我会使用默认照片。我在 XML 中设置了默认值。当我使用以下方法设置联系人照片时,仅当它存在并且我滚动列表视图时,那些没有照片的联系人开始获取其他联系人照片。如果我从retrieveContactPhoto 方法中获取默认照片为Bitmap 而不是null 并分配给imageview,它会很好用,但我认为当有很多联系人没有照片时这不是一个好的解决方案,因为我会多次缓存同一张默认照片。还是我错了?

@Override
    protected Bitmap doInBackground(Void... args)
    {
        Bitmap bm = HelpClasses.retrieveContactPhoto(contextInput, HelpClasses.fetchContactIdFromPhoneNumber(contextInput, phoneNumber));
        if(bm != null)
        {
            synchronized (cache)
            {
                cache.put(phoneNumber, bm);
            }

        }
        return bm;
    }

@Override
protected void onPostExecute(Bitmap result)
{
    if(mView != null && result != null)
    {
         mView.setImageBitmap(result);
    }
}

【问题讨论】:

  • 正如你在我的代码中看到的那样,我已经有了 fetchContactIdFromPhoneNumber 的方法,然后从联系人 ID 中检索ContactPhoto。

标签: android android-listview android-asynctask android-lru-cache


【解决方案1】:

我想你正在寻找这个库:https://github.com/nostra13/Android-Universal-Image-Loader

或者,您可能想要一个更“谷歌”的:https://code.google.com/p/libs-for-android/wiki/ImageLoader

您可以将所有图像绑定、获取、缓存内容留给库。

【讨论】:

  • 非常感谢,但是这个库也会缓存默认照片。我认为这是不必要的,我想让 XML 中的默认照片不再从缓存或 sdcard 中分配。
  • 默认图片缓存在内存中,所有图片视图都会引用同一个实例。
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多