我已经构建了一个Xamarin Android应用程序,它为用户提供了一系列数据输入表单,如向导。该向导有一个带有上一个和下一个按钮的底部导航栏,以及一个菜单按钮,按下该按钮会在向导中显示所有表单的列表,并允许用户跳转到任何给定的表单。 所需的功能是保留线性导航,以便当用户跳转到向导的中间时,他们仍然可以使用上一个和下一个按钮按顺序翻阅各种表单。他们还应该能够使用硬件后退按钮查看向导中的上一个表单。 我怀疑我的实现不是MvvmCross友好的,因为我看到了一些错误,特别是当我清除片段backstack时,我的视图模型没有被销毁(在一个Activity中托管的向导,每个窗体都是一个片段)。
我该如何实现?
答案 0 :(得分:0)
您是否尝试使用PopBackStackImmediate
的{{3}}重载?这个将弹出所有片段,直到您在字符串中指定的片段为止(如果传递包容性标志,那么该片段也会弹出),因此您可以在片段后台堆栈中进行迭代迭代。
Activity.SupportFragmentManager.PopBackStackImmediate("myViewTag", (int)PopBackStackFlags.Inclusive);
其中"myViewTag"
是您视图的UniqueImmutableCacheTag
答案 1 :(得分:0)
我的实施必须有一些非常规的东西,但是在截止日期和社区的帮助下,你如何修复你的黑客攻击,而是更多地破解它?
我的解决方案有两个方面: 1)我没有使用FragmentManager.PopBackstackImmediate(),而是使用以下条件实现了一个while循环:activity.SupportFragmentManager.BackStackEntryCount> 0,在body中调用Close(fragment.ViewModel)。这应该已经修复了这个bug,但它并没有。 2)我请求关闭的ViewModels仍未处理,因此我必须解析当前的IMvxMultipleViewModelCache并使用预期参数调用其上的GetAndClear。这迫使我的ViewModel被处理,以便在下次查看其片段时重新创建它们。
这感觉就像一个黑客。关闭ViewModel应该处理它是否与片段或活动相关联,但由于某种原因它不是。这是这个错误的关键,但就像我说的那样,截止日期,破解黑客攻击。