2015-03-25 16 views
17

Ho appena sviluppato la mia prima app xamarin.forms. Sono entusiasta di xamarin.forms, ma mi mancano diversi eventi.Eventi del ciclo di vita della pagina in xamarin.forms

Esistono eventi di ciclo di vita della pagina in xamarin.forms ContentPage?

So di questi due:

protected override void OnAppearing() 
{ 
} 

protected override void OnDisappearing() 
{ 
} 

Ma l'OnAppearing() evento si attiva solo una volta. Su Android, quando spingo il pulsante di avvio e torno alla mia app, questo evento non si attiva di nuovo.

C'è una soluzione per questo (come OnNavigatedTo nelle pagine di WindowsPhone)?

Grazie.

risposta

17

Quindi l'evento OnAppearing viene generato quando viene visualizzata la pagina. Cioè hai navigato verso quella pagina o torna a quella pagina da un'altra nello Stack. Attualmente non esistono Page Lifecycle eventi, come si può vedere dalla API documentation

Penso che quello che si sta parlando è se si mette la vostra applicazione per dormire e navigare di nuovo dentro l'evento OnAppearing non viene licenziato, questo è perché la tua pagina hasn è apparso perché era già lì, l'applicazione era appena addormentata.

Quello che state cercando è il App Lifecycle che include metodi come:

protected override void OnStart() 
{ 
    Debug.WriteLine ("OnStart"); 
} 
protected override void OnSleep() 
{ 
    Debug.WriteLine ("OnSleep"); 
} 
protected override void OnResume() 
{ 
    Debug.WriteLine ("OnResume"); 
} 

è possibile utilizzare l'evento OnResume a fare quello che stai cercando.

Questo documento Xamarin include le modifiche che devono essere apportate ai vecchi progetti Xamarin per accedere a questi eventi. per esempio. la tua classe App nella libreria condivisa deve ereditare da Xamarin.Forms.Application e le modifiche devono essere apportate anche a AppDelegate e MainActivity.

+0

ho pensato che ci sono alcuni altri eventi che posso usare .. Ma ora posso risolvere il problema. Grazie per la risposta rapida. – Joehl

6

Si potrebbe anche usare MessagingCenter di Xamarin per eseguire coordinamento arbitraria di eventi: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/messaging-center/

Sono stato frustrato dalla stessa cosa: non avendo coerenti vista eventi del ciclo di vita in Xamarin.Forms. Ma è possibile aggirare alcuni di questi vincoli utilizzando il MessagingCenter, che è semplicemente una semplice funzione di pubblicazione/sottotitoli.

+0

Ho usato il bevore di MessagingCenter ma non ho mai avuto l'idea di usarlo per questo scopo. Buona soluzione, grazie. – Joehl

+0

Ho anche incontrato cicli di eventi incoerenti di Xamarin Android e UWP. Avevo una prima scheda che utilizza CurrentPage della pagina padre per attivare l'evento Appearing della seconda scheda. Su Android, la prima scheda può sempre attivare l'evento Apparente, tuttavia, su UWP, non sempre. Il problema incoerente è risolto da MessagingCenter. Grazie! –

3

Questo funziona per me. Xamarin.Forms 2.0 e versioni successive. Ogni volta che si torna a questa pagina CP, viene generato l'evento Appearing.

public CP:ContentPage 
    { 
     //.... 
     public CP() 
     { 
      this.Appearing += CP_Appearing ; 
      //... 
     } 

     private void CP_Appearing(object sender, EventArgs e) 
     { 
      Debug.WriteLine("*************HALLO******WELCOME BACK."); 
     } 
    } 
Problemi correlati