exe*_*nza 2 android viewmodel android-livedata
视图模型中字段的推荐模式似乎是:
val selected = MutableLiveData<Item>()
fun select(item: Item) {
selected.value = item
}
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,该selected字段不是私有的,这是正确的吗?)
但是如果我不需要订阅 ViewModel 字段中的更改怎么办?我只需要被动地将这个值拉到另一个片段中。
我的项目详细信息:
视图模型:
private var amount = 0
fun setAmount(value: Int) { amount = value}
fun getAmount() = amount
Run Code Online (Sandbox Code Playgroud)
片段1:
bnd.button10.setOnClickListener { viewModel.setAmount(10) }
Run Code Online (Sandbox Code Playgroud)
片段2:
if(viewModel.getAmount() < 20) { bnd.textView.text = "less than 20" }
Run Code Online (Sandbox Code Playgroud)
这是一种有效的方法吗?或者有更好的吗?或者我应该只使用 LiveData 或 Flow?
也许我应该使用SavedStateHandle?它可以注入到 ViewModel 中吗?
为了回答你的问题,
不,并不强制在 ViewModel 中始终使用 LiveData,它只是一种可观察的模式,用于通知调用者有关数据更新的信息。如果您有一些不会经常更改并且可以通过其实例访问的内容。您可以完全忽略将其包装在 LiveData 中。无论如何,ViewModel 实例及其内部的值都会被保留。
对于私有字段,MutableLiveData永远不应该暴露在类之外,因为数据流始终来自 VM -> View,这就是 MVVM 模式的美妙之处
private val selected = MutableLiveData<Item>()
val selectedLiveData : LiveData<Item>
get() = selected
fun select(item: Item) {
selected.value = item
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3096 次 |
| 最近记录: |