前回までで、レイアウトXMLを作りました。
今回はいよいよ、javaファイルのコーディングに入ります。
HelloWorld.javaの編集
パッケージ・エクスプローラから「HelloWorld」→「src」→「com.hogehoge.android.helloworld」→「HelloWorld.java」と選択してHelloWorld.javaを開きます。
デフォルトでは以下の様になっていると思います。
package com.hogehoge.android.helloworld;
import android.app.Activity;
import android.os.Bundle;public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
まず、この内容を説明します。
package com.hogehoge.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
冒頭のこの部分は、このクラスが所属するパッケージの定義と、このファイル内で利用するライブラリのインポート定義です。この辺の記述はjavaと何ら変わりません。また、殆どのjavaライブラリがAndroidでも利用できます。
次に、
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
この部分がアプリの本体となるクラスです。このクラスはActivityクラスを継承したHelloWorldと言う名前のクラスだと定義されています。また、アプリが起動された時に呼ばれるonCreate()メソッドをオーバーライドしたメソッドが追加されています。
デフォルトのonCreate()メソッドでは画面表示に使うレイアウトXMLを指定する処理のみを行います。
setContentView(R.layout.main);
の部分がそれです。
引数に渡しているR.layout.mainと言うのは「res」フォルダの中の「layout」フォルダにある「main」と言うレイアウトXMLを表すIDです。ちなみに、layoutを始め、IDを振ったview、画像ファイル等へアクセスする場合は必ず、このR.××.△△を使います。
さて、今回はこれを以下の様に編集して、ボタンをクリックしたらEditTextビューにHelloWorld!!と表示されるようにします。
package com.hogehoge.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
EditText text = (EditText)findViewById(R.id.EditText01);
text.setText(“Hello World!!”);
}
});
}
}
追加したのはこの部分です。
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
EditText text = (EditText)findViewById(R.id.EditText01);
text.setText(“Hello World!!”);
}
});
まず、
Button btn = (Button)findViewById(R.id.Button01);
ここに出てくるfindViewById(int)と言うメソッドは、IDを指定して該当viewの参照を取得すると言うものです。上記の例ではR.id.Button01と言うIDを指定してviewを取得。取得出来るのは親ClassであるViewなので、ボタンとして扱えるよう、(Button)でボタンとしてキャストした上でButton型変数btnに格納しています。
※お気づきだと思いますが、このButton01と言うIDはレイアウトXML作成の際にボタンに設定したandroid:idの値です。
で、このbtn変数を使って何をやるかと言うと、クリックされた時のイベント処理を定義しています。
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
EditText text = (EditText)findViewById(R.id.EditText01);
text.setText(“Hello World!!”);
}
});
この部分です。
Androidではボタン等のViewへのアクションや、ハードキーの押下等各種イベントをそれぞれに対応したListenerを用意して捕捉します。ここでは、btnが参照を保有しているボタンに対して、新しく作ったOnClickLister()をセットしています。
そして、その新しいOnClickLister()のonClick()メソッドをオーバーライドして独自の処理を記述しています。
独自処理の部分がこれです。
EditText text = (EditText)findViewById(R.id.EditText01);
text.setText(“Hello World!!”);
ボタンと同じように、IDでEditTextの参照を取得し、それに対してsetText()メソッドで「Hello World!!」と言うテキスト設定しています。
このメソッドが実行されると画面のEditTextビューにHelloWorld!!が表示されるわけです。
そうそう。忘れる所でした。
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
実は上記のインポート定義も追加されています。これは今回処理中で使ったViewやボタン、EditTextのクラスをインポートしたからです。
でもこれは、Eclipseがほとんど助けてくれるのであまり意識する必要はありません。
インポートされていないクラスを使おうとすると、該当部分に赤下線がでて警告されます。
その部分にマウスオーバーすると、改善策が列挙されるので、この中から○○をインポートと言うのを選べば良いんです。
これで処理の記述は終了です。
機能がとてもシンプルなので大分コードも短いですが、意外と色んな要素が入っているので長文になってしまいました。
次はandroidマニフェストの記述と、デバッグについて説明します。
The forum is a bregthir place thanks to your posts. Thanks!