LiveData 阻止在开始观察时接收最后一个值

2023-12-13

是否可以预防LiveData开始观察时收到最后一个值? 我正在考虑使用LiveData作为事件。

例如,显示消息、导航事件或对话框触发器等事件,类似于EventBus.

与之间的通信相关的问题ViewModel和片段,谷歌给了我们LiveData用数据更新视图,但是当我们只需要使用单个事件更新视图一次时,这种类型的通信不适合,而且我们无法在中保存视图的引用ViewModel并调用一些方法,因为它会造成内存泄漏。

我发现了类似的东西单一现场活动- 但它仅适用于 1 个观察者,不适用于多个观察者。

- - 更新 - -

正如@EpicPandaForce 所说“没有理由不使用 LiveData“,问题的意图可能是MVVM 中视图和 ViewModel 之间通过 LiveData 进行通信


我在 MutableLiveData 中使用来自 Google Samples 的 EventWraper 类

/**
 * Used as a wrapper for data that is exposed via a LiveData that represents an event.
 */
public class Event<T> {

    private T mContent;

    private boolean hasBeenHandled = false;


    public Event( T content) {
        if (content == null) {
            throw new IllegalArgumentException("null values in Event are not allowed.");
        }
        mContent = content;
    }
    
    @Nullable
    public T getContentIfNotHandled() {
        if (hasBeenHandled) {
            return null;
        } else {
            hasBeenHandled = true;
            return mContent;
        }
    }
    
    public boolean hasBeenHandled() {
        return hasBeenHandled;
    }
}

在视图模型中:

 /** expose Save LiveData Event */
 public void newSaveEvent() {
    saveEvent.setValue(new Event<>(true));
 }

 private final MutableLiveData<Event<Boolean>> saveEvent = new MutableLiveData<>();

 public LiveData<Event<Boolean>> onSaveEvent() {
    return saveEvent;
 }

在活动/片段中

