父 Activity 和主 Fragment 之间的 MVVMCross Navigation 重叠并产生滚动效果

问题描述

我有一个旧的 Xamarin Android 项目,它针对 MVVMCross 6。 当应用程序启动时,MVVMcross 会加载一个欢迎活动。 然后用户选择登录按钮,该按钮加载登录活动或注册活动。 然后在登录后,用户重定向到 MainActivity,其中包含一个 home 片段。 上面提到的每个活动都有其视图模型。 Home 片段也有它的视图模型。 我首先使用 viewmodel 导航,在从登录/注册导航到主活动页面之前,我先关闭当前页面

问题是,当我从登录/注册页面导航到包含主页片段的主活动时,应用程序中出现重叠动画,并且 MVVMcross 连续多次实例化 MainActivity。

当我查看 Visualstudio输出窗口时,我看到:

(MvvmCross.Logging.MvxLog) PresentationAttribute 未找到 主要活动。假设活动演示(MvxAndroid)活动 主机与 viewmodelType MyApp.Mobile.viewmodels.Mainviewmodel 不是 当前顶部活动。在显示片段之前显示活动 MyApp.Mobile.viewmodels.Homeviewmodel 活动主机与 viewmodelType MyApp.Mobile.viewmodels.Mainviewmodel 不是 当前顶部活动。在显示片段之前显示活动 MyApp.Mobile.viewmodels.Homeviewmodel (MvvmCross.Logging.MvxLog) 找不到 MainActivity 的 PresentationAttribute。假设活动 演示文稿 (MvvmCross.Logging.MvxLog) PresentationAttribute 不是 为 MainActivity 找到。假设活动演示

错误消息中,我可以了解到主要活动及其片段正在与导航堆栈的顶部进行斗争。

要导航,我使用“IMvxNavigationService” 这是我导航到包含应用程序片段的 MainActivity 的方法

await this.navigationService.Navigate<Mainviewmodel>();

这是我如何将演示者附加到要在主视图模型中显示的每个片段:

[MvxFragmentPresentation(typeof(Mainviewmodel),Resource.Id.content_frame,true)]
public class HomeFragment : BaseTabFragment<Homeviewmodel>
{
}

并且 BaseTabFragment 具有以下声明:

public abstract class BaseTabFragment<Tviewmodel> : BaseFragment<Tviewmodel> where Tviewmodel : class,IMvxviewmodel

并且 Base 片段继承自:"MvxFragment"

我尝试创建一个自定义 MVVMcross 片段展示器,在其中将“ActivityFlags.NewTask | ActivityFlags.ClearTop | ActivityFlags.ClearTask”标志添加到顶部活动,但这不起作用。有人可以帮忙吗?

解决方法

从我的角度来看,如果您真的从签名活动切换到主活动,您还必须将视图创建为活动。所以 MainViewModel 应该作为活动映射到 MainView 并且应该是一种“父”。

片段是活动的一部分。

看看这个例子,希望它有帮助。

https://github.com/MvvmCross/MvvmCross/tree/master/Projects/Playground/Playground.Droid

特别针对这些: https://github.com/MvvmCross/MvvmCross/blob/master/Projects/Playground/Playground.Droid/Activities/RootView.cs https://github.com/MvvmCross/MvvmCross/blob/master/Projects/Playground/Playground.Droid/Activities/TabsRootView.cs