2010-09-02 5 views
1

maintenant j'ai ceci:Masquage du clavier lorsqu'un contrôle perd le focus?

public void focusChanged(Field field, int eventType) { 
    if (field == txtAmount && eventType == 1) 
    { 
     getVirtualKeyboard().setVisibility(VirtualKeyboard.HIDE); 
    }   
} 

Maintenant, mon problème est que le clavier ne se cache pas. Je pense que l'erreur est dans le paramètre eventType. Quel numéro identifie un événement LostFocus? J'ai codé dur dans '1' pour les tests mais ça ne semble pas marcher.

FocusChangeListener focusListener; 

    //In the constructor: 
    txtAmount = new EditField(Field.FIELD_RIGHT); 
    txtAmount.setFocusListener(focusListener); 

public void focusChanged(Field field, int eventType) { 
    if (field == txtAmount && eventType == 1) 
    { 
      Dialog.alert("iasdi"); 
     getVirtualKeyboard().setVisibility(VirtualKeyboard.HIDE); 
    }   
} 

Pourquoi cela ne fonctionne-t-il pas? Y at-il une énumération ou quelque chose que je peux utiliser pour choisir quel eventType je devrais réagir?

En outre, si je supprime le type d'événement (de sorte que le code exécuté indépendamment de l'action juste quand le focus change à droite) rien ne se passe le dialogue que je mets pour montrer, ne signifie pas que l'événement est jamais entré. suggestions?

grâce

Répondre

1

eventType peut être l'une des constantes suivantes, a déclaré en classe FocusChangeListener:

public static final int FOCUS_GAINED = 1; public static final int FOCUS_CHANGED = 2; public static final int FOCUS_LOST = 3;

!!! Utilisez FOCUS_LOST = 3 au lieu de FOCUS_GAINED = 1 pour gérer l'événement de perte de focus.

Vérifiez également null getVirtualKeyboard() méthode valeur de retour, car elle renvoie null sur les appareils tactiles sans clavier virtuel (comme Bold 9700).

public static void hideVirtualKeyboard() { 
    if (net.rim.device.api.ui.VirtualKeyboard.isSupported()) { 
     Screen screen = UiApplication.getUiApplication().getActiveScreen(); 
     if (null != screen) { 
      net.rim.device.api.ui.VirtualKeyboard vk = screen 
        .getVirtualKeyboard(); 
      if (vk != null) { 
       vk.setVisibility(net.rim.device.api.ui.VirtualKeyboard.HIDE); 
      } 
     } 
    } 
} 
+0

Merci Yeti, vraiment bon de penser à la null! –

0

pour adapter le eventType, essayez d'utiliser les constantes définies dans FocusChangeListener au lieu de coder en dur « 1 ». dans ce cas, vous voulez probablement utiliser FocusChangeListener.FOCUS_LOST.

en ce qui concerne le cas du code ne fonctionne pas, êtes-vous en train de définir la valeur de la " focusListener "variable? Du code que vous avez posté, vous n'êtes pas et il passera juste comme "null" dans setFocusListener().

+0

Oui, c'est logique, comment puis-je 'définir une valeur pour focusListener'? –

+0

FocusChangeListener focusListener = new FocusChangeListener() - bien qu'il soit plus courant d'utiliser simplement une classe anonyme dans l'appel setFocusListener(). –

Questions connexes