Android: 是否possible/advised 与来自 Adapter 的 Bound Service 进行交互?
Android: is it possible/advised to interact with a Bound Service from Adapter?
我有一些由数据 class 建模的复杂数据,具有不可变和可变字段:
data class book (
val ISBN: String,
val Author: String,
...
var borrowed: Boolean
)
我正在尝试找到一种方法在 RecyclerView 中显示它的多个实例。
我认为 Adapter 唯一关心的是 display 数据,但是,传递一大堆对象对我来说似乎并不明智,特别是因为并非所有实例的所有字段都需要待展示。
所以我决定使用 ISBN 列表作为 Adapter 的 DataSet,并在需要时从 Bound Service 中获取相应的对象。
但是,我不确定这是正确的方法,因为适配器没有明确的生命周期,而且我不知道从哪里 bind/unbind 到服务。
那么问题就变成了:
在 Android 适配器中,我应该在哪里绑定到绑定服务,以便获取要显示的数据?这样做是不是某种设计异端?
我认为你做错了。你想做的方式在性能方面真的很糟糕。
传递一大堆对象对你来说似乎不太明智,但这是使用回收视图以获得最佳性能并避免奇怪行为的正确方法。
如果您想从服务中检索数据:
- 使用空数据集初始化您的 recyclerview(正在加载 ...)
- 运行 您检索数据集的服务
- 通知您的 activity 并传递您的数据集
- 您的活动使用新数据集更改了您的 recyclerview 适配器
- 你的 recyclerview "notifyDataSetChanged()" 显示新数据集
我有一些由数据 class 建模的复杂数据,具有不可变和可变字段:
data class book (
val ISBN: String,
val Author: String,
...
var borrowed: Boolean
)
我正在尝试找到一种方法在 RecyclerView 中显示它的多个实例。
我认为 Adapter 唯一关心的是 display 数据,但是,传递一大堆对象对我来说似乎并不明智,特别是因为并非所有实例的所有字段都需要待展示。
所以我决定使用 ISBN 列表作为 Adapter 的 DataSet,并在需要时从 Bound Service 中获取相应的对象。
但是,我不确定这是正确的方法,因为适配器没有明确的生命周期,而且我不知道从哪里 bind/unbind 到服务。
那么问题就变成了: 在 Android 适配器中,我应该在哪里绑定到绑定服务,以便获取要显示的数据?这样做是不是某种设计异端?
我认为你做错了。你想做的方式在性能方面真的很糟糕。
传递一大堆对象对你来说似乎不太明智,但这是使用回收视图以获得最佳性能并避免奇怪行为的正确方法。
如果您想从服务中检索数据:
- 使用空数据集初始化您的 recyclerview(正在加载 ...)
- 运行 您检索数据集的服务
- 通知您的 activity 并传递您的数据集
- 您的活动使用新数据集更改了您的 recyclerview 适配器
- 你的 recyclerview "notifyDataSetChanged()" 显示新数据集