簡體   English   中英

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

[英]Page lifecycle events in xamarin.forms

我剛剛開發了我的第一個 xamarin.forms 應用程序。 我對 xamarin.forms 感到很興奮,但我錯過了幾個活動。

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

我知道這兩個:

protected override void OnAppearing()
{
}

protected override void OnDisappearing()
{
}

但是 OnAppearing() 事件只觸發一次。 在 Android 上,當我按下開始按鈕並返回我的應用程序時,此事件不會再次觸發。

是否有解決方法(如 WindowsPhone 頁面中的 OnNavigatedTo)?

謝謝。

因此,當您的頁面出現時,會觸發OnAppearing事件。 即您已導航到該頁面或從堆棧中的另一個頁面返回該頁面。 您可以從API 文檔中看到當前沒有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進行更改。

您還可以使用 Xamarin 的 MessagingCenter 來執行事件的任意協調:http: //developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

我對同樣的事情感到沮喪:在 Xamarin.Forms 中沒有一致的視圖生命周期事件。 但是您可以通過使用 MessagingCenter 來解決其中的一些限制,它只是一個簡單的發布/訂閱消息傳遞工具。

這對我有用。 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.");
        }
    }

以第一個答案https://stackoverflow.com/a/29252552/1894630為基礎,

在 onappearing 和 ondisappearing 上設置標志,並基於它使用 onresume。 IE

內容頁.xaml.cs

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

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

應用程序.xaml.cs:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM