【问题标题】:MvvmCross fragment backstack not restored properlyMvvmCross 片段 backstack 未正确恢复
【发布时间】:2017-03-20 16:12:30
【问题描述】:

您好 Xamarin/MvvmCross 开发人员,

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

在我的应用程序中,我在容器视图中使用片段。在销毁后恢复活动时,我遇到了 FragmentBackStack 问题。如果我从我的初始片段进入三层,进入后台并返回前台,只有最后两个视图被恢复。请注意,这是在开发者选项中打开“不保留活动”的情况。

是否有任何特定的设置/指示我必须给 MvvmCross 以指示他们我希望他们处理我的视图模型保存/恢复功能。在我浏览的样本中没有看到任何内容。

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

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

任何帮助将不胜感激。 丹麦人

更新 1

请记住,这种情况下的视图是 MvxFragments。

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

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

当我为第二个显示的视图添加这个(在第一个视图之后)时,第一个视图永远不会添加到 backstack 中。导致一个奇怪的后退导航错误,即使 AddToBackstack 对于我们导航的第一个视图设置得太真,也会在第二个视图上关闭。

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

【问题讨论】:

    标签: android xamarin xamarin.android mvvmcross


    【解决方案1】:

    MvxCachingFragment 没有正确恢复片段后台堆栈以及从后台返回后出现奇怪的导航问题有两个原因。

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

    2. 我没有安装MvvmCross-Json-Plugin。用于反序列化 Bundle 中存储的视图模型信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 2014-09-26
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多