2016-07-13 6 views
2

Android onCreate Methoden scheint all die Dinge zu tun, die Sie normalerweise in einem Konstruktor tun würden.Warum sind die onCreate-Methoden von Android Views nicht nur die Konstruktoren?

Ich habe etwas Code, der einem Layout programmatisch einige Ansichten hinzufügt, und ein onCreate Methoden scheint ein wenig sinnlos - ich mache es nur für die Konsistenz.

for (Contact contact : manager.getContacts()) { 
     GuiContact guiContact = new GuiContact(contact, this); 
     guiContact.onCreate(); 

     // add them to the UI 
     guiContact.setLayoutParams(new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT 
     )); 
     contactListLayout.addView(guiContact); 
    } 

Warum ist diese Funktionalität in onCreate anstatt in der Konstrukteurs?

(Es würde Vorteile final Mitglieder beziehen, wenn die Funktionalität in der Konstrukteurs ist.)

+1

Der Kontext oder das Layout ist an der Stelle des Konstruktors verfügbar. Zu diesem Zweck können Sie auch die Initialisierung von Variablen innerhalb von 'onStart' durchführen. Mit anderen Worten, 'onCreate' hat einen Sinn dafür, so zu sein wie es ist. –

Antwort

4

Es ist, weil Sie nie ein Activity instanziiert. Das System macht es für Sie. Und dazu braucht es einen Konstruktor ohne Parameter. Daher ist es besser, die Initialisierung in onCreate() durchzuführen.

Außerdem setzen Sie Ihr Activity s-Layout in der onCreate()-Methode, so dass ein Griff zu diesem Layout im Konstruktor nicht funktioniert, und Sie nicht in der Lage sein, Ansichten dynamisch hinzuzufügen.

+1

Auch weil, wie du sagtest, eine Aktivität nie zerstört wird, sondern" neu erstellt "werden muss, wenn sie vom Hintergrund zurückkommt, also braucht sie eine Methode Erledige die anfängliche Arbeit –

+1

Er fragt abour 'guiContact.onCreate()' also was 'Activity' siehst du hier? 'guiContact' ist eine 'View'-Instanz, da' setLayoutParams' darauf aufgerufen wird und auch an die' ViewGroup # addView'-Methode übergeben wird – pskink