2011-10-21 21 views
0

のAndroidのImageButton派生クラスでのonClickをオーバーライドするにはどうすればよいいます私はImageButtonから派生しました。私はそのクラスで "オンクリック"の振る舞いを定義したいと思っています。あなたは <p></p>は、私はクラスを作成した...私は、これは千個の異なる方法で千回を求めて見てきましたが、まだそれが仕事を得ることができない

私は私がように私の活動ののonCreate内で何かを行うことができます知っている:

myButton b; 
b = (myButton)findViewById(R.drawable.mybutton); 
b.setOnClickListener(new View.OnClickListener() { 
    ...etc... 

が、私はそれは、派生クラスであるべきコードを定義したいです。

私が最初に私のようにそれを定義できると思っていた:

@Override public void onClick(View v) { 

...しかし、私は「onClickのは」スーパークラスではないので、私はここに「@Override」を使用することはできませんというエラーが出ます。 ( "@Override"を削除しようとすると、ビルドして実行するだけですが、呼び出されることはありません)。

@Override public void onClickListener(View v) { 

を...と「onClickListener実装」と無駄に「OnClickListenerを実装」のいくつかの変形:私も試してみました。

これはかなりシンプルでなければなりません。

答えて

1
b.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      derivedClassFunction(v); 
     } 
    }); 

    public void derivedClassFunction(View v) { 
      /* code...*/ 
    } 

別の方法:

public class DerivedClass extends ImageButton implements View.OnClickListener { 
    /*code...*/ 
    b.setOnClickListener(this); 
    /*code...*/ 
    @Override 
    public void onClick(View v) { 
     /*code...*/ 
    } 

} 
+0

ああ - 私はそれを得ると思う - "OnClickListener"は "onClick"という関数を含む "インターフェース"です。あなたは "setOnClickListener"を呼び出して、そのインタフェースをサポートするオブジェクトに渡し、その関数を実装しなければなりませんか? – Brad

+1

はい、まさに... – Caner

1

実際のビューには方法onClick()がないからです。作業は、ViewクラスのonUpKey()で行われます。

ただし、サブクラスのイベントをクリックして聞きたい場合は、これを非常に簡単に行うことができます。 View.OnClickListerを実装する内部クラスを作成し、それを使用してイベントを聞いたり、さらに簡単にしたり、クラス内のインターフェイスを実装したり、構築中にリスナーとして設定することができます。後者は、次のようになります。

class YourClass extends ImageButton implements View.OnClickListener { 
    public YourClass() { 
     setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     //Your code 
    } 
} 

LAS_VEGASはすでに内部クラスとの第一の変形がのように見えるかもしれ方法を掲載しています。

関連する問題

 関連する問題