ソースコードを修正する
では、これらのコンポーネントをJavaのソースコード内から利用をしてみましょう。ここでは、ボタンをクリックしたら、EditTextのテキストを調べ、これを利用してTextViewにテキストを表示する、ということを行ってみましょう。
package jp.allabout.android;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.util.CharSequences;
import android.view.View;
import android.view.View.*;
import android.widget.*;
public class MyAndy extends Activity {
private Button button;
private EditText edit;
private TextView text;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
// コンポーネントの設定
button = (Button)this.findViewById(R.id.button);
edit = (EditText)this.findViewById(R.id.edit);
text = (TextView)this.findViewById(R.id.text);
// イベント組み込み
button.setOnClickListener(new MyClickAdapter());
}
// イベントクラス
class MyClickAdapter implements OnClickListener {
@Override
public void onClick(View v) {
Editable s = edit.getText();
text.setText("こんにちは、" + s + "さん。");
}
}
}
テキストを書いてボタンをクリックするとメッセージが表示される。 |
ここでは、onCreateメソッドにいくつか処理を追加し、更にボタンをクリックしたときの処理を行うイベントリスナーを作成しています。まず、コンポーネントを保管するフィールドを定義しておきます。
private Button button;
private EditText edit;
private TextView text;
XMLでレイアウトに組み込んだコンポーネントは、Java側ではandroid.widgetパッケージの「TextView」「EditText」「Button」といったクラスのインスタンスとして扱われます。onCreateでは、コンポーネント関係のインスタンスを、用意したフィールドに設定します。
button = (Button)this.findViewById(R.id.button);
edit = (EditText)this.findViewById(R.id.edit);
text = (TextView)this.findViewById(R.id.text);
これらのインスタンスは、Activity内(つまりthis内)にある「findViewById」というメソッドを利用して取得します。これは、引数に指定したIDのコンポーネントを示すインスタンスを得るものです。
見ればわかるように、引数に指定しているIDは、R.javaに自動生成されたidクラスのフィールドになっていますね? このように、Rクラスを介して、XMLのコンポーネントとJavaのインスタンスが関連付けられるようになっているわけです。