IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Problème dans la gestion d'OnKeyListener


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut Problème dans la gestion d'OnKeyListener
    Bonjour a tous,

    j'essaie de faire un OnKeyListener sur un EditText afin de passer un boolean d'une valeur a une autre lorsque cette zone de texte est modifiée par l'appui d'une touche. Or il semblerai que cela bug et je ne comprend pas bien pourquoi.

    En effet, depuis ma tablet (une ASUS TF300T) il m'est impossible de taper du texte dans l'EditView avec le clavier du dock quand celui ci est branché (ceci depuis que j'ai mis en place ce listener). D'autre part quand j'enlève le dock et utilise le clavier virtuel d'Android, le texte se tape bien dans l'EditView mais l'état de ma variable semble redéfini a chaque touche appuyé (en tout cas c'est ce que le Toast de debug que j'ai mis dans ma fonction semble rapporter).

    Me suis-je trompé dans mon code ou ce listener serrait t'il buggé?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    		EditText txt = (EditText)findViewById(R.id.content);
    		txt.setOnKeyListener(new OnKeyListener(){
    			@Override
    			public boolean onKey(View v, int keyCode, KeyEvent event){
    				if(event.getAction() == KeyEvent.ACTION_DOWN && textSaved == true){
                                           // Toast temporaire pour debug
    					Toast.makeText(getApplicationContext(),"" + textSaved, Toast.LENGTH_SHORT).show();
    					textSaved = false;
    				}
    				return true;
    			}
    		});
    Merci d'avance pour votre aide.
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben je sais pas... d'après la doc:
    http://developer.android.com/referen...yListener.html :

    La fonction "onKey" Returns
    True if the listener has consumed the event, false otherwise.

    Donc là tu dois à priori dire au système que tu utilises tous les évènements de clavier... donc il ne doit plus en recevoir pour le texte.

    Au fait, utiliser onKey, ça va aussi detecter les mouvements de "selection", l'appui sur "back", etc... non ?
    Un simple onTextChanged n'est pas suffisant ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    Dans ma logique je me suis dis que la valeur retournée était forcément true dans la mesure ou le systême ne peut pas se tromper sur un élément comme celui ci (En théorie si le listener est déclenché c'est qu'une touche a bien été appuyée)

    En utilisant le même code que j'ai linké et en remplacant le retour par false j'ai constaté que je n'avais plus le problème et que le code fonctionnait semble-t-il comme je le voulais.

    Néanmoins, débutant sur Android je ne connaissai pas comment capter un évènement textChanged du coup je croyais qu'il n'existais que le OnKeyListener pour faire cela. Après ta réponse j'ai creusé dans cette direction et fais le code suivant qui fonctionne aussi, je l'utiliserai d'ailleurs car il est beaucoup plus logique que de faire une sorte de hook clavier pour détecter un changement d'état de mon EditText

    Ci joint le code utilisé pour les gens qui se réfereront au topic pour un problème similaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    EditText txt = (EditText)findViewById(R.id.content);
    txt.addTextChangedListener(new TextWatcher(){
    	@Override
    	public void beforeTextChanged(CharSequence s, int start, int count, int after){
    		// do nothing
    	}
     
    	@Override
    	public void onTextChanged(CharSequence s, int start, int before, int after){
    		// (NB: textSaved == true par défaut)
    		if(textSaved == true){
    			textSaved = false;
    			Toast.makeText(getApplicationContext(), "" + textSaved, Toast.LENGH_SHORT).show();
    		}
    	}
     
    	@Override
    	public void afterTextChanged(Editable s){
    		// do nothing
    	}
    });
    Encore merci pour ton aide.
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème dans la gestion des conditions
    Par pouchet64 dans le forum Débuter
    Réponses: 4
    Dernier message: 17/05/2010, 19h06
  2. Réponses: 3
    Dernier message: 02/09/2007, 16h53
  3. Problème dans la gestion d'erreur
    Par Tintou dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2007, 10h02
  4. Problème dans la gestion du CTreeCtrl
    Par vanitom dans le forum Visual C++
    Réponses: 9
    Dernier message: 28/09/2006, 14h29
  5. Réponses: 2
    Dernier message: 11/05/2005, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo