首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreshMvvm - PopPageModel不适用于Android

FreshMvvm - PopPageModel不适用于Android
EN

Stack Overflow用户
提问于 2019-05-22 17:47:51
回答 1查看 570关注 0票数 0

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

如果我从ViewIsAppearing方法FirstPageModel中这样做的话:

代码语言:javascript
复制
CoreMethods.PushPageModel<SecondPageModel>();

我去"SecondPageModel“。那么,当我在"SecondPageModel“中时,如果是这样的话:

代码语言:javascript
复制
CoreMethods.PopPageModel(); 

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 08:04:48

这是因为当页面开始在屏幕上显示时,总是会调用ViewIsAppearing。当您弹出第二页然后转到第一页时,第一页的ViewIsAppearing将再次启动。它造成了一个死气沉沉的循环,并禁止您的应用程序返回第一页。

添加一个属性以避免这样做:

代码语言:javascript
复制
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可以优化此过程,但我仍然建议您添加此判断语句。

更新:

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

代码语言:javascript
复制
protected override void ViewIsAppearing(object sender, EventArgs e)
{
    base.ViewIsAppearing(sender, e);

    if (isInitialized)
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            CoreMethods.PushPageModel<SecondPageModel>();
            isInitialized = false;
        });
    }           
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56262354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档