mViewModel
    .onSaveEvent()
    .observe(
        getViewLifecycleOwner(),
        booleanEvent -> {
          if (booleanEvent != null)
            final Boolean shouldSave = booleanEvent.getContentIfNotHandled();
            if (shouldSave != null && shouldSave) saveData();
          }
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LiveData 阻止在开始观察时接收最后一个值 的相关文章

  • 线程“main”中出现异常 java.lang.UnsatisfiedLinkError: ... \jzmq.dll: 找不到依赖库

    我有一个使用 ZMQ 的 java 应用程序 我已经能够在我的 Win7 PC 上运行它 我将 jzmq dll 放在 jar 可执行文件所在的同一文件夹中 然后通过命令 java jar myapp jar 运行它 我的下一步是将其移至服
  • Sublime Text 2中括号(圆括号)的智能缩进

    我有一个非常好的设置 可以从 sublime text 2 内部编辑和运行 maxscript 我最近想要的一件事是用普通圆括号模拟或复制大括号的行为 EDIT 抱歉 Chrome 决定我在那里完成编辑 而我还没有 如果我输入if x th
  • 编辑时可以在文本框控件内使用 Angular 的管道格式化程序吗?

    我已经声明了一种将大数字分成三位数组的格式 并像这样经常使用它 div Huge number i am huge make threesome div 现在 有一个对相应功能的请求 但在像这样的输入控件中实现
  • 使用字符串数组在 Hive 表上加载 CSV 文件

    我正在尝试将 CSV 文件插入 Hive 其中一个字段是 string 数组 这是 CSV 文件 48 Snacks that Power Up Weight Loss Aidan B Prince Health Fitness Trave
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo
  • 两种模型,一种是 STI,一种是验证

    假设我有两个表 产品和订单 为了简单起见 假设一次只能购买一种产品 因此没有像 order items 这样的连接表 所以关系是Product有很多订单 Order属于product 因此 product id是Order表中的一个fk 产
  • 如何在输入时格式化 contenteditable div?

    我正在尝试编写一个函数 允许 contenteditable div 在用户输入 div 时执行一些自动格式化 到目前为止我只能让它在 IE 中运行 有人可以帮助我吗 function formatOnKeyUp if window get
  • 通过 Ajax 加载内容

    好的 我对 ajax 和从外部加载内容还很陌生 如果您能深入了解我的问题 我将不胜感激 我目前有一个空的隐藏 div 单击链接后应在其中加载 ajax 内容 div div 我目前有一个链接列表 它们都具有相同的类 我希望在单击时 空白 d
  • Windows 更新后 Active 设置为 False 时 TIdHttpServer 冻结

    我们有一个 Indy 版本 10 6 1 5235 TIdHttpServer 服务 多年来一直与 Delphi 2007 配合良好 在最新的 Windows 更新 KB4338815 和 KB4338830 之后 我们注意到当 TIdHt
  • uWSGI 皇帝权限被拒绝,除非 root

    我尝试使用二进制文件本身的标志 uid www data gid www data 并将其设置在我的配置中 uid www data gid www data 但套接字总是由我正在使用的帐户生成 因此我从 nginx 收到权限被拒绝的错误
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile
  • 使用 Hibernate 防止无限循环数据检索

    我想知道 想象一个场景 例如 POJO public class User private String userName private String name private String surname private List
  • JavaScript 开关(真)

    你好 我正在尝试处理 ajax json 响应 这是我的代码 success function j switch true case j choice1 alert choice2 break case j choice2 alert ch
  • 如何在 LLVM 中实现字符串数据类型?

    我一直在看LLVM http llvm org 最近 我发现它是一个非常有趣的架构 然而 浏览教程和参考材料 我看不到任何关于如何实现的示例string http en wikipedia org wiki String computer
  • 将自定义属性添加到 Tk 小部件

    我的主要目标是向小部件添加隐藏标签或字符串之类的内容 以在其上保存简短信息 我想到创建一个新的自定义 Button 类 在本例中我需要按钮 它继承所有旧选项 这是代码 form tkinter import class NButton Bu
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务
  • perfmon 性能计数器是否基于与 xperf 使用的 ETW 事件“幕后”相同的东西?

    我最近开始熟悉 perfmon 和 xperf Perfmon 使用性能计数器 xperf 使用 ETW Windows 事件跟踪 Perfmon 具有提供数据的对象 而 xperf 使用 提供者 组 作为这个领域的新手 我想问是否有人可以
  • 安卓框架?

    是否有任何框架比构建 Android 应用程序更容易 您会对其中一个感兴趣吗 很快就会有 我正在开发 DroidFu 一个 Android 共享库 它将为您提供 活动 和服务 中直接提供大量实用功能 例如生成列表和错误对话框 检查 Inte

随机推荐

  • 408 请求超时 Microsoft Speech to Text

    我的 wav 文件长度只有 4 秒 即使多次重试并在云上运行后 我仍然不断收到以下错误 upload completely sent off 12 out of 12 bytes lt HTTP 1 1 408 Request timed
  • 数据库设计:复合键与一列主键

    我们的 Web 应用程序的数据库包含两个表 States idStates State Lat Long idStates是一个自增主键 Cities idAreaCode idStates City Lat Long idAreaCode
  • 分支逻辑测验——我哪里出错了? [JavaScript]

    我正在尝试为 简单 jQuery 测验开发逻辑 这里小提琴 问题是 问题路径有些动态 并产生树结构 例如 第一个问题是关于宠物 狗 猫还是鸟 如果您选择狗 它会询问狗的品种 如果您选择猫 它会询问猫的品种 等等 然后深入研究 这个特定品种的
  • ruby 中“do .. end”和“{..}”块的不同行为[重复]

    这个问题在这里已经有答案了 抱歉 如果这个问题重复 但我找不到用法上的区别 当我运行下面的代码时 我得到了不同的答案 我从大多数教程中看到 使用 do end 与 块相同 include Comparable a 1 4 2 3 5 p a
  • 如何使用实体框架 4.x 动态选择表?

    假设我有一个名为MyDatabase有两张桌子 MyTable1 and MyTable2 使用 Entity Framework 4 x 和 NET 4 的 Code First 方法 我生成了一个名为的上下文MyDatabaseCont
  • CSS中使用渐变效果反射文本

    我需要用 CSS 反射文本并为其添加渐变 这是一个例子我想要的 但我不想要具有 alpha 透明度的淡出 png 图像因为身体有背景 https jsfiddle net 9318Ltkp slogan font size 30px lin
  • 仅存档时出现 ARC 语义问题“多个名为‘setRotation’的方法”

    我在 cocos2dv3 中的项目正在抛出ARC语义问题发现多个名为 setRotation 的方法 其结果 参数类型或属性不匹配 归档时 发布模式 它在部署到模拟器 设备 调试模式 时运行良好 在发布模式下 编译器会混淆旋转的实现UIRo
  • 如何使安全令牌在被动 STS 设置中自动过期?

    我为我正在开发的新应用程序设置了被动 STS 我注意到 当用户的会话过期时 该用户仍然经过身份验证 我本以为当会话过期时 用户将不再被验证 我的老板与我讨论了这个问题 因为我目前负责设置身份验证 他说 如果我们能让用户的登录在一段时间内不活
  • 崩溃加载可穿戴活动

    将 AppCompatActivity 迁移到 WearableActivity 时 我收到崩溃消息 并显示以下消息 引起原因 java lang IllegalStateException 找不到可穿戴设备 共享库类 请添加uses li
  • 对象 # 的属性“submit”不是函数

    谁能向我解释这个错误意味着什么 如果您能提供任何帮助 我将非常感激
  • log4j:ERROR setFile(null,false) 调用失败

    我面临一些奇怪的错误 如下所示 log4j ERROR setFile null false call failed java io FileNotFoundException debug log Access is denied src
  • TCL:execegrep“子进程异常退出”

    我的egrep命令有问题 当我在 tcsh 中执行命令时 它工作正常 但是当我从 tcl 脚本或在 tclsh 中执行它时 我得到 子进程异常退出 grep 使用其退出状态来指示存在 不存在匹配项 man page 如果没有匹配 则退出状态
  • 为什么使用 boost::copy_exception 时会丢失类型信息?

    当我使用boost copy exception将异常复制到exception ptr 我丢失了类型信息 看一下下面的代码 try throw std runtime error something catch exception e pt
  • 在 .NET Core 中的 MVC 之外使用 Razor

    我想在我用 NET Core 编写的 NET 控制台应用程序中使用 Razor 作为模板引擎 我遇到的独立 Razor 引擎 RazorEngine RazorTemplates 都需要完整的 NET 我正在寻找适用于 NET Core 的
  • Python 3 中“python -m SimpleHTTPServer”的等价物是什么

    Python 3 相当于什么python m SimpleHTTPServer From the docs The SimpleHTTPServer模块已合并到http server在Python 3 0中 将源文件转换为 3 0 时 2t
  • 是否可以在 JavaFX 中制作对角列标题?

    我的 JavaFX TableView 看起来像这样 如果顶部的标签是diagonal以节省空间 我想象它是这样的 目标是使该列与内容紧密贴合 尽管标题标签很长 能做到吗 None
  • Haskell 中的基本 I/O 性能

    另一个微基准测试 为什么是这个 循环 用ghc O2 fllvm 7 4 1 Linux 64位3 2内核 重定向到 dev null mapM print 1 100000000 比普通的简单 for 循环慢大约 5 倍C with wr
  • 为什么 Python 中的整数需要三倍的内存?

    在 64 位系统上 Python 中的整数占用 24 个字节 这是例如所需内存的 3 倍 C 表示 64 位整数 现在 我知道这是因为 Python 整数是对象 但是额外的内存有什么用呢 我有我的猜测 但很高兴能确定 请记住 Pythoni
  • GroupBy 从 IEnumerable 对象列表中删除重复项

    我有一个重复名称列表 我想获取没有重复名称的列表 CSVCategories from line in File ReadAllLines path Skip 1 let columns line Split select new Cate
  • LiveData 阻止在开始观察时接收最后一个值

    是否可以预防LiveData开始观察时收到最后一个值 我正在考虑使用LiveData作为事件 例如 显示消息 导航事件或对话框触发器等事件 类似于EventBus 与之间的通信相关的问题ViewModel和片段 谷歌给了我们LiveData