Android 打开新屏幕后返回屏幕时重新显示LiveData值 问题

Android 打开新屏幕后返回屏幕时重新显示LiveData值 问题,android,android-livedata,Android,Android Livedata,我已经实现了YouTube意图,当用户点击应用程序的RecyclerView单元格中的一个项目时。单击事件通过数据绑定在xml中处理,并传递给绑定的ViewModel,后者将表示单击事件的LiveData值传递给片段 startActivity(YouTubeIntents.createPlayVideoIntentWithOptions(activity, content.id, false, false)) 但是,在触发onBackPressed()关闭从YouTube启动的活动并

我已经实现了YouTube意图,当用户点击应用程序的RecyclerView单元格中的一个项目时。单击事件通过数据绑定在xml中处理,并传递给绑定的ViewModel,后者将表示单击事件的LiveData值传递给片段

startActivity(YouTubeIntents.createPlayVideoIntentWithOptions(activity, content.id, false, false))    
但是,在触发
onBackPressed()
关闭从YouTube启动的活动并返回到原始应用程序屏幕后,当屏幕旋转时,YouTube活动会重新出现,就像YouTube活动的
finish()
方法未被调用一样

预期 关闭YouTube活动后旋转屏幕不会触发YouTube活动意外重新显示

尝试的解决方案
  • 尝试将传递到意图中的上下文从
    上下文
    更改为
    活动
  • 从片段调用
    context.startActivity(…)
    ,而不是
    startActivity(…)
  • 在新的活动意图中添加了一个标志:
    intent.addFlags(intent.flag\u activity\u NO\u HISTORY)
    ,如下所示
  • 将YouTube意图包装在一个“无头”片段(没有UI的片段)中,以尝试和控制生命周期
  • 解决方案 这与YouTube API无关,而是与Android架构库组件LiveData相关。我使用一个LiveData变量来传递一个单击事件,当屏幕旋转时,该事件将再次发出

    Jose Alcérreca在他的中篇文章中概述了最佳解决方案

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