【问题标题】:Downloading Image only for visible row in List View仅为列表视图中的可见行下载图像
【发布时间】:2013-03-18 19:11:43
【问题描述】:

我有一个自定义列表,显示图像和文本和图像的每一行都必须从服务器下载。

所以我自定义了我的适配器,并在 getView 方法中启动了一个异步任务来下载图像。

但问题是,如果列表中有 50 项,那么如果我一次从列表中的第 1 项滚动到第 50 项,

然后对于每一行,它将开始下载图像,无论该行是否薄,甚至没有显示...

那么有什么办法可以解决这个问题???

任何帮助将不胜感激

谢谢

【问题讨论】:

    标签: android android-listview listadapter download


    【解决方案1】:

    这是一个众所周知的问题。阅读Lazy Image Loading 并找到类似的问题。这不是很明显的问题,特别是当您添加 convertView 使用等时。

    一个快速的解决方法 - 我建议在 ThreadExecutor 上下载图像,例如最多 4 个线程,并取消所有不再需要的任务。当您使用 convertView - 您可以使用 setTag(asyncTask) 将任务附加到视图并在新任务出现时取消它。您还可以使用 LRU 缓存来存储一些图像,而不是在每次滚动列表时加载它们。

    【讨论】:

      【解决方案2】:

      getView 仅对可见行调用。因此,如果您从那里开始下载,它只会下载显示的视图。注意:永远不要自己调用适配器的getView,你会导致listView出现大问题。

      【讨论】:

      • 我想我还没有理解你的解决方案....请帮助我....当我滚动浏览时,每个 ro 对我们都是可见的,所以应该调用 get view 并下载应该从它开始.....所以如果去第50个项目然后......
      • 好吧,如果您正在滚动浏览,您将在每一行变得可见时将其衬托。这是预期的行为。如果您不滚动,那么您将不会触发这些请求。这是预期的行为 - 当您滚动时,您会想要获取这些图像,不是吗?如果您的问题是旧请求仍然存在,您需要重新架构以使用后台线程(而不是异步任务)进行下载,如果在处理它时位置不可见,则让它跳过请求.
      • 是的,现在我已经清楚地理解了,我想现在 listview.isRowVisible 中有 API ......有用于第一行和最后一行可见性的 API......所以这是一个好方法 startDownloadingImage (){ 休眠线程 1 秒检查 thisRow 是否位于第一个可见行和最后一个可见行之间,如果是 --> 开始下载,否则什么都不下载....请建议是否有更好的方法谢谢
      • 是的。第一个是在getFirstVisiblePosition(),然后可以用getChildCount()获取可见位置的个数
      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2014-07-04
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2013-04-17
      相关资源
      最近更新 更多