Установка MainPage = NavigationPage во время OnStart в Xamarin.Forms отображает пустой экран в Android

У меня есть приложение Xamarin Forms, в котором я устанавливаю для MainPage значение NavigationPage во время OnStart.
NavigationPage является статическим (сохраняется в памяти для повторного использования).
Когда я нажимаю кнопку «Назад» в Android и вернитесь в приложение, метод OnStart выполняется снова, и приложение отображает пустой экран.

См. Репродукцию здесь: Xamarin.Forms OnStart Navigation

public partial class App : Application
{
    private static readonly NavigationPage NavigationPage = new NavigationPage(new MainPage());
    public App ()
    {
        InitializeComponent();
    }

    protected override void OnStart()
    {
        MainPage = NavigationPage;
    }
}

Если я сделаю то же действие в конструкторе, приложение будет вести себя так, как ожидалось: нет пустого экрана и отображается последняя посещенная страница.

См. Репродукцию здесь: Навигация по конструктору Xamarin.Forms

public partial class App : Application
{
    private static readonly NavigationPage NavigationPage = new NavigationPage(new MainPage());
    public App ()
    {
        InitializeComponent();

        MainPage = NavigationPage;
    }
}

В чем разница между настройкой MainPage в конструкторе и в методе OnStart?


person Oscar Fraxedas    schedule 30.05.2018    source источник
comment
Свойство MainPage должно быть установлено в конструкторе приложения: docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/   -  person Oscar Fraxedas    schedule 30.05.2018
comment
Причина, по которой это не работает, заключается в том, что конструктор работает в потоке пользовательского интерфейса, а OnStart - нет.   -  person FreakyAli    schedule 06.09.2019


Ответы (1)


Вы не делаете этого при запуске со статической главной страницей, инициализированной вне вызова init.

Сделайте это в конструкторе после InitializeComponents.

Вот так:

public partial class App : Application
{
private static readonly NavigationPage NavigationPage;
public App ()
{
    InitializeComponent(); 
    NavigationPage = new NavigationPage(new MainPage());

    MainPage = NavigationPage;
}
}
person Pavel Sich    schedule 30.05.2018