android - 调用 ViewModel 实例是否会重置 LiveData?
问题描述
在科特林我正在使用
viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)
从提供程序检索 ViewModel。
在我的 ViewModel 里面我有这样的东西。
val liveChuchuData = MutableLiveData<DataChuchu>()
据我了解,这会创建 MutableLiveData 的最终新变量,对吗?
我记得在 Java 中的 ViewModel 中声明 MutableLiveDatas 时,我们创建了一个函数,然后检查 MutableLiveData 是否为空,只创建一次。那么,如果我有一个片段也将使用相同的 ViewModel 实例怎么办。
val liveChuchuData = MutableLiveData<DataChuchu>()
一旦在片段中调用,该行会导致当前数据被重置吗?
解决方案
取决于您的 ViewModel 的父级是什么。如果 parent 是Acivity
并且在您Fragment
初始化您的ViewModel
withgetActivity()
而不是传递this,那么您将重用 that ViewModel
,但是例如,如果您有两个单独的通过传递this来Fragments
初始化相同的实例,那么您将有两个单独的实例和不同的数据。ViewModel
ViewModelProvider
ViewModel
要ViewModel
在两个中拥有相同的数据Fragments
,您需要在创建实例时传递getActivity();
给。ViewModelProvider
ViewModel
也就是说,是的,如果您在创建时使用它,它将导致您的数据被重置ViewModel
。
希望这可以帮助。祝你好运 :)
推荐阅读
- f# - 尝试比较每个子列表的长度(学习 lambda 和列表模块)
- node.js - 更新 API 服务器证书后出现“RequestError:错误:无法验证第一个证书”错误
- javascript - 使用循环生成表行时自动将行和列数据添加在一起
- ios - iOS自动登录,usserdefaults不起作用
- javascript - 表格固定标题:水平滚动时应该移动
- php - 使用 PhpSpreadSheet 写入 excel 文件非常慢
- java - 尽管变量的类型被声明为双精度,为什么 java 会给出一个 int 太大的错误?
- abap - OpenSQL 语法 CASE 语句中的 WHERE 条件
- java - 查找在数据库中如何工作?
- selenium - 硒 - findElement