2016-07-13 5 views
2

AndroidのonCreateメソッドは、通常はコンストラクタで行うすべての処理を実行しているようです。AndroidビューのonCreateメソッドがコンストラクタだけではないのはなぜですか?

私はプログラムでレイアウトにいくつかのビューを追加し、onCreateメソッドを持ついくつかのコードがありますが、私は一貫性のためにそれを行います。

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); 
    } 

なぜこの機能はコンストラクタではなくonCreateにありますか?

(機能はコンストラクタにあった場合、finalメンバーに関連する利点があるでしょう。)

+1

コンストラクタのポイントでは、コンテキストもレイアウトも使用できません。関連するノートでは、 'onStart'の内部で変数の初期化を行うこともできます。言い換えれば、 'onCreate'はそれが道であるという目的を持っています。 –

答えて

4

あなたはActivityを自分でインスタンス化したことがないからです。システムはそれをあなたのために行います。これを行うためには、パラメータを持たないコンストラクタが必要です。したがって、onCreate()で初期化を行う方が良いです。

また、onCreate()メソッドでActivityのレイアウトを設定しているため、コンストラクタでそのレイアウトのハンドルを取得できないため、動的にビューを追加することができません。

+1

あなたが言ったように、アクティビティは決して破壊されることはありませんが、バックグラウンドから復帰するたびに「再作成」する必要があるからです。最初の仕事をしなさい –

+1

彼はabour 'guiContact.onCreate()'を要求していますので、 'Activity'はここにありますか? 'guiContact'は' setLayoutParams'が呼び出され、 'ViewGroup#addView'メソッドに渡されるので' View'インスタンスです – pskink

関連する問題