【问题标题】:LiveData Value Reappearing When Returning to Screen After Opening New Screen打开新屏幕后返回屏幕时重新出现 LiveData 值
【发布时间】:2018-09-22 18:21:54
【问题描述】:

问题

当用户单击应用的 RecyclerView 单元格中的项目时,我已从 Fragment 实现 YouTube 意图。点击事件通过数据绑定在 xml 中处理并传递给绑定的 ViewModel,后者将代表点击事件的 LiveData 值传递给 Fragment。

startActivity(YouTubeIntents.createPlayVideoIntentWithOptions(activity, content.id, false, false))    

但是,在触发onBackPressed()关闭从YouTube启动的Activity并返回到原始应用屏幕后,当屏幕旋转时,YouTube Activity重新出现,就好像YouTube Activity的finish()方法没有被调用一样。

预期

关闭 YouTubeActivity 后旋转屏幕不会触发 YouTubeActivity 意外重新显示。

尝试的解决方案

  1. 尝试将传递到 Intent 的上下文从 context 更改为 activity。
  2. 从片段调用context.startActivity(...),而不是startActivity(...)
  3. 为新的活动意图添加了一个标志:intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)as per this answer。
  4. 将 YouTube 意图包装在“无头”片段(没有 UI 的片段)中,以尝试控制生命周期。

【问题讨论】:

    标签: android android-livedata


    【解决方案1】:

    解决方案

    这与 YouTube API 无关,而是与 Android 架构库组件 LiveData 相关。我正在使用一个 LiveData 变量来传递一个点击事件,当屏幕旋转时再次发出该事件。

    Jose Alcérreca 在他的 Medium 帖子 LiveData with SnackBar, Navigation and other events (the SingleLiveEvent case) 中概述了最佳解决方案。

    总之,Jose 创建了一个Event 类来跟踪事件是否已被处理。这样,当屏幕旋转时,ViewModel 和 LiveData 会执行不会发出对单个事件不再有效的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2018-09-18
      相关资源
      最近更新 更多