2010-11-23 30 views
2

Cela doit être une question noob, mais je ne peux pas trouver l'attente appropriée pour atteindre ce qui suit:Accéder à une sous-méthode d'un argument d'une méthode substituée dans android?

Dans Android, j'ai fait une sous-classe MyView étendant une classe View. En B, j'ai défini une méthode mMethod non présente dans la classe View.

Maintenant, je veux définir une interface OnClickListener sur MyView. Pour ce faire, je dois remplacer une méthode onClick lors de la définition d'un nouvel OnClickListener. En outre, je voudrais accéder à la méthode mMethod dans onClick, mais la méthode overriden attend une instance de classe View, pas celle de MyView. Alors qu'est-ce que je peux 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 
     ??? 
    } 

} 

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

Merci!

Répondre

3

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 tester que c'est le bon type de vue en premier.)

+0

Merci beaucoup, c'était si rapide que je ne peux pas encore vérifier la réponse acceptée ! – Tom