FreshMvvm - PopPageModel не работает на Android - PullRequest
0 голосов
/ 22 мая 2019

У меня есть приложение Xamarin.Forms, и я использую фреймворк FreshMvvm.

Если я делаю это из метода ViewIsAppearing FirstPageModel:

CoreMethods.PushPageModel<SecondPageModel>();

Я иду "SecondPageModel". Затем, когда я в "SecondPageModel", если я делаю:

CoreMethods.PopPageModel(); 

или нажмите кнопку «Назад», или нажмите кнопку «Назад» в строке заголовка, не работает в Android (что-то происходит). Я использую FreshMasterDetailNavigationContainer.

В iOS все работает нормально, я возвращаюсь в FirstPageModel.

1 Ответ

1 голос
/ 23 мая 2019

Это потому, что 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;
        });
    }           
}
...