Question

Cela doit être une question de noob, mais je ne peux pas trouver la bonne attente pour obtenir les résultats suivants:

Dans Android, j'ai fait une MyView de sous-classe l'extension d'une classe View. En B, j'ai défini une méthode mMethod pas présent dans la classe View.

Maintenant, je veux mettre une interface OnClickListener sur MyView. Faire cela, je dois passer outre une méthode onClick lors de la définition d'une nouvelle OnClickListener. De plus, je voudrais accéder à la méthode mMethod dans onClick, mais la méthode surchargée attend une instance de View classe, pas un est un MyView. Que puis-je faire?

Pour être plus précis:

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

Et dans la classe principale (activité)

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
        ???
    }

}

est en utilisant myView.mMethod() est la seule solution? Est-il possible de downcaster v à (MyView)v? Dans l'affirmative, comment le faire ? Dois-je définir une sous-interface?

Merci!

Était-ce utile?

La solution

Eh bien, vous pouvez utiliser:

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

De cette façon, vous savez que vous êtes sur le point de vue fonctionnement droite - et il lancera une exception si vous êtes donné le mauvais type de vue. (Si vous ne voulez pas jeter une exception, vous pouvez utiliser instanceof pour vérifier que c'est le bon type de vue d'abord.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top