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 :

Gestion focus sur un EditText


Sujet :

Android

  1. #1
    Inactif
    Homme Profil pro
    Marchand de glace
    Inscrit en
    Mai 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Marchand de glace
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2012
    Messages : 88
    Points : 101
    Points
    101
    Par défaut Gestion focus sur un EditText
    Bonjour,

    Pour comprendre mon besoin :

    *****************************

    Mon application :

    Stock disponible :80

    Nouveau stock : 80-Valeur EditText

    Nombre de sortie de stock : EditText

    ****************************

    Je dois récupérer l'évenement sur les touches numériques du clavier, pour que des que la valeur du EditText change le nouveau stock (stock dispo - nombre sortie) soit mis a jour.

    J'ai donc fait ce code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     final EditText sortie_value = (EditText)alertDialogView.findViewById(R.id.nb_entres);
     
            //On ajoute un listener sur les champs texte pour lancer la recherche sur Enter
            sortie_value.setOnKeyListener(new OnKeyListener() {
    	        public boolean onKey(View v, int keyCode, KeyEvent event) {                 
     
    	        	int number_selected=0;
    	        	if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_0){
    	        		number_selected=0;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_1){
    	        		number_selected=1;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_2){
    	        		number_selected=2;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_3){
    	        		number_selected=3;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_4){
    	        		number_selected=4;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_5){
    	        		number_selected=5;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_6){
    	        		number_selected=6;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_7){
    	        		number_selected=7;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_8){
    	        		number_selected=8;
    	        	}else if(event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_9){
    	        		number_selected=9;
    	        	}
     
    	        	if (event.getAction()==KeyEvent.ACTION_DOWN){
     
    	        		sortie_value.setText(sortie_value.getText()+number_selected+"");
    	                String intermediraire=sortie_value.getText().toString();
    	                if(!intermediraire.equals("")){
    	                	new_qte=Integer.parseInt(intermediraire);
    	        		}else{
    	        			new_qte=0;
    	        		}
    	                	new_qte=Integer.parseInt(iNbQteSortie)-new_qte;
    	        		new_quantite.setText(new_qte+"");
     
    	        		return true;
    	        	}
    				return false;  
     
    	        }
     
    	     });
    Tout cela marche correctement, j'ai le résultat que je souhaite ! Seulement étant donné que c'est moi qui rajoute la valeur dans le EditText je perd le focus et il revient au début. Or je voudrais qu'il reste a la fin

    J'espère avoir été le plus clair possible même si c'est pas évident !


    ****************************

    EDIT
    ****************************

    Pour faire plus simple, comment éviter le retour du focus d'un EditText au début du champs (et donc le mettre a la fin) après avoir forcer la valeur avec la methode setText("1");

  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
    Wow... c'est un peu une bombe atomique pour casser un oeuf non ?

    Il y a une interface très pratique dans les EditText: les TextWatcher.

    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
     
    class MyActivity .... implements TextWatcher
    {
        public void onCreate(...)
        {
            ....
            EditText monTextEdit = findViewById(....);
            monTextEdit.addTextChangedListener(this);
            ...
        }
     
        public void afterTextChanged(Editable s)
        {
             int newValue = Integer.parseInt(s.getText());
             // do something on the UI
        }
     
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        { /* nothing */ }
     
        public void onTextChanged(CharSequence s, int start, int before, int count)
        { /* nothing */ }
    NB: Rien n’empêche de limiter les caractères avec les filtres ad-hoc... Les filtres n’interféreront pas avec le TextWatcher.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Inactif
    Homme Profil pro
    Marchand de glace
    Inscrit en
    Mai 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Marchand de glace
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2012
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Bonjour !

    Merci beaucoup pour cette méthode que je ne connaissait pas du tout

    Cela marche parfaitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		final EditText monTextEdit = (EditText)alertDialogView.findViewById(R.id.nb_entres);
    		monTextEdit.addTextChangedListener(this);
    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
    23
    24
    25
     
    public void afterTextChanged(Editable s) {
    		// TODO Auto-generated method stub
     
    		final EditText monTextEdit = (EditText)alertDialogView.findViewById(R.id.nb_entres);
    		final TextView new_quantite = (TextView)alertDialogView.findViewById(R.id.new_quantite);
    		String newValue = monTextEdit.getText().toString();
    		if(newValue.equals("")){
    			newValue="0";
    		}
    		int calcul=0;
    		if(mode=="inv"){
    			if(newValue=="0"){
    				newValue="";
    			}
    		}else if(mode=="entree"){
    			calcul=Integer.parseInt(newValue)+Integer.parseInt(iNbQteSortie);
    			newValue=calcul+"";
    		}else if(mode=="sortie"){
    			calcul=Integer.parseInt(iNbQteSortie)-Integer.parseInt(newValue);
    			newValue=calcul+"";
    		}
    		new_quantite.setText(newValue);
     
    	}

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

Discussions similaires

  1. gestion des focus sur formulaire
    Par gui-llaume dans le forum IHM
    Réponses: 6
    Dernier message: 08/11/2007, 15h13
  2. Focus sur DrawGrid
    Par zworg dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/05/2004, 13h44
  3. [VB.NET] Focus sur cellule de DataGrid
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/05/2004, 21h12
  4. Réponses: 2
    Dernier message: 19/08/2003, 15h45
  5. Ne jamais mettre le focus sur un tbutton, possible
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/07/2003, 15h06

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