2012-03-06 13 views
7
package android.example; 

import android.app.Activity; 

import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class Android_eg1 extends Activity { 
    Button bt; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     bt=(Button)findViewById(R.id.click); 
     bt.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
      // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show(); 
      } 

     }); 
     } //onCreate() 

}//class 

私はJavaの初心者です。コアJavaの基礎を知っています。 これはボタンクラスを通してイベント処理について知りたいサンプルプログラムです。setOnClickListener(new OnClickListener(){})

"bt.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show(); 
     } 

    });" 

setOnClickListener(パラメータ)なぜ彼らは関数の定義を与えている(公共のボイドのonClick(ビューV)})

これが許容される内側:?私はこの部分を理解することができませんでした ?

答えて

6

Javaでは、これはインターフェイスを実装する生成クラスです。関数の引数の内部でクラスを生成したり、外部クラスを作成したり、このクラスのインスタンスを渡したり、リスナーが必要とするインターフェイスを実装して、アクティビティによってリスナーとして渡すことができます。

3

setOnClickListenerは、パラメータとしてOnClickListenerオブジェクトをとります。基本的には、パラメータに匿名サブクラスOnClickListenerを作成しています。

匿名サブクラスで新しいスレッドを作成することができたときには、ex、Javaで同じようなものだ:

Thread t = new Thread(new Runnable() 
    {  
     public void run(){...} 
    }); 
3

ボタンのクリックは、イベントハンドルです。あなたのコード例ではなく、OnClickListnerを実装すれば、その違いをはっきりと理解することができます。 OnClickListnerを実装すると、OnClickListnerインターフェイスに関連して実装されていないメソッドを使用するオプションが表示されます。あなたはpublic void onClick方法を見ることができます。シナリオを要約すると、

  • あなたはボタンイベントをリッスンインターフェイスを持っている必要があり、ボタン
  • 持っている - OnClickListner
  • をユーザーイベントに耳を傾けるためにあなたのボタンイベントを設定する - button.setOnClickListner(this)
  • 何がしたいですイベントが終了した後は、onClickメソッド

このfull example codeはあなたにそれについて明確な理解を与えるかもしれません。

2

OnclickListenerはインタフェース(Listener)で、setOnClickListener()はonClickListener型のオブジェクトを必要とするメソッドです。私たちはクラスを匿名で作成することができます。すなわち、の名前なしのクラス(ANONYMOUS CLASS DECLARATION)を呼び出すことによって行われます。このクラスはOnClickListenerを実装しているため、void onClickメソッドを実装する必要があります。したがって、私たちは型インターフェイスのオブジェクトを持ち、これは省略形プログラミングに使用されます。匿名クラスについての更なるクリアランスの型OnClickListener()

OnClickListener()のパラメータを持つhttp://www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html

0

setOnClickListener機能を参照してくださいすることはインターフェイスです:(Cと同様++抽象基底クラス)

コード:

bt.setOnClickListener(new OnClickListener() 

    /* this is the definition of anonymous class which implements OnClickListener() */  
    /* equivalent to : 
class OnClickListener_implementation implements OnClickListener */ 
    { 
      public void onClick(View v) 
         { 
          //your code here 
          } 

    ); 

これは、指定したonClickを指定してOnClickListenerインターフェイスを実装するクラスのオブジェクトを構築することを意味します

関連する問題