0

假设我有一个带有 LinearLayout 的 ImageView 和 TextView 列表。现在我正在使用简单的 ArrayAdapter 扩展,它将 Strig[][] 作为项目,它是一个双字符串数组(每个条目包含 String[2],其中第一个字符串是图像的 uri,第二个是文本。我覆盖 getView 以显示图像和文本,当然还有回收视图:-)。但是,由于图像加载,即使从资源加载可能很慢,我在异步任务中执行它,这意味着我加载了默认图像并且我使用:startLoading (这是我的方法),它赌注 ImageView 和 Uri 一次图像准备就绪,将其放置在图像视图中。

但是有时,由于它是一个列表,如果图像尚未加载并且我正处于过程的中间,那么停止加载是值得的,这是在我正在加载图像的行不再可见的情况下。

由于视图被回收,我无法检查 ImageView 是否可见,因为它可能是可见的,但具有不同的 Drawable ......有没有办法让我知道在某些时候我的行无效且不可见?有没有一种简单的方法或外壳我需要开始使用标志和标签模式以及类似的东西来发现我的行不再有效?

4

1 回答 1

1

我所做的是基于 ListView 如何管理它的视图。

由于 ListView 真正使用了一组有限的视图,并且可能通过 getView() 方法的 convertView 参数传递给我们的适配器,因此我实现了以下内容:

  • 我有一个 LinkedList 类成员,我在其中存储要加载的 Uris。这些 Uris 在 AsyncTask 成员中用于检索图片。
  • 在 getView() 中返回项目视图之前,我的适配器将项目图片的 Urin 放在 View.setTag(Object) 中。
  • 当我重用一个 convertView 时,在重用它的内容之前,我得到了以前使用 View.getTag() 链接到的 Uri,并从待处理的 Uris LinkedList 中删除了相应的元素。
于 2010-09-26T15:38:00.367 回答