0

我有一个 Xamarin.Forms 应用程序,并且正在使用 FreshMvvm 框架。

如果我从 FirstPageModel 的 ViewIsAppearing 方法执行此操作:

CoreMethods.PushPageModel<SecondPageModel>();

我去“SecondPageModel”。然后,当我在“SecondPageModel”中时:

CoreMethods.PopPageModel(); 

或按硬后退按钮,或按标题栏后退按钮在 Android 中不起作用(发生任何事情)。我正在使用 FreshMasterDetailNavigationContainer。

在 iOS 中它工作正常,我回到 FirstPageModel。

4

1 回答 1

2

这是因为ViewIsAppearing将始终在页面开始在屏幕上显示时调用。当您弹出第二页然后转到第一页时,第一页ViewIsAppearing将再次触发。它导致死循环并禁止您的应用返回首页。

添加一个属性来避免这种情况:

bool isInitialized;
public FirstPageModel()
{
    // ...

    isInitialized = true;
}

protected async override void ViewIsAppearing(object sender, EventArgs e)
{
    base.ViewIsAppearing(sender, e);

    if (isInitialized)
    {
        await Task.Delay(100);
        await CoreMethods.PushPageModel<SecondPageModel>();
        isInitialized = false;
    }

}

iOS可能会优化这个过程,但我还是建议你加上这个判断语句。

更新:

当您的应用程序到达主线程时调用它。

protected override void ViewIsAppearing(object sender, EventArgs e)
{
    base.ViewIsAppearing(sender, e);

    if (isInitialized)
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            CoreMethods.PushPageModel<SecondPageModel>();
            isInitialized = false;
        });
    }           
}
于 2019-05-23T08:04:48.037 回答