2016-12-10 8 views
0

Je désactive un bouton lorsque l'utilisateur insère non LetterOrDigit et l'activer lorsqu'un utilisateur insère LetterOrDigit.Comment activer le texte lors de l'écoute avec "addTextChangedListener" et "Character.isLetterOrDigit (s.charAt (i))"

Le problème que j'ai, c'est qu'il le permet aussi, même lorsque l'utilisateur insère une lettre après un LetterOrDigit. Mais je veux activer seulement quand il supprime le caractère non LetterOrDigit.

Mon code

name1.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 
      @Override 
      public void afterTextChanged(Editable s) { 
       for (int i = 0; i < s.length(); i++) { 
        if(name1.getText().toString().length()>16) 
        { 
         register.setClickable(false); 
         mistakeusername.setErrorEnabled(true); 
         mistakeusername.setError("You cant insert more then 16 characters"); 
        }else { 
         if (!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_"))) 
         { 
          register.setClickable(false); 
          mistakeusername.setErrorEnabled(true); 
          mistakeusername.setError("Only allowed Digit, Number or '_'"); 
         }else{ 
          register.setClickable(true); 
          mistakeusername.setErrorEnabled(false); 
          mistakeusername.setError(""); 
         } 
        } 
       } 
      } 
     }); 
+0

Je pense que votre problème est que vous devez 'pause' de 'pour' après votre « if ((Character.isLetterOrDigit (s.charAt (i)) || Caractère!. toString (s.charAt (i)). equals ("_"))) "est vrai. – pooyan

Répondre

0

Je pense que votre problème est que vous devriez break de for après votre if(!(Character.isLetterOrDigit(s.charAt(i))||Character.toSt‌​ring(s.charAt(i)).eq‌​uals("_"))) est vrai.

essayez ceci:

name1.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
     } 
     @Override 
     public void afterTextChanged(Editable s) { 
      for (int i = 0; i < s.length(); i++) { 
       if(name1.getText().toString().length()>16) 
       { 
        register.setClickable(false); 
        mistakeusername.setErrorEnabled(true); 
        mistakeusername.setError("You cant insert more then 16 characters"); 
       }else { 
        if (!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_"))) 
        { 
         register.setClickable(false); 
         mistakeusername.setErrorEnabled(true); 
         mistakeusername.setError("Only allowed Digit, Number or '_'"); 
         break; 
        }else{ 
         register.setClickable(true); 
         mistakeusername.setErrorEnabled(false); 
         mistakeusername.setError(""); 
        } 
       } 
      } 
     } 
    }); 
+0

je vous remercie !!!!! J'ai essayé toute la journée, pour cette solution simple: D – MrOrhan

+0

et sry que je ne peux pas donner des coups de pouce, ne pas avoir assez de points ^^ – MrOrhan

+0

bien venu. Je suis tellement content que ce soit ta solution. – pooyan