如何使用 RecyclerView 显示下载列表?

问题描述

  • 我需要跟踪和更新从某个 Api(无法共享)获取的列表中多个文件的下载状态(开始、暂停、播放、完成),并将其更新到 RecyclerView。

  • 我也得到了一个 fileId 以便可以区分每个文件。

  • 我需要基于 fileId 的下载跟踪,因为下载列表也是可搜索的,这意味着项目的位置会改变,所以我们不能依赖基于位置的 ViewHolder 刷新.

  • 此外,如果您出于某种原因关闭了应用程序,然后返回列表,搜索文件,它应该会显示文件下载状态。

  • 现在有三个选项:
    a) 基于 WorkManager 的实现(如何实现这个选项?)
    b) PRDownloader(如何实现这个选项?)
    c) 还是安卓的下载管理器? (需要确保我们需要在 列表中的同一时间。)

  • 哪个更好、更可靠?

  • 哪种方法最短?

    如果您有基于工作经理的代码,也有人可以分享吗?(如何 您能否将 fileId 与 workManger 的工作 ID 相关联。我是吗 需要制作一个数据库表来跟踪 Worker 的下载吗? 如何使用 workManager 中的 LiveData,如果我们可以在 ViewHolder 中 )

[参考博客/代码/回购将是最有帮助的]

解决方法

回答我自己的问题(奇怪!)。

  1. 我使用了 Fetch Downloader Library
  2. 初始化并使用“获取实例”作为单例
  3. 使用标签添加了下载(也许我错误地使用了标签。它应该用于一组下载。但我为每个下载使用了一个标签。但它起作用了。)
  4. 现在我在 ViewHolder 的 bind() 方法中做了以下操作:
  • 将文件 ID 作为“标签”并删除链接到的 FetchObserver “标签”即Id使用“获取实例”的方法(//将更新 方法)
  • 然后再次在“Fetch 实例”使用 Id 作为“标签”。(getDownloadsByTag() 方法)
  • 如果有下载,您将收到一个下载列表,其第 0 个 element 将成为您的下载,因为我每次下载都使用一个标签 而不是团体。
  • 现在再次添加 FetchObserver “标签”。
  • 在 FetchObserver 的 lambda 中,更新进度和其他值。

注意:不能出于非公开目的共享代码。如果您觉得这令人困惑,可以分享一些小片段。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...