我在将数据更新到回收器视图时遇到问题。
class DiffUtilCallback : DiffUtil.ItemCallback<SectorItemDataUI>() {
override fun areItemsTheSame(oldItem: SectorItemDataUI, newItem: SectorItemDataUI): Boolean {
return oldItem.sectorId == newItem.sectorId
}
override fun areContentsTheSame(oldItem: SectorItemDataUI, newItem: SectorItemDataUI): Boolean {
return oldItem == newItem
}
}
字符串
在viewModel中,我有liveData
private val _sectorItem: MutableLiveData<MutableList<SectorItemDataUI>> =
MutableLiveData()
val sectorItem: LiveData<MutableList<SectorItemDataUI>> get() = _sectorItem
型
我有这个方法来更新值(只有温度或湿度)
private fun updateMeasurementItem(measurement: List<NetworkMeasurement>) {
val lastMeasurement = measurement.lastOrNull() ?: return
_sectorItem.value = _sectorItem.value.also {
it?.find { item -> item.temperatureSensorId == lastMeasurement.sensorId }?.temperature =
lastMeasurement.value.toString()
it?.find { item -> item.humiditySensorId == lastMeasurement.sensorId }?.humidity =
lastMeasurement.value.toString()
}
}
型
在片段中,我将列表更新为TE recycler
viewModel.sectorItem.observe(viewLifecycleOwner) {
homeSectorAdapter.submitList(it)
}
型
但是由于某些原因,回收器中的数据没有更新。
如果我创建了新的数据示例,回收器会正确地更新数据。但是我知道这不是一个好的做法,所以我不想这样做。
private fun setupObservers() {
viewModel.sectorItem.observe(viewLifecycleOwner) { data ->
val aux: MutableList<SectorItemDataUI> = mutableListOf()
data.forEach {
aux.add(
SectorItemDataUI(
it.sectorId,
it.sectorName,
it.temperature,
it.temperatureSensorId,
it.humidity,
it.humiditySensorId
)
)
}
homeSectorAdapter.submitList(aux)
}
}
型
1条答案
按热度按时间q8l4jmvw1#
你的代码看起来不错,可能是适配器中的update方法。
试试这样的东西:
字符串
clear和addAll用于完全更新模型,diffUtil用于告诉适配器必须更新视图中的哪些项(仅完全更新内容或ViewHolder)。