2009-05-24 8 views
2

J'ai un parent ScrollView avec une vue enfant. Lorsque l'utilisateur appuie sur le bouton de retour, je veux que la vue enfant gère l'événement. J'ai essayé quelques trucs mais aucun d'entre eux ne semble fonctionner. Une pression sur le bouton de retour tue l'activité.Ouverture childview retour de scrollview

public class GameScrollView extends ScrollView{ 

    public GameScrollView(Context context) { 
      super(context); 
    } 
    @Override 
    public boolean onInterceptTouchEvent (MotionEvent ev){ 
      return false; 

    } 
    @Override 
    public boolean onKeyDown (int keyCode, KeyEvent event){ 
      return false; 

    } 
} 

dans la vue des enfants que j'ai le code suivant

public class GameView extends View implements OnTouchListener, onKeyListener{ 

    public boolean onKey(View v, int keyCode, KeyEvent event){ 
      if(keyCode == KeyEvent.KEYCODE_BACK){ 
        //do stuff 
      } 
      invalidate(); 
      return true;   
    } 
} 

Dans le ScrollView j'ai aussi essayé redéfinissant la méthode dispatchKeyEvent de retourner faux, mais cela ne fonctionne pas non plus. Qu'est-ce que je fais mal ici?

Merci!

Répondre

1

Je l'ai compris. La raison pour laquelle cela ne fonctionnait pas était que la vue enfant n'avait pas de focus.

La définition de la propriété requestFocus() dans le constructeur de la vue enfant a corrigé le problème.

1
@Override 
public boolean onKeyDown(int i, KeyEvent event) { 

     if (i == KeyEvent.KEYCODE_BACK) { 
      return true; 
     else { 
      super.onKeyDown(i, event); 
      return true; 
     } 
     } 
     return false; 
    } 

En outre, je pense que vous devez intercepter la touche dans votre activité et non la vue.

+0

Si j'intercepte la touche enfoncée dans l'activité, comment l'envoyer à la vue pour qu'elle soit gérée? La vue doit faire un dessin basé sur la touche. Merci. – Maulin

Questions connexes