イベントリスナー実装方法

android.viewView.OnClickListenerインターフェイス

大きく分けると2種類

 状態:作業中  閲覧数:3,548  投稿日:2013-05-11  更新日:2013-05-16  
A.OnClickListenerインターフェイスを継承する方法
B.OnClickListenerのインスタンスを生成する方法


詳細に分けると、4種類


1.リスナクラスを定義
2.既存のクラスにインターフェイスを実装
3.匿名クラス1 … setOnClickListenerメソッド内で匿名クラス利用
4.匿名クラス2 … setOnClickListenerメソッドから呼び出す、新たなメソッド内で匿名クラス利用


一覧


大別 詳細
1 OnClickListenerインターフェイスを継承する方法 1.リスナクラスを定義
2 同上 2.既存のクラスにインターフェイスを実装
3 OnClickListenerのインスタンスを生成する方法 3.匿名クラス1
4 同上 4.匿名クラス2


1.リスナクラスを定義

 閲覧数:724 投稿日:2013-05-12 更新日:2013-05-12 

特徴


・OnClickListener の実装をきちんと定義


コード例


・private なインナークラスとして実装
package android.style;

import android.style.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

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

       // ボタンオブジェクトの取得
       Button bt = (Button)findViewById(R.id.button1);
       // クリックリスナーの登録
       bt.setOnClickListener(new ShowClickButton());
   }

   // ボタンクリック時に呼ばれるメソッド
   private class ShowClickButton implements OnClickListener {
       public void onClick(View view) {
           TextView tview = (TextView)findViewById(R.id.textView1);
           tview.setText("ボタンが押されましたよ");
       }    
   };
}


2.既存のクラスにインターフェイスを実装

 閲覧数:603 投稿日:2013-05-12 更新日:2013-05-13 

特徴


1.自分自身にインターフェイスを実装
2.OnClickListener 引数に this を指定
3.実装クラスで、onClickメソッドをオーバーライド

1.自分自身にインターフェイスを実装

2.OnClickListener 引数に this を指定
・ここでのthisは「OnClickListenerインターフェイスを実装したユーザ作成クラス」の意味

3.実装クラスで、onClickメソッドをオーバーライド
「View.OnClickListener」インターフェイスはボタンクリックイベントに対応したonClickメソッドを持つため、実装クラスではこのメソッドをオーバーライド

implements OnClickListener
・「import android.view.View.OnClickListener;」している場合は「implements OnClickListener」だが、importしない場合は下記と同義
implements android.view.View.OnClickListener



コード例


・this=「OnClickListenerインターフェイスを実装したユーザ作成クラス」を、ボタンオブジェクトのsetOnClickListenerメソッドに渡すことで、クリックイベントが発生した際にオーバーライドしたメソッドが呼び出される
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class HelloAndroid4 extends Activity implements OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // ボタンオブジェクトの取得
        Button bt = (Button)findViewById(R.id.button1);
        // クリックリスナーの登録
        bt.setOnClickListener(this);
    }
 
    // ボタンクリック時に呼ばれるメソッド
    public void onClick(View view) {
        TextView tview = (TextView)findViewById(R.id.textView1);
        tview.setText("ボタンが押されました");
    }
}


3.匿名クラス1 … setOnClickListenerメソッド内で匿名クラス利用

 閲覧数:646 投稿日:2013-05-12 更新日:2013-05-15 

特徴


・setOnClickListener を呼ぶ度毎に、「OnClickListenerインターフェイス」インスタンス生成


コード例


package android.style;
 
import android.style.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class HelloAndroid5 extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 
  // ボタンオブジェクトの取得
  Button bt = (Button) findViewById(R.id.button1);
 
  // クリックリスナーの登録
  bt.setOnClickListener(new OnClickListener() {
   public void onClick(View view) {
          TextView tview = (TextView)findViewById(R.id.textView1);
          tview.setText("ボタンが押されました");
   }
  });
 }
}


4.匿名クラス2 … setOnClickListenerメソッドから呼び出す、新たなメソッド内で匿名クラス利用

 閲覧数:563 投稿日:2013-05-13 更新日:2013-05-15 

特徴


・インスタンス生成は1度きり
・メンバ変数に OnClickListener への参照を持たせておく
・クリックしたときの処理が複雑で長くなる場合に便利(処理を別途「private final」以下に切り出すため)
・別々のボタンに同じ処理を持たせたい場合に便利(処理を別途「private final」以下に切り出すため)


コード例


package android.style;

import android.style.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class HelloAndroid5_2 extends Activity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// ボタンオブジェクトの取得
Button bt = (Button) findViewById(R.id.button1);

// クリックリスナーの登録
bt.setOnClickListener(showClickButton);
}
   
   private final OnClickListener showClickButton = new OnClickListener() {
       public void onClick(View v) {
       TextView tview = (TextView)findViewById(R.id.textView1);
       tview.setText("ボタンが押されました");
       }
   };    
   
}



View.OnClickListenerインターフェイス

コメント投稿(ログインが必要)