onCreateメソッドを読み解く
では、ActivityクラスのonCreateメソッドとは、どんなメソッドなのでしょうか。じつはActivityクラスのonCreateメソッドは、Androidのフレームワークから呼び出されるメソッドなのです。
呼び出されるタイミングは、アクティビティが作成されるときなので、onCreateメソッドは、PCのデスクトップアプリケーションにたとえると、mainメソッドに相当するものです。
スーパークラスへのアクセス(superキーワード)
一般にonCreateメソッドでは、アプリケーションの初期化などを記述します。HelloAndroidアプリケーションでも、初期化処理が生成されています。
onCreateメソッドの最初の(8)行では、superキーワードを使って、スーパークラスであるActivityオブジェクトのonCreateメソッドを呼び出しています。
サブクラスのメソッドのなかから、スーパークラスのフィールドやメソッドを参照する場合、自分のクラスのメソッドやフィールドと区別するために、このようにsuperキーワードを用いて指定します。
ここで最初にActivityクラスのonCreateを呼び出しているのは、初期化に必要な共通の処理がActivityクラスで定義されているからです。ActivityクラスのonCreateメソッドは、Bundleクラス型の引数を持ち、引数のsavedInstanceStateをそのまま指定しています。Bundleクラスは、Android SDKのクラスで、画面の状態を保持しているオブジェクトです。
setContentViewメソッド
次の(9)行が、アプリケーション独自の処理となります。ここでは、Activityクラスで定義されたsetContentViewメソッドを呼び出しています。このメソッドはその名のとおり、画面のビューを設定するものです。
ビューとは、画面処理を行うオブジェクトです。Activityクラスのサブクラスは画面ごとに定義しますが、それ自体で画面の処理を行うのではなく、画面処理は、ビューというオブジェクトが担当しています。
このsetContentViewメソッドは、引数として画面レイアウトを定義したXMLファイル指定します。このXMLをもとにして、ビューを作成するという意味になります。
Rクラス
(9)行のsetContentViewメソッドの引数R.layout.mainは、少し分かりにくい記述ですが、自動的に生成された、前述のRクラスのなかで定義された定数です。Rクラスは、以下のようにリソースを示すID(定数値)が定義されたものです。
package codezine.androidjava.chap1; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }
Rクラス内には、さらにいくつかの定数クラスがあります。drawableクラスは画像ファイルのリソースIDの定義、layoutクラスでは、画面レイアウトを定義したXMLファイルを示すIDの定義、そしてstringクラスには、文字列のリソースIDが定義されています。
つまりR.layout.mainとは、画面レイアウトを定義したXMLファイルのIDで、そのXMLファイルが、main.xmlということです。
Androidアプリケーションでは、画面のレイアウトは、プログラムとして記述するのではなく、XMLベースのファイルに定義するほうが一般的になっています。もちろんすべてプログラムコードで記述することも可能ですが、縦向き、横向きなど、さまざまな表示方法に対応するには、XMLベースのほうが容易です。
レイアウト定義ファイルの編集
このファイルの編集は、GUI画面で可能です。Eclipseのパッケージ・エクスプローラーで、main.xmlをダブルクリックすると、MicrosoftのコンパイラツールのようなGUI編集画面が表示されます。
この画面は、エミュレータで起動したものと同じ画面になっているはずです。デフォルトでこのような文字列が画面に配置されていたため、ソースには何も記述しないのに表示されたというわけです。
以上が、HelloAndroid.javaの内容の説明でした。次は、このクラスに少しコードを追加してみましょう。