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;
});
}
}
我有一个 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;
});
}
}