我有一个Xamarin.Forms应用,正在使用FreshMvvm框架。
如果我通过FirstPageModel的ViewIsAppearing方法执行此操作:
CoreMethods.PushPageModel<SecondPageModel>();
我进入“ SecondPageModel”。然后,当我进入“ SecondPageModel”时:
CoreMethods.PopPageModel();
或按返回键,或者按标题栏返回键在Android中不起作用(任何情况)。我正在使用FreshMasterDetailNavigationContainer。
在iOS中它可以正常运行,我回到FirstPageModel。
答案 0 :(得分:0)
这是因为当页面开始显示在屏幕上时,将始终调用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;
});
}
}