javaを学習していくうちにやってみたいとは思ったものの、結局途中で投げ出してしまったandroidでのアプリ開発をもう一度学習する事にしてみました。その学習記録や備忘録を残していこうと思います。
使用する教材は株式会社翔泳社の「Androidアプリ開発の教科書」を使用します。
今回、記録として残そうと思うのは、第4章「イベントとリスナー」です。
リスナの設定方法
アプリのレイアウトや、アプリ上に表示する文字列はXMLで記述しなければいけませんが、アプリ自体の処理はjavaで記述しなければなりません。
端末に対する操作であるイベントを検出するには、リスナを設定する必要があります。
イベントに対し、実行する処理をイベントハンドラと言います。
テキストを入力して、ボタンを押すとそのテキストを返すようなアプリケーションをつくるとしましょう。
Androidでリスナを設置する手順としては、以下の通りです。
1.それぞれのイベントに対応したリスナクラスを作成する。
タップというイベントに対してのリスナクラスを作成するには、View.OnCliclListenerインターフェースを実装します。
2.リスナクラス内の所定のメソッドに処理を記述する(このメソッドがイベントハンドラ)。
View.OnCliclListenerインターフェースの場合はonClickメソッドとなります。onClickメソッド内に書き込む処理は「EditTextから入力された文字を取得して、Textviewに表示させる。」です。その処理を実行するには、画面部品を取得する必要があります。それを行うのがfindViewById()メソッドです。引数として渡すのは、android:idとして設定された画面部品のidを示すR値です。
//例)レイアウトファイル内
<EditText
android:id=”@+id/etName”/>
アクティビティファイル内
findViewById(R.id.etName);
というように指定して画面部品を取得します。
3.リスナクラスをnewしてリスナ設定メソッドを引数として渡す。
最後の手順としてリスナ本体を設定します。
まず、ボタンのオブジェクトを取得し、リスナのインスタンスを作成します。リスナを設定するメソッドはインタ
ーフェースによってまちまちですが、実装したインターフェースと関連のある名前になってます。
ボタンにはsetOnClickListener(リスナのインスタンス)でリスナを設定します。
//例)
Button btn = findViewById(レイアウトファイルで設定したボタンのR値);
TestListener listener = new TestListener();
btn.setOnClickListener(listener);
これで、リスナの設定が完了しました。
第4章を参考に作成したアプリが次のものです。
名前を入力して、表示を押すと入力した名前を返してくれるアプリです。
クリアを押すことで、画面上のすべての項目を削除してくれます。
このアプリの場合、表示ボタンとクリアボタンにリスナが設定されているわけです。
イベントハンドラは共通で、switch構文で各ボタンのR値で分岐させてます。
//リスナクラス
private class HelloListener implements View.OnClickListener{
@Override
public void onClick(View view) {
EditText input = findViewById(R.id.etName);
TextView output = findViewById(R.id.tvOutput);
int id = view.getId();
switch(id){
case R.id.btClick:
String inputStr = input.getText().toString();
output.setText(inputStr+"さん、こんにちは!");
break;
case R.id.btClear:
input.setText("");
output.setText("");
break;
}
}
}
getId()メソッドでイベントを受け取った画面部品のR値を取得できます。
受け取ったR値を変数idに代入してそれをswitch構文の中でレイアウトファイル内で設定したR値と、比較させて処理を分岐させてます。