web-dev-qa-db-ja.com

xamarin.formsのページライフサイクルイベント

最初のxamarin.formsアプリを開発しました。私はxamarin.formsに興奮していますが、いくつかのイベントを見逃しています。

Xamarin.forms ContentPageにpage-lifecycle-eventsがありますか?

次の2つを知っています。

protected override void OnAppearing()
{
}

protected override void OnDisappearing()
{
}

ただし、OnAppearing()イベントは1回しか発生しません。 Androidでは、スタートボタンを押してアプリに戻ると、このイベントは再び発生しません。

これに対する回避策はありますか(WindowsPhoneページのOnNavigatedToなど)?

ありがとう。

27
Joehl

そのため、ページが表示されるときに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から継承する必要があり、AppDelegateおよびMainActivityも変更する必要があります。

27
user1

XamarinのMessagingCenterを使用して、イベントの任意の調整を実行することもできます。 http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

Xamarin.Formsに一貫したviewライフサイクルイベントがないという同じことにイライラしています。ただし、MessagingCenterを使用することで、これらの制約の一部を回避できます。MessagingCenterは、単純なpub/subメッセージング機能です。

9
NovaJoe

これは私のために働いています。 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.");
        }
    }
5
elliotching