События жизненного цикла страницы в xamarin.forms
Я только что разработал свое первое приложение xamarin.forms. Я в восторге от xamarin.forms, но я пропускаю несколько событий.
Существуют ли какие-либо события жизненного цикла страницы в xamarin.forms ContentPage?
Я знаю об этих двух:
protected override void OnAppearing()
{
}
protected override void OnDisappearing()
{
}
Но событие OnAppearing() запускается только один раз. На Android, когда я нажимаю кнопку "Старт" и возвращаюсь в свое приложение, это событие не запускается снова.
Есть ли обходной путь для этого (например, OnNavigatedTo на страницах WindowsPhone)?
Спасибо.
Ответы
Ответ 1
Таким образом, событие OnAppearing
запускается, когда появляется ваша страница. То есть вы перешли на эту страницу или обратно на эту страницу из другого в стеке. В настоящее время нет событий Page Lifecycle
, как вы можете видеть из документации API
Я думаю, что вы говорите о том, что если вы уложите приложение в режим сна и вернетесь в него, событие OnAppearing
не будет запущено, это потому, что ваша страница не появилась, потому что она уже была там, приложение было просто спит.
Что вы ищете, это App Lifecycle
, который включает в себя такие методы, как:
protected override void OnStart()
{
Debug.WriteLine ("OnStart");
}
protected override void OnSleep()
{
Debug.WriteLine ("OnSleep");
}
protected override void OnResume()
{
Debug.WriteLine ("OnResume");
}
Затем вы можете использовать событие OnResume
, чтобы выполнить то, что вы ищете.
Этот документ Xamarin включает изменения, которые должны быть внесены в старые проекты Xamarin для доступа к этим событиям. например ваш класс App
в вашей общей библиотеке должен наследовать от Xamarin.Forms.Application
, а также изменения должны быть сделаны в AppDelegate
и MainActivity
.
Ответ 2
Вы также можете использовать Xamarin MessagingCenter для выполнения произвольной координации событий: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/
Я был разочарован одним и тем же: не имея последовательных событий просмотра жизненного цикла в Xamarin.Forms. Но вы можете обойти некоторые из этих ограничений, используя MessagingCenter, который представляет собой просто средство обмена сообщениями/суб-сообщениями.
Ответ 3
Это работает для меня. Xamarin.Forms 2.0 и выше. Всякий раз, когда вы возвращаетесь на эту страницу CP
, запускается событие Appearing
.
public CP:ContentPage
{
//....
public CP()
{
this.Appearing += CP_Appearing ;
//...
}
private void CP_Appearing(object sender, EventArgs e)
{
Debug.WriteLine("*************HALLO******WELCOME BACK.");
}
}