サンプルを読み解く努力をする。

[java]
package com.akira_plus.helloworld;

import android.app.Activity;
import android.os.Bundle;

public class HelloworldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
[/java]

いきなりさっぱりわからないけどこれがjavaの記述なら覚えるしかない。
[java]
package com.akira_plus.helloworld;

import android.app.Activity;
import android.os.Bundle;
[/java]
パッケージ宣言はなんとなく本体の名前を宣言するのと、利用するクラスのパッケージを書くところらしい。
ActivityクラスとBundleクラスを使うよ。っていう宣言なのか。
ActivityクラスはAndroidアプリの土台になるらしいキモになる部分のようだ。Bundleクラスって何をする物なのかと思って検索してみたら
『「Bundle」クラスはOSの判断で強制的に停止、終了する時に一時的にデータを格納するクラス』って書いてあった。
なんだかよくわかんないけどデータを管理してくれる奴らしいのでこれもきっとすごく基本だ。

[java]
public class HelloworldActivity extends Activity {
[/java]

って言うのはjavaとかオブジェクト指向でググってると超出てくる継承 extendsという概念だ(笑
この場合、土台になるActivityクラスを元にしてその機能を丸々いただきつつ、そこに処理を追加してクラスを作るという便利な話らしい。
ちなみに元になる方がスーパークラスで、利用して作る方のクラスはサブクラスと言う様だ。
つまり、HelloworldActivityクラスはActivityクラスのサブクラスか。
継承とオーバーライドって言うのが更に関係性のある言葉らしいけどそれも@Overrideで出てくるな。
買った本によると、@Overrideはアノテーションでそれを書いておくと、オーバーライドが成立していないときにコンパイラが警告してくれるらしい。

オーバーライドが分かってないのでアノテーションってなんだよ!って思った。
スーパークラスのメソッドをサブクラスで再定義することをメソッドのオーバーライドといいます。
ああ、後から書いた方が優先されるのか。なんかstyle定義みたいだな。

@Overrideアノテーションを書いておくと、スーパークラスにないメソッドをサブクラスに記述したときに、
再定義するメソッドが無いよってエラーとして通知してくれるための物なのか…。
まあとりあえず書いておく物としてスルーしておくか。

次、
[java]
public void onCreate(Bundle savedInstanceState) {
[/java]
これも定型文なのかな…。onCreateって、確かActivityが最初に作成されたときに呼び出されるんだよね。
初期設定とかに使う部分なのかしら。アクセス修飾子がpublicで、戻り値が無しでvoid。
メソッド名がonCreateで、引数の型がBundleで、引数の名前がsavedInstanceState。
savedInstanceStateどこから来たんだ。中身何なんだ。ワカランけど、なんか保存値が入っているんだろう。(笑

[java]
super.onCreate(savedInstanceState);
[/java]

これも定型として受け止めておこう。よくわからん。
superって、たしか親クラス(スーパークラス)のメソッドにアクセスするときに使うんじゃなかったっけ。
てことは、親クラスのonCreateメソッドにsavedInstanceStateを渡すってことかね…。

[java]
setContentView(R.layout.main);
[/java]

って、どうもR.layout.mainを画面に表示してくれるメソッドらしい。
R.layout.mainが何を指すのかよく分からないが、どうやら、/res/layout/main.xmlが関係しているっぽい。
画面上は、Hello World, HelloworldActivity!と表示されているが、

<?xml version=”1.0″ encoding=”utf-8″?>


xmlにはそれらしき表記は見当たらない。何となく怪しいのは@string/helloの部分なので
探っていくと、
/res/values/string.xmlファイルに

<?xml version=”1.0″ encoding=”utf-8″?>

Hello World, HelloworldActivity!
Helloworld

と言うのがある。これだ!なんでこんな構成にしているのかそのメリットとか全然まだ理解出来ていないが

setContentView(R.layout.main);が
/res/layout/main.xmlに従って画面を表示するという呼び出しであり、
/res/layout/main.xmlの中の@string/helloが
/res/values/string.xmlファイルの名前がhelloの文字列を代入する書き方で、その結果
画面に「Hello World, HelloworldActivity!」が表示された。というつながりだけは何となく把握。何となくだけど…。


Comments are closed.