xamarin.forms 中的页面生命周期事件

Posted

技术标签:

【中文标题】xamarin.forms 中的页面生命周期事件【英文标题】:Page lifecycle events in xamarin.forms 【发布时间】:2015-05-28 22:16:38 【问题描述】:

我刚刚开发了我的第一个 xamarin.forms 应用程序。我对 xamarin.forms 感到很兴奋,但我错过了一些活动。

xamarin.forms ContentPage 中是否有任何页面生命周期事件?

我知道这两个:

protected override void OnAppearing()



protected override void OnDisappearing()


但是 OnAppearing() 事件只触发一次。在 android 上,当我按下开始按钮并返回我的应用程序时,此事件不会再次触发。

是否有解决方法(如 WindowsPhone 页面中的 OnNavigatedTo)?

谢谢。

【问题讨论】:

【参考方案1】:

所以OnAppearing 事件会在您的页面出现时触发。 IE。您已导航到该页面或从堆栈中的另一个页面返回该页面。从API documentation 可以看出,目前没有Page Lifecycle 事件

我认为你在谈论的是如果你让你的应用程序进入睡眠状态并导航回它,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,并且还必须对AppDelegateMainActivity 进行更改。

【讨论】:

我以为还有一些其他的事件可以使用..但现在我可以解决问题了。感谢您的快速答复。 什么时候调用 OnSleep?【参考方案2】:

您还可以使用 Xamarin 的 MessagingCenter 执行任意事件协调:http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

我对同一件事感到沮丧:在 Xamarin.Forms 中没有一致的 view 生命周期事件。但是您可以通过使用 MessagingCenter 来绕过这些限制,它只是一个简单的发布/订阅消息传递工具。

【讨论】:

我之前使用过 MessagingCenter,但我从来没有想过将它用于此目的。很好的解决方法,谢谢。 我还遇到了 Xamarin Android 和 UWP 的事件周期不一致。我有一个第一个标签页,它使用父页的 CurrentPage 来触发第二个标签页的 Appearing 事件。在 Android 上,第一个选项卡始终可以触发 Appearing 事件,但是,在 UWP 上,并非总是如此。不一致的问题由 MessagingCenter 解决。谢谢! 谢谢,这个答案帮助我解决了页面显示时缺少OnAppearing() 方法调用的问题。我不知道为什么 Xamarin 会这样,但现在,我可以使用 MessaggingCenter 解决问题。

以上是关于xamarin.forms 中的页面生命周期事件的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms ContentPage生命周期的困惑

Xamarin.Forms学习之Page Navigation

Xamarin.Forms UWP 中的内存泄漏

xamarin.forms Label点击事件怎么实现

Xamarin Forms Switch Toggled 事件未与视图模型绑定

从Xamarin Forms中的iOS中的App.OnSleep弹出导航堆栈