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

时间:2017-03-20 16:12:31

标签: android xamarin xamarin.android mvvmcross

你好Xamarin / MvvmCross开发者,

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

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

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

我使用手动方法使用旧版本的MvvmCross,我在ContainerViewModel中存储了对所有viewmodel的引用,然后在它恢复时读取它。但是,如果在靠背堆上可以有多个相同的视图,这种方法效果不会很好。

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

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

更新1

请注意,此案例中的观看次数为MvxFragments。

在研究这个问题的过程中,我发现了一些与MvxCachingFragmentActivity相关的奇怪的backstack行为。在执行恢复功能时,我在缓存错误中找不到片段标记,所以我添加了这个

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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