FreshMvvm - PopPageModel 不适用于 Android

FreshMvvm - PopPageModel not works on Android

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

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

CoreMethods.PushPageModel<SecondPageModel>();

我去 "SecondPageModel"。然后,当我在 "SecondPageModel" 时,如果我这样做:

CoreMethods.PopPageModel(); 

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

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

这是因为 ViewIsAppearing 总是会在页面开始显示在屏幕上时被调用。当您弹出第二页然后转到第一页时,第一页的 ViewIsAppearing 将再次触发。造成了死循环,导致你的app无法返回到第一页。

添加一个 属性 以避免:

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;
        });
    }           
}