首页 > 解决方案 > MVVM 与动画视图共享状态

问题描述

假设我有 2 个片段 A 和 B。每个片段分别包含一个视图 viewA 和 viewB。默认情况下,这两个视图都是隐藏的。

有一个名为 sharedVM 的共享视图模型(链接到活动)

来自用户的事件 A 将用动画显示 viewA 并用动画隐藏 viewB(如果 viewB 可见) 来自用户的事件 B 将用动画显示 viewB 并用动画隐藏 viewA(如果 viewA 可见)

我想:

解决方案 1: 在 sharedVM 中使用 LiveData 状态来了解视图是隐藏还是可见。但是当片段被销毁并重新创建时:隐藏/显示动画将再次播放,那就不好了。

解决方案 2: 使用 sharedVM 内部的 LiveDataEvent 来了解调度和触发动画。但是当片段被销毁并重新创建时: 我不知道视图的先前状态......

什么是更好的方法?

标签: androidmvvmfragmentandroid-architecture-componentsandroid-livedata

解决方案


我想,你需要:

  1. LiveData重新创建片段时手动恢复视图状态(根据当前状态)
  2. 如果视图当前处于此状态,则使视图状态观察者忽略更改

您可以在onViewCreated()回调中执行此操作。此修复使您的第一个解决方案有效。


推荐阅读