我正在尝试根据EditTexts是否实际更改来启用/禁用“保存”按钮,但我的字符串比较根本不起作用。
public void afterTextChanged(Editable editable) {
String newSet = editable.toString();
newSet = newSet.trim();
if(!newSet.equals(ip) || !newSet.equals(port) || !newSet.equals(username) || !newSet.equals(password)){
saveButton.setEnabled(true);
}else{
saveButton.setEnabled(false);
}
}
它一直告诉我字符串是不同的,即使它们不是。即使我打印出来,我也会得到完全相同的字符串。
任何人都可以帮助我吗?
由于
答案 0 :(得分:6)
您可能希望&&
代替||
:
public void afterTextChanged(Editable editable) {
String newSet = editable.toString().trim();
saveButton.setEnabled(!newSet.equals(ip) &&
!newSet.equals(port) &&
!newSet.equals(username) &&
!newSet.equals(password));
}
如果saveButton
不是 ip,端口,用户名或密码,则启用newSet
答案 1 :(得分:2)
newSet
不能等于所有这四个字符串,除非所有4个字符彼此相等。因此,条件很可能会返回错误。
如果您要求newSet
等于这4个字符串中的任何一个,那么正确的条件是:
if(!(newSet.equals(ip) || newSet.equals(port) || newSet.equals(username) || newSet.equals(password)))
答案 2 :(得分:2)
你应该这样写,更容易阅读:
if (!Arrays.asList(ip, port, username, password).contains(newSet))
{
saveButton.setEnabled(true);
}
else
{
saveButton.setEnabled(false);
}
或者:
saveButton.setEnabled(!Arrays.asList(ip, port, username, password).contains(newSet));
答案 3 :(得分:0)
将||
替换为&&
if(!newSet.equals(ip) && !newSet.equals(port) && !newSet.equals(username) && !newSet.equals(password))
原因:
OR(||)
如果任何条件得到满足,它将进入循环内部
AND(&&)
如果所有条件都满意,那么它只会进入循环内部。
在您的情况下,您需要满足所有条件,这就是使用和运算符而不是运算符的原因。