Android 是否应始终在ViewModel中使用livedata?

Android 是否应始终在ViewModel中使用livedata?,android,viewmodel,android-livedata,Android,Viewmodel,Android Livedata,看起来viewmodel中字段的模式是: val selected = MutableLiveData<Item>() fun select(item: Item) { selected.value = item } 片段1: bnd.button10.setOnClickListener { viewModel.setAmount(10) } 片段2: if(viewModel.getAmount() < 20) { bnd.textView.text = &q

看起来viewmodel中字段的模式是:

val selected = MutableLiveData<Item>()

fun select(item: Item) {
    selected.value = item
}
片段1:

bnd.button10.setOnClickListener { viewModel.setAmount(10) }
片段2:

if(viewModel.getAmount() < 20) { bnd.textView.text = "less than 20" }
if(viewModel.getAmount()<20){bnd.textView.text=“小于20”}
这是一种有效的方法吗?还是有更好的?还是应该只使用LiveData或Flow


也许我应该使用
savedstatehold
?它在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
}
private val selected=MutableLiveData()
val selectedLiveData:LiveData
get()=已选定
乐趣选择(项目:项目){
selected.value=项目
}

您是将这些值存储在viewmodel中,还是从磁盘/数据库/api等检索它们?如果它都在内存中,那么我根本不会使用LiveData,当您在片段之间共享ViewModel时,我只会使用正则变量/函数。如果某些操作需要更长的时间,我将使用挂起函数
btw,所选字段不是私有字段是否正确?
完全取决于它的用途。@Stachu,不,不再执行操作,存储在lifecycle@a_local_nobody,您能否详细说明一下,在这种情况下,MutableLiveData字段不是私有的?如果
select(item:item)
方法是公开的,那么你看不出它有什么意义吗
你能详细说明一下吗…
不,我不能,因为这是你发布的唯一代码:)这是我第一次评论的要点-如果有理由公开,那么就公开,如果没有,那你就可以保密了。别把它复杂化了。它是公共的没有什么错(你的代码会编译得很好),但是如果不使用它,你可以将它设置为私有的,因为数据流总是从VM->View,但是在你的代码片段中,数据也通过
select(item:item)
方法从视图流向VM,不是吗?它不是数据流,您正在调用函数,数据仅在VM内部更新。
private val selected = MutableLiveData<Item>()
val selectedLiveData : LiveData<Item>
    get() = selected

fun select(item: Item) {
    selected.value = item
}