0

インターフェイス名は「()」で終わりません。

また、Android のドキュメントから View.OnClickListener がインターフェイスとして定義されています。

http://developer.android.com/reference/android/view/View.OnClickListener.html

そうは言っても、「View.OnClickListener」をパラメーターとしてリスナーに渡すとき、以下に示すように「()」で終了する必要があるのはなぜですか。

.setOnClickListener(new View.OnClickListener() {
4

5 に答える 5

1

その匿名の内部クラス

ボタンがあるとしましょう

 button.setOnClickListener(new View.OnClickListener() {
  @override
   public void onClick(View v)
   {

   } 

 });

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

次のようにすることもできます

  button.setOnClickListener(myclicklistener);

  OnClickListener myclickListener = new OnClickListener() // now you know why you ()
  {
      @Override
      public void onClick(View v)
      {

     } 
  };   

Javaドキュメントからの引用

匿名クラス式は、次のもので構成されます。

  • 新しいオペレーター

  • 実装するインターフェースまたは拡張するクラスの名前。

  • 通常のクラス インスタンス作成式と同様に、コンストラクタへの引数を含む括弧。注:インターフェイスを実装
    する場合、コンストラクターがないため
    、この例のように空の括弧のペアを使用します。

  • クラス宣言本体である本体。より具体的には、本文では、メソッド宣言は許可されていますが、ステートメントは許可されていません。

于 2013-09-27T04:13:43.047 に答える
1

クリック リスナーはインターフェイスです。

構文

variable.setOnClicklistener(new View.OnClickListener()
{})

これが onClicklistener の使用方法です。

于 2013-09-27T04:13:55.083 に答える
1

ここで匿名クラスを開始しているためです。したがって、インターフェースはパラメーターとして渡されるオブジェクトになります。

あなたはこのようにすることができます:

View.OnClickListener listener = new View.OnClickListener() {

    @Override
    public void onClick() {
    }
};
someView.setOnClickListener(listener);
于 2013-09-27T04:14:01.777 に答える
1

その特定のインターフェースを実装するオブジェクトを作成しているためです。これは、後続のブロックのメソッドを介して定義する匿名内部クラスのコンストラクター呼び出しです。

something.setOnClickListener(new View.OnClickListener()
{
   @Override
   public void onClick(View invoker)
   {
       // this is a method specified by the interface. The new Object will have this method implementation
   }
});
于 2013-09-27T04:14:06.063 に答える