【发布时间】:2021-09-12 17:29:37
【问题描述】:
我的更改监听器有一个生命周期,为了不将它们保存在内存中,我想我需要添加一个方法,例如 removeItemChangeListener 并调用它,例如,在 onClear 的方法中视图模型。据我所知,onClear 方法被覆盖为活动的onCreate。另外,在我看来,我需要将侦听器类型转换为接口。
MyItemsRepository.kt
interface MyItemsRepository {
val items: List<ItemModel>
fun setFavorite(itemModel: ItemModel, isFavorite: Boolean)
fun addItemChangeListener(listener: () -> Unit)
}
ContentViewModel.kt
class ContentViewModel(
private val repository: MyItemsRepository
) : ViewModel() {
private val _items: MutableLiveData<List<ItemModel>> = MutableLiveData()
val items: LiveData<List<ItemModel>>
get() = _items
var isFavorite: Boolean = false
init {
repository.addItemChangeListener {
getItems()
}
}
fun changeFavoriteState(item: ItemModel, favorite: Boolean) {
repository.setFavorite(item, favorite)
}
fun getItems() {
_items.value = if (isFavorite) {
repository.items.filter { it.isFavorite }
} else {
repository.items
}
}
class Factory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return ContentViewModel(MyItemsRepositoryImpl.getInstance()) as T
}
}
}
我需要您的帮助来编写代码。我心里明白怎么做,但我不知道怎么写。非常感谢您提供带有解释的书面示例。
【问题讨论】:
-
我对你的实现感到困惑,你为什么要使用
interface& listeners。您不能通过创建存储库类并将其视为本地数据源并使用它来实现您想要的任何东西吗?如果您正在关注任何教程,可能会在帖子中提及其链接。对于这么小的架构,您似乎正在增加复杂性。 -
也许解释一下你的用例,你想在这里实现什么?
-
@ParagPawar 我正在回答您关于本地数据源的问题。事实是,我的任务是创建您在我的代码中看到的内容,而我现在才致力于纠正任何 cmets。我知道我的管理层已经安排好了一切,因此我只需要按照我上面写的去做。不需要重写监听器类型,可能,这些只是我的猜测。
标签: android kotlin listener viewmodel