2

これは初心者の質問に違いありませんが、次のことを達成するための適切な待機が見つかりません。

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

ここで、MyView に OnClickListener インターフェイスを設定したいと思います。これを行うには、新しい OnClickListener を定義するときに onClick メソッドをオーバーライドする必要があります。さらに、onClick で mMethod メソッドにアクセスしたいのですが、オーバーライドされたメソッドは、MyView のインスタンスではなく、View クラスのインスタンスを想定しています。それで、なにかお手伝いできますか ?

より正確には:

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

そしてメインクラス(Activity)で

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ですか? もしそうなら、それを行う方法は?サブインターフェースを定義する必要がありますか?

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

4

1 に答える 1

3

さて、あなたは使うことができます:

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

そうすれば、正しいビューで操作していることがわかります。間違った種類のビューが与えられた場合は、例外がスローされます。(例外をスローしたくない場合は、instanceof最初にそれが正しい種類のビューであることをテストするために使用できます。)

于 2010-11-23T12:00:21.033 に答える