ウィジェットのイベント処理
また前回と同様のイベント処理を様々な記述方法によって実行してみたいと思います
無名クラスを使う
前回のイベント処理の簡略化のためjavaの無名クラスを使って実装する方法があります
Javaではクラスに名前を付けずに利用することができます
その方法で宣言された内部クラスは名前を持たないので無名クラスです
匿名クラスや無名内部クラスなんて言い方もします
プログラムの簡略化はできますが・・・明示的なextendsやimplementsを持つこともできません
これを継承するクラスを作成できません
こういったいくつかの制限がありますがソースを簡略化し見やすくするメリットもあります
簡単な動作なら無名クラスを使うのも選択肢の一つです
MainActivity.java
package blog.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { //RadioGroup group; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //テキストビュー作成 TextView tv = new TextView(this); tv.setText("イベント発生前"); setContentView(tv); //無名クラスを利用 tv.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ((TextView)v).setText("クリックイベントが発生しました。"); } }); } }実行結果は前回と同様でクリックするとテキストビューの文字が変更する仕様です
アクティビティにimplements
アクティビティクラスにイベントリスナ-をインプリメントすることで
自分自身のクラスにOnClickListenerインタフェースを実装することもできます
この時setOnClickListenerの引数にはOnClickListenerインターフェースを実装したクラスのオブジェクトを指定しますが
自分自身のクラスで実装していますので“this”を指定します
MainActivity.java
package blog.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity implements View.OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("イベント発生前"); setContentView(tv); tv.setOnClickListener(this); } public void onClick(View v) { ((TextView)v).setText("クリックイベントが発生しました"); } }最初に Activity implements View.OnClickListenerでActivityに実装しています
実行結果は前回同様なので省きます
スポンサードリンク