首页 文章

MvvmCross片段后台堆栈未正确恢复

提问于
浏览
0

嗨Xamarin / MvvmCross开发者,

我遇到了MvxCachingFragmentCompatActivity的问题,或者我认为这是一个问题 . 我不知道这是否是预期的行为 .

在我的应用程序中,我在容器视图中使用片段 . 在破坏后恢复活动时,我遇到了FragmentBackStack的问题 . 如果我从我的初始片段进入三个级别,进入后台并返回前景,只恢复最后两个视图 . 请注意,这是在开发人员选项中打开“不要保持活动” .

是否有任何特定的设置/指示我必须给MvvmCross指示他们我希望他们处理我的viewmodel保存/恢复功能 . 在我经历的样本中,我没有看到任何内容 .

我使用旧版本的MvvmCross手动方法,我在ContainerViewModel中存储了对所有viewmodel的引用,然后在恢复时读取它 . 但是当你在backstack上有多个相同的视图时,这并不是特别好用 .

我在应用程序中没有什么特别之处,它是所有视图的MvxFragment的基本用法 . 我有一个自定义演示者,但我只覆盖ShowFragment,所以我可以显示弹出视图而不是替换 . 没有恢复的视图都没有使用此功能,因此它不会干扰任何事情 .

任何帮助都会受到赞赏 . 戴恩

Update 1

请记住,在这种情况下,视图是MvxFragments .

在研究这个时,我发现了一些与MvxCachingFragmentActivity相关的奇怪的后台堆栈行为 . 在执行还原功能时,我在缓存错误中找不到片段标记,所以我添加了这个

FragmentCacheConfiguration.RegisterFragmentToCache<View, ViewModel>(typeof(ViewModel).FullName);

当我为我的视图添加第二个(在第一个视图之后)时,第一个视图永远不会添加到backstack . 导致一个奇怪的后退导航错误,即使AddToBackstack设置为我们导航的第一个视图时,后面将在第二个视图上关闭 .

当我删除该行时,导航工作完全正常 . 我不知道为什么会这样 .

1 回答

  • 1

    有两个原因导致MvxCachingFragment没有正确恢复碎片堆栈,并且在从背景中返回后出现了奇怪的导航问题 .

    • 我没有为片段设置 RetainInstance = true; . 由于我有很多,我使用MvxFragment创建了一个基本片段,并在构造函数中设置了Retain Instance为true .

    • 我没有安装MvvmCross-Json-Plugin . 用于从Bundle反序列化存储的viewmodel信息 .

相关问题