2010-08-18 4 views
22

Hat Android ein Äquivalent zu den Funktionen viewDidLoad und viewDidAppear von Cocoa?androids viewDidLoad und viewDidAppear entsprechen

Wenn nicht, wie würde ich dann eine Aktion ausführen, wenn eine Ansicht angezeigt wird? Meine App ist eine Anwendung mit Tabs, bei der eine der Registerkarten eine Liste von Forenthemen enthält. Ich möchte, dass die Themenliste jedes Mal aktualisiert wird, wenn die Ansicht angezeigt wird. Ist so etwas in Android möglich?

+0

Eine ausgezeichnete alte Frage! Dies kann hier hilfreich sein: http://stackoverflow.com/a/40789869/294884 – Fattie

Antwort

11

Die Aktivitätsklasse verfügt über die Methoden onCreate und onResume, die für viewDidLoad und viewDidAppear ziemlich analog sind.

Activity.onResume

EDIT

dazu hinzuzufügen, da einige in den Kommentaren erwähnt, dass die Ansicht Baum während dieser Rückrufe noch nicht vollständig verfügbar ist, gibt es die ViewTreeObserver, die Sie hören können wenn Sie den ersten Zugriff auf die Ansichtshierarchie benötigen. Hier ist ein Beispiel, wie Sie den ViewTreeObserver verwenden können, um dies zu erreichen.

View someView = findViewById(R.id.someView); 
    final ViewTreeObserver obs = someView.getViewTreeObserver(); 
    obs.addOnPreDrawListener(new OnPreDrawListener() { 

     public boolean onPreDraw() { 
      obs.removeOnPreDrawListener(this); 
      doMyCustomLogic(); 
      return true; 
     } 
    }); 
+0

onCreate ist nicht wie viewDidLoad, weil in viewDidLoad alle Ansichten von der xml/xib erstellt und zugänglich sind, aber in onCreate die Ansichten noch nicht zugänglich sind . – Jonny

+0

Ich fand heraus, dass 'findViewById' in' onCreate' verwendet werden kann, nachdem 'setContentView' aufgerufen wurde. – Jonny

+0

überhaupt nicht ..... – Jacky

3

Aus meiner begrenzten, im Entstehen begriffenen Verständnis für Android, implementieren Sie viewDidLoad Typ-Funktionalität in der onCreate Methode Ihrer Activity:

onCreate (Bundle), wo Sie Ihre Aktivität initialisieren . Die meisten wichtiger ist, hier werden Sie in der Regel Anruf setContentView (int) mit einem Layout Ressource Ihrer Benutzeroberfläche definiert, und mit findViewById (int) die Widgets in diesem UI abzurufen, die Sie mit programmatisch interagieren müssen.

Das Äquivalent für viewDidAppear ist näher an der onResume Methode:

aufgerufen, nachdem onRestoreInstanceState (Bundle), onRestart() oder onPause(), für die Aktivität in Wechselwirkung zu starten mit dem Benutzer. Dies ist ein guter Ort, Animationen, offener Exklusiv-Zugriff Geräte (wie die Kamera) usw.

12

onResume() ist mehr wie viewCouldAppear zu beginnen. :) public void onWindowFocusChanged (boolean) ist dem viewDidAppear am nächsten. An dieser Stelle innerhalb des Aktivitätslebenszyklus können Sie die Ansicht über seine Größe fragen.