【问题标题】:Update ImageView Async while Loading ListView加载 ListView 时更新 ImageView 异步
【发布时间】:2013-10-02 13:59:39
【问题描述】:

这篇文章是关于 Android 的。 以下是正在发生的事情:

我正在加载 JSON 并将其放入 ListView。现在,这个 ListView 中的一个项目基本上是一个 ImageView 和一个 TextView。

因为 ImageView 的图片最大可以达到 2MB,所以我想在加载 ListView 之后再加载 ImageView 的 Drawable 异步(也做了异步)。

我应该怎么做?我已经创建了 2 个 AsyncTask,一个用于加载列表,另一个用于加载基于 URL 的 Drawable。两者都有效,但我不知道如何通知 ListView Drawable 已更新。

目前,当我向下滚动并且项目消失时,Drawable 会显示。然后我向后滚动,我看到图像已更新。我认为这是因为我在 getView (ArrayAdapter) 中“设置”了图像,并且当项目进入视图时会调用此 get。

所有数据都存储在 BlablaItem 的 ArrayList 中。 假设 BlablaItem 包含“String title”、“String imageUrl”和“Drawable image”。 完美的是在类中更新这个 Drawable 并且 ListView 也会自动更新它......

所以我的问题是如何很好地完成这一切,在哪里为 Drawable 创建我的 AsyncTask(当前在处理 JSON 的循环中),在哪里创建我的 AsyncTask(当前在 ArrayAdapter 构造函数中)以及如何向 ListView 发出信号Drawable 已更新。

【问题讨论】:

标签: android listview android-listview android-asynctask


【解决方案1】:

如果 listadpater 持有这个 blablaItems 的 ArrayList,那么在添加新的可绘制对象后,在适配器上调用 notifyDatasetChanged 就足够了。

【讨论】:

  • 是的,这就是我现在所做的。我讨厌使用外部库,所以我最终使用了一个 ArrayList,更新这个并在添加项目时调用 notifyDatasetChanged。加载所有项目完成后,它将执行另一个异步任务,该任务依次循环遍历所有项目,更新 Drawable 并在每个项目之间调用 publishProgress,这样您将看到每个图像一个接一个地快速加载。我只是在 onProgressUpdate 中调用 notifyDataSetChanged 以便它会更新。我还使用 Bitmap.createScaledBitmap 将位图缩小到 100x100 以防止 OutOfMemory
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2023-03-07
  • 2015-11-24
  • 2017-04-12
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多