【问题标题】:Better way to trigger a sound from viewModel code to Fragment?更好的方法来触发从 viewModel 代码到 Fragment 的声音?
【发布时间】:2021-05-02 12:24:39
【问题描述】:

所以我正在开发我的第一个 viewModel 应用程序,它需要发出类似...的声音

MediaPlayer.create(context, R.raw.app_start).start()

但这需要上下文,如果我理解正确,viewModel 代码不应引用上下文以避免内存泄漏,因此我需要我的片段来执行代码。

要从 viewModel 代码触发片段中的声音,我可以在布尔值上定义一个状态观察器并在 viewModel 中翻转其状态以执行片段中的代码,但这看起来很混乱,因为我必须翻转两次才能为下一次需要声音做好准备。

有没有更优雅的方式?

【问题讨论】:

    标签: android android-fragments viewmodel


    【解决方案1】:

    嗯。好吧,使用 observable 你刚刚遇到了经典的“观察事件”问题。 标准的 Google observables 使用是一个值(状态),正如您所注意到的,您需要“重置”该值(发布相同的值不会通知观察者)。

    有很多方法可以解决这个问题,但根据您的需要,一个快速(实际上有点 hacky 恕我直言)的解决方案是使用时间戳(可能是毫秒时间值)作为触发器。 每次推送值都会有所不同,因此会在片段中观察到。

    在大多数情况下,您并不真正关心值,它只是一个触发器.. 在这种情况下播放声音.. 但它可以很容易地退出片段或其他东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多