在Android MVVM架构中显示来自ViewModel的Dialog

luc*_*ino 23 architecture android components mvvm presenter

关于使用新架构组件的MVVM,我有一个问题,如果我的应用程序需要显示一个Dialog,其中有3个选项来自我的VM中发生的某些操作,我应该如何实现?谁负责向Activity/Fragment发送显示对话框的命令?

Jos*_*eca 37

打开新活动或显示对话框等UI相关操作是从视图(活动或片段)触发的,而不是从ViewModel触发的.ViewModel没有对视图的引用以防止泄漏并使表示层保持"被动".

您可以将视图(活动或片段)订阅到ViewModel中的observable,以便在更改时,您可以从视图中启动对话框或新活动.

编辑:我写了一篇关于此的文章,因为它并不简单.一种好的方法是将事件建模为您所在州的一部分,并使用事件包装器执行导航等操作:https://medium.com/google-developers/livedata-with-snackbar-navigation-and-other-events-the- singleliveevent情况下,ac2622673150

  • 在视图模型需要知道对话框答案的地方如何确认对话框?视图模型触发singleevent或事件包装器,但是,您如何知道用户选择了什么呢? (6认同)
  • 我正在做的是为我需要在视图中触发的每个操作创建一个 LiveData <Boolean> 以调用新屏幕或显示对话框,但我对该解决方案不满意,它在我看来似乎不正确. (5认同)
  • 我最终使用了以下方法。它解决了双向通信问题。基本上,您需要在通知中注册回调。https://blog.tonysneed.com/2011/01/28/tackling-the-problem-of-modal-dialogs-in-mvvm/ (2认同)