首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ViewModel中应该始终使用实时数据吗?

在ViewModel中应该始终使用实时数据吗?
EN

Stack Overflow用户
提问于 2021-01-13 10:33:38
回答 1查看 1.4K关注 0票数 2

视图模型中字段的推荐模式似乎是:

代码语言:javascript
运行
复制
val selected = MutableLiveData<Item>()

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

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

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

我的项目细节:

  • 一个活动和一堆简单的片段用导航组件相互替换。
  • ViewModel执行业务逻辑,并将一些值从一个片段传递到另一个片段。
  • 活动和片段有一个ViewModel,不要看到有多个ViewModel的意义,因为它是相同的业务流程
  • 我倾向于将一个值存储在一个片段中,并在下一个片段中访问它,这将替换当前的值,而不是将其传递到一个包中,然后在每个片段中一次又一次地手动检索。

ViewModel:

代码语言:javascript
运行
复制
private var amount = 0
fun setAmount(value: Int) { amount = value}
fun getAmount() = amount

Fragment1:

代码语言:javascript
运行
复制
bnd.button10.setOnClickListener { viewModel.setAmount(10) }

Fragment2:

代码语言:javascript
运行
复制
if(viewModel.getAmount() < 20) { bnd.textView.text = "less than 20" }

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

也许我该用SavedStateHandle?它在ViewModel中可以注射吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 10:45:19

为了回答你的问题,

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

对于私有字段,MutableLiveData不应该在类之外公开,因为数据流总是来自VM ->视图,这是MVVM模式的优点。

代码语言:javascript
运行
复制
private val selected = MutableLiveData<Item>()
val selectedLiveData : LiveData<Item>
    get() = selected

fun select(item: Item) {
    selected.value = item
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65700110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档