gpt4 book ai didi

android - 是否应该始终在 ViewModel 中使用 livedata?

转载 作者:行者123 更新时间:2023-12-03 08:29:01 27 4
gpt4 key购买 nike

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

val selected = MutableLiveData<Item>()

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

(顺便说一句,selected 字段不是私有(private)的,这样正确吗?)

但是如果我不需要订阅 ViewModel 字段中的更改怎么办?我只需要被动地将这个值拉到另一个 fragment 中。

我的项目详细信息:

  • 一个 Activity 和一堆简单 fragment 用导航组件相互替换
  • ViewModel 执行业务逻辑并将一些值从一个 fragment 传输到另一个 fragment
  • Activity 和 fragment 有一个 ViewModel,没有必要拥有多个 ViewModel,因为它是相同的业务流程
  • 我更愿意在一个 fragment 中存储一个值,并在下一个 fragment 中访问它来替换当前的 fragment ,而不是将其传递到一个包中并在每个 fragment 中手动一次又一次地检索

View 模型:

private var amount = 0
fun setAmount(value: Int) { amount = value}
fun getAmount() = amount

fragment 1:

bnd.button10.setOnClickListener { viewModel.setAmount(10) }

fragment 2:

if(viewModel.getAmount() < 20) { bnd.textView.text = "less than 20" }

这是一种有效的方法吗?或者有更好的吗?或者我应该只使用 LiveData 或 Flow?

也许我应该使用SavedStateHandle?它可以注入(inject)到 ViewModel 中吗?

最佳答案

回答你的问题,

,并不强制在 ViewModel 中始终使用 LiveData,它只是一种可观察的模式,用于通知调用者有关数据更新的信息。如果您有一些不会经常更改并且可以通过其实例访问的内容。您可以完全忽略将其包装在 LiveData 中。无论如何,ViewModel 实例及其内部的值都会被保留。

关于私有(private)字段,MutableLiveData 永远不应该暴露在类之外,因为数据流始终来自 VM -> View,这就是 MVVM 模式的美妙之处

private val selected = MutableLiveData<Item>()
val selectedLiveData : LiveData<Item>
get() = selected

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

关于android - 是否应该始终在 ViewModel 中使用 livedata?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65700110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com