问题标签 [mutablelivedata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3093 浏览

mvvm - MVVM - 自定义模型的 MutableLiveData 没有通过数据绑定更新到 ViewModel 并且始终为空

概括:

当我尝试向存储库发送自定义模型时,MutableLiveData 为空。我认为这是因为 MutableLiveData 的观察者。

请读到最后。

视图模型

正如你在这里看到的,我有一个 MutableLiveData

我的LoginModel是这样的

使用数据绑定和与上面的 ViewModel 绑定来定义片段。

login_fragment.xml

使用数据绑定,我已经实现了etEmail和模型 UserModel的属性用户之间的关系,并且我已经实现了etPassword 和属性密码之间的关系

当用户点击btnServerLogin时,LoginFragment将执行以下代码

这就是问题所在

kotlin.KotlinNullPointerException

有原因是因为loginModel.value!!一片空白

MutableLiveData 的值始终为空。我虽然它会在您输入电子邮件或密码的 EditText 的同时发生变化。

这是我在其中初始化 ViewModel 的 LoginFragment OnActivityCreated 的代码

我究竟做错了什么?我需要添加特定的观察者吗?

谢谢

0 投票
3 回答
1360 浏览

android - MutableLivedata 观察者触发

我有一个关于MutableLiveDatain的问题Viewmodel。只是触发观察setValue的功能吗?MutableLiveData如果我们改变MutableLiveDatawitout的内容setValue,它会被触发吗?

0 投票
1 回答
249 浏览

android - MutableLiveData 不起作用,ObservableField 起作用 - 为什么?

我在 XML 中有一个非常简单的代码:

现在什么时候viewModel.inputEnabledMutableLiveData<Boolean>下面的,它根本不起作用,编辑总是启用的,不管inputEnabled. 但是,只需更改inputEnabledObservableField<Boolean>(并切换setValueset),即可立即开始工作。

为什么呢?我怎样才能MutableLiveData正常工作?

请注意,该字段在三个地方使用(在处理期间启用/禁用表单)。

0 投票
1 回答
1098 浏览

android - 为什么 onChange 结果在测试 LiveData 中为“假”

这是我在 stackoverflow 上的第一篇文章,我是 kotlin 的初学者,生命周期,需要帮助。我失去了 2 天,需要帮助。

我有 SplashViewModel 类

SplashViewModelTest 类

当运行这个测试结果是错误的

论据不同!通缉:observer.onChanged(true); -> 在 com.example.kotlinmvvm.feature.splash.viewModel.SplashViewModelTest。调用 getIsLoggedLiveData 时应检查配置用户登录状态(SplashViewModelTest.kt:85)

实际调用有不同的参数:observer.onChanged(false); -> 在 androidx.lifecycle.LiveData.considerNotify(LiveData.java:113)

比较失败:

预期:observer.onChanged(true);

实际:observer.onChanged(false);

谁知道发生了什么事?

0 投票
1 回答
1505 浏览

android-fragments - 删除 + 添加后片段未收到 LiveData 更新

我目前正在玩弄与和fragment相关的生命周期。ViewModelLiveData

我有2fragments和. 我在 each 的方法中添加了。 fragmentAfragmentBObserveronCreatefragment

每个fragment都有一个按钮,可以LiveData在共享中更改ViewModel

SharedViewModel

当我单击一个按钮时,我会替换另一个按钮fragment

Replace导致它被完全销毁并在下次添加时再次fragment运行它的方法。onCreate我可以确认onCreate每个fragment放置在屏幕上的都调用它并Observer添加。但是,一旦我替换了 afragment并重新添加了它,它就完全停止在onChanged. 甚至是它自己发送的那些。onChanged只是不再触发。我不明白为什么。

编辑:

我实际上发现类中的后续if检查LiveData返回我第二次尝试添加Observer(在替换fragment第一个之后):

因此,Observer不再添加。为什么我尝试重新添加时getCurrentState()返回?DESTROYEDfragment

简而言之:Observer删除时删除了,但下次添加片段时fragment不会添加另一个。Observer

0 投票
1 回答
3529 浏览

android - 将 ArrayAdapter 与 LiveData 一起使用。

我熟悉 WPF 中的 MVVM,但我正在移植现有的 Android 应用程序以首次使用 ViewModel 类和 LiveData。

应用程序“as/was”有一个自定义 ArrayAdapter,用于正确显示网格视图中列表中包含的项目。执行此操作的代码基本上看起来像这样(“基本上”,因为活动中实际上有 4 个这样的网格都这样做):

当 playerList 内容改变时,有一个明确的调用

由于我的目标是让网格在 playerList 更改时自动响应,并且永远不必通知任何内容,现在看来“playerList”需要成为MutableLiveData<List<String>>.

我怀疑我会遇到问题——

MyAdapter 类扩展ArrayAdapter<T>

所以在实践中它会变成一个

但是 MutableLiveData 不会在那里工作,对吧?

我可以打开它并调用创建它,如下所示:

这个对吗?这似乎是疯狂的方式。

最终我的目标是在 xml 中将 gridView 的android:adapter属性分配给这个东西,并且永远不必再考虑它(除了当我修改底层列表时对 setvalue() 和 postValue() 的必需调用......我不是甚至确定如何在这里工作。

我希望已经有一个 MutableLiveData Collection 准备好去某个地方,我会使用它。

这样做的标准方法是什么?

0 投票
1 回答
7827 浏览

kotlin - 在 LiveData 或 MutableLiveData 中包装 MutableList

将 a 包装MutableList在其中一个LiveDataMutableLiveData这样的推荐方法是什么,以便可以修改列表并观察它所经历的变化?

我在 Room 中有一些相当短的表(<20 个项目)(它缓存从服务器检索到的值)。我想保留这些项目的可变子集;用作其他更大表的查询中的过滤器。我的想法是将 a 分配给MutableList我的应用程序中的模型类,并通过将此类包装在MutableLiveData或中使其可观察LiveData。然后通过更新这些选择中的项目,我可以在大表上触发必要的查询。

目前我的代码具有以下结构,我在我的问题中将其剥离为我认为相关的内容。最终我想keyset在更复杂的查询中使用多个。我的简化模型文件如下,

它依赖于存储库,

依赖于查询集

KeyValue类只是简单的 POJO和KeyEntity简单ValueEntity地指定相同的字段。

我应该使用MutableLiveData还是LiveData为此目的?如果是这样应该如何实施keyset?也许这样做有更规范的方式?

0 投票
1 回答
300 浏览

kotlin - 对同一 ViewModel 中的 LiveData 更改做出反应

我有一个由其他sViewModel扩展的基础:ViewModel

我希望能够在state更改(_state.setValue(newvalue)或被_state.postValue(newvalue)调用)时做出反应(例如,添加日志语句),并且我想在BaseViewModel.

我怎么做?

0 投票
2 回答
1221 浏览

android - MutableliveData 从存储库返回 null 到 singleLiveEvent

我正在尝试单击按钮调用网络。我正在使用 singleLiveEvent 包装器,因为需要将数据发送到服务器并仅在单击按钮时才检索响应。我正在使用 Volley 进行 GET 和 POST 调用。我在存储库上得到响应,但在 onChanged 方法上没有。它从存储库中获取空值。

视图模型类

存储库类

我希望仅在单击按钮时发送数据,而不是在活动开始时发送。

0 投票
1 回答
740 浏览

android - 如何使用android中的可变实时数据将数据存储库的改造响应中继到视图模型?

我能够发出网络请求并在我的数据存储库中取回响应,但无法在我的视图模型中获取该响应。

资料库:

查看型号:

活动:

显示来自数据存储库的日志,但没有显示来自活动的日志。我究竟做错了什么?