2010-11-23 5 views
2

これは問題ではありませんが、以下を達成するための適切な待機時間が見つかりません:アンドロイドでオーバーライドされたメソッドの引数のサブメソッドにアクセスしていますか?

アンドロイドでは、Viewクラスを拡張するサブクラスMyViewを作成しました。 Bでは、Viewクラスに存在しないメソッドmMethodを定義しました。

今、MyViewでOnClickListenerインターフェイスを設定したいとします。これを行うには、新しいOnClickListenerを定義するときにonClickメソッドをオーバーライドする必要があります。さらに、onClickのmMethodメソッドにアクセスしたいが、オーバーライドされたメソッドはMyViewのものではなくViewクラスのインスタンスを期待している。じゃあどうすればいい ?

より正確には:

public class MyView extends View{ 
    ... 
    public void mMethod(){ 
    ... 
    } 
} 

そしてメインクラス(活動)に

MyView myView = new MyView() 
//It's not the correct constructor, but it's not the point 

myView.setOnClickListener(new OnClickListener(){ 

    @Override 
    public boolean onClick(View v){ 
     //Here I would like to access mMethod of MyView 
     ??? 
    } 

} 

myView.mMethod()を使用しているが唯一のソリューションですか? vから(MyView)vへのダウンキャストは可能ですか?もしそうなら、それを行う方法?サブインターフェイスを定義する必要がありますか?

ありがとうございました!

答えて

3

さて、あなたが使用できます。

public boolean onClick(View v) { 
    MyView mv = (MyView) v; 
    mv.myMethod(); 
} 

あなたは右ビュー上で動作している知っているその方法は、 - あなたは、ビューの間違った種類を与えられている場合、それは例外がスローされます。 (例外をスローしたくない場合は、まずinstanceofを使用して、適切な種類のビューであることをテストすることができます)

+0

ありがとうございました。 ! – Tom

関連する問題