我想做的是创建一个烹饪警报应用程序。
我正在使用MVVM体系结构,并希望通过LiveData更新它。
这是我的警报类别。每隔一秒钟,item
内部的所有data
将被触摸,并应调用tick
。 tick
将更新timeLeft
,应将其反映到UI上。但是,屏幕的其他组件应保持不变。
唯一定期更新的是代表剩余时间的文本(我尚未编写将代码从int转换为字符串的代码)。确保回收者视图仅更新时间并且不浪费时间重新设置图像和项目名称的最佳方法是什么?
class Alarm(item: Item, private val context: Context, val notifyID: Int) {
var timeLeft = item.timeInSec
val name = item.name
val imageUri = item.imageUri
var isFinished = false
// count down goes down every seconds
fun tick() {
timeLeft--
if (timeLeft <= 0) {
onFinish()
}
}
fun onFinish() {
isFinished = true
}
}
一般的想法是,您的回收站视图将包含具有自己逻辑的片段,以使自己与秒保持最新。
这些片段将成为视图模型的所有者。视图模型包含滴答秒数(实时数据)。然后,片段将观察实时数据并更新其UI。
当您需要添加新计时器时,活动应将新列表元素添加到回收者视图适配器,并且回收者视图将被更新。
如果您需要有关任何组件的更多详细信息,请告诉我。
Alarm
类可能应该扩展ViewModel
,如果您使用的是MVVM。