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

nwsw7zdq  于 2023-05-27  发布在  其他
关注(0)|答案(4)|浏览(205)

我刚刚开发了我的第一个xamarin.forms应用程序。我对xamarin.forms很兴奋,但我错过了几个事件。
xamarin.formsContentPage中是否有任何页面生命周期事件?
我知道这两个:

protected override void OnAppearing()
{
}

protected override void OnDisappearing()
{
}

但是OnAppearing()事件只触发一次。在Android上,当我按下开始按钮并返回到我的应用程序时,此事件不会再次触发。
是否有解决方法(如WindowsPhone-pages中的OnNavigatedTo)?

7gcisfzg

7gcisfzg1#

因此,OnAppearing事件在页面出现时触发。也就是说,您已经导航到该页面或从堆栈中的另一个页面返回到该页面。当前没有Page Lifecycle事件,如您在API documentation中看到的
我想你说的是,如果你把你的应用程序置于睡眠状态,然后导航回到它,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进行更改。

vulvrdjw

vulvrdjw2#

您还可以使用Xamarin的MessagingCenter来执行任意事件协调:http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/
我也被同样的事情困扰过:Xamarin. Forms中没有一致的view生命周期事件。但是您可以通过使用MessagingCenter来绕过其中的一些限制,MessagingCenter只是一个简单的发布/订阅消息工具。

46scxncf

46scxncf3#

根据第一个答案https://stackoverflow.com/a/29252552/1894630
在onappearing和ondisappearing上设置标志,并基于它使用onresume。即
Contentpage.xaml.cs

protected override void OnAppearing()
{
    base.OnAppearing();
            
    App.DroidLocationPermissionAsker.AskLocationPermission();
    App.Locationpagepersist = true;
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    App.Locationpagepersist = false;
}

App.xaml.cs:

public static bool Locationpagepersist { get; internal set; }
protected override void OnResume()
{
    if (Locationpagepersist)
    {             
        DroidLocationPermissionAsker.AskLocationPermission();
    }    
}
njthzxwz

njthzxwz4#

我用下面的代码

protected override void OnAppearing()
{
    base.OnAppearing();
    // do your works
}

相关问题