【问题标题】:Should I use broadcast receiver inside a recycler view row to update download progress of that item?我应该在回收站视图行中使用广播接收器来更新该项目的下载进度吗?
【发布时间】:2019-06-22 11:53:25
【问题描述】:

我有一个可下载列表项的回收站视图。我可以想到两种方法来更新第 n 个位置的行状态-

  • 我可以在适配器中创建一个方法来更新第 n 个位置的 ArrayList 项目并设置它的进度。我想避免它,因为我正在使用房间实时数据,所以我不想直接更新行,因为对 db 的任何更改都会恢复我所做的更新。

  • 当用户单击下载 btn 并从下载服务发送进度广播时,我可以在每个下载列表项中注册广播接收器。但是滚动时会产生问题。此外,在取消注册接收器时也存在问题,因为我不确定何时该做。

建议正确的做法?回收站视图不固定,所以我需要确保滚动时它不会闪烁或显示错误的进度。

【问题讨论】:

  • 我能想到的一种方法是在活动中注册广播接收器并更新每个适配器项目,调用 notifyItemChanged(pos)。这样,您可以更好地控制广播的注册/注销。将其保留在每个行项中都不是解决方案。
  • 但问题是,如果在 db 中更改任何项目,它将重置所有行的状态,因为我正在使用房间

标签: android android-recyclerview memory-leaks


【解决方案1】:

解决了简单地创建 broardcase 接收器作为持有者上的实例变量并存储引用,以便我可以在 Activity 被销毁时取消注册。这也解决了内存泄漏问题。

【讨论】:

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