2016-12-10 20 views
0

当用户插入非LetterOrDigit并在用户插入LetterOrDigit时启用它时禁用按钮。如何在使用“addTextChangedListener”和“Character.isLetterOrDigit(s.charAt(i))”进行侦听时启用文本“

我遇到的问题是,即使用户在非LetterOrDigit之后插入字母,它也会启用它。但我想只在他删除非LetterOrDigit角色时启用。

我的代码

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

我觉得你的问题是,你应该从 '破' '为' 你的“如果((Character.isLetterOrDigit(s.charAt(I))||字符后! toString(s.charAt(i))。equals(“_”)))“是真的。 – pooyan

回答

0

我觉得你的问题是,你的 if(!(Character.isLetterOrDigit(s.charAt(i))||Character.toSt‌​ring(s.charAt(i)).eq‌​uals("_")))你应该breakfor后也是如此。

试试这个:

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

谢谢你!!!!!我尝试了整整一天,对于这个简单的解决方案:D – MrOrhan

+0

和sry,我不能给予重击,没有足够的分数^^ – MrOrhan

+0

好吧。我很高兴,这是你的解决方案。 – pooyan

相关问题