【问题标题】:unique item view in ListviewListview 中的唯一项目视图
【发布时间】:2016-06-14 00:54:17
【问题描述】:

我有一个列表视图。该 Listview 中的每个视图项都有一个进度条,该进度条将由某些线程进行更新。由于列表视图重用视图(没有唯一视图),当添加新项目和滚动列表视图时,线程会更新意外视图。

我想知道如何创建一些独特的视图,每个线程将只更新列表视图中的给定视图?

【问题讨论】:

    标签: android multithreading listview


    【解决方案1】:

    默认情况下,Listview 不会像 recyclerview 那样重用视图,因为 listview 依赖于使用 ViewHolder 模式的实现者来实现重用。简单地不要使用 viewholder 模式,每个列表项都会收到自己的视图。请注意不要在包含太多并发项目的列表中执行此操作。 Viewholder 成为事实上的标准是有原因的。

    【讨论】:

    • 这就是问题所在。我不能保证用户不会放 25 件物品。避免内存泄漏。我更喜欢找到一种方法来操纵回收的视图,使其具有独特性。
    • 首先想到的是维护当前正在由后台线程更新的视图列表,并确保在更新完成之前永远不会回收这些视图。
    • 我已经尝试过这种技术,但没有成功。我知道我可以在我的适配器的 getView() 中做一些事情。但是,当列表视图被滚动时,添加或删除了一些项目,getView() 得到调用,我不能返回 null。我已经比较了实际位置的项目并在实际后台任务中返回了视图,但是该视图被复制或替换了另一个视图。似乎 Android 重用了我的线程视图。
    • 我想过添加headerview,但是将适配器设置为listview后无法添加header。
    • 我的实际代码几乎可以通过在 getView() 中放置一个侦听器并将 getView() 中的项目与实际线程中的项目进行比较来工作。如果项目相等,那么线程将更新从侦听器回调中获取的视图。我唯一的问题是,当我滚动列表视图时,线程更新了另一个视图,其进度与预期的相同。而且我不明白即使项目不相等,它如何更新视图。
    【解决方案2】:

    我只是想看看class。将要更新的视图放在标题列表中。完成后,将其放回适配器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多