2016-08-29 53 views
0

我正在使用TextWatcher实时接收来自EditText的每个字母,并且我想将EditText文本与特定的字符串进行比较。如何使用TextWatcher比较两个值

我想改变EditText的颜色,当两个值不同时。

我已经试图实现我的想法,但工作不正常,我没有收到任何错误,即使第一个字母相同,文本也始终保持红色。

我的代码:

public void onTextChanged(CharSequence s, int start, int before, int count) { 

     for(int i = 0; i < getString().length();i++){ 

     if (String.valueOf(s).equals(getString().charAt(i))) { 

      mEditText.setTextColor(Color.GREEN); 

     } else { 

      mEditText.setTextColor(Color.RED); 

     } 

    } 



} 

谢谢。

回答

0

尝试直接在textwatcher上使用edittext的字符串。

if(mEditText.getText().toString.equals("YourString") { 
    mEditText.setTextColor(Color.GREEN); 
} else { 
    mEditText.setTextColor(Color.RED); 
} 
+0

谢谢,它更有意义。 –

0

您的主要问题是您将整个CharSequence与一个单独的字符进行比较,这不太可能相等。如果要比较整个字符串,删除for循环,只需使用:

if(s.equals(getString()) { 
    // Green 
} else { 
    // Red 
} 

如果你真的通过想环路和信你可以比较的信,但是当你可以直上这是一个可怕的解决方案比较字符串。

0
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    if(s.toString().equals(mEditText.getText().toString())) { 
     mEditText.setTextColor(Color.GREEN); 
    } 
    else { 
     mEditText.setTextColor(Color.RED); 
    } 
} 

无需使用for循环。只需从CharSequence对象中取出字符串并将其与EditText对象的字符串进行比较即可。把它放在onTextChanged方法里面,它会在输入一个字符后进行比较。