android - 如何从 ViewModel 正确传递事件?
问题描述
我需要一些方法来传递应该只从 ViewModel 完成一次的事件。目前,我正在为此使用 LiveData。用例:
我正在建立一些意图,然后我应该将其交付给片段。问题很明显,旋转后,我得到旧数据并再次运行 startAtivity。我不想在支票等方面使用一些技巧。我相信应该有正确的方法来做这些事情。我找到的唯一方法是:链接- SingleLiveEvent。
那么,这是做这些事情的正确方法吗?从 ViewModel 传递 UI 相关事件的正确方法是什么?
解决方案
这是做这些事情的正确方法吗?
这个问题的答案是肯定的,如果这样做没有泄漏任何对象,那么您可能已经找到了正确的解决方案!
从 ViewModel 传递 UI 相关事件的正确方法是什么?
您发现上述解决方案在您的用例中是可以的,但是如果您找到一个根本不涉及的解决方案,那么LiveData
我可能能够将其指向一个方向。查看以下解决方案:
- 假设您
ViewModel
有一个要在 UI 上传递结果的异步方法。 - 获取您的结果类型的接口对象,该对象提供您的
ViewModel
&之间的交互Activity/Fragment
,在您的异步方法上从ViewModel
传递您的LifeCycleOwner object
和interface object
作为方法参数。 - 现在检查您的生命周期事件的方法
LifecycleOwner
(即此处的活动或片段实例),并通过 UI 上的接口提供回调。 - 因此,现在您可以将结果标记为null一旦交付给 UI。
这是一些设置,但是当您需要没有LiveData
.
推荐阅读
- python-3.x - O(n) 澄清中的 Python 对求和问题
- php - 用 PHP 中更高效的方法替换嵌套的 foreach 循环
- javascript - 如何在 JavaScript 中对对象键中的值进行排序
- flutter - Flutter:Permission_handler:iOS:第一次成功拒绝后相机权限请求不起作用
- django - Django在admin中的相关对象内显示相关对象
- c++ - 为什么这两个代码段会给出不同的结果
- java - 如何配置 Spring Boot JPA Java 实体以自动修剪每个 CHAR 列中的字符串?
- datatable - 如何对 DT::datatable 中的自定义列进行排序
- apache-spark - 计算 spark Dataframe 中的新列,将 df1 中的令牌列表列与 df2 中的文本列与 pyspark 交叉
- java - Gradle 构建文件 org.openapi.generator openApiGenerate 列表生成器 openApiGenerators 无输出 无错误