TextWatcher()在常量循环中



每次用户输入一个字母时,它被存储在outData中,然后清除TextView。为什么这是一个常量循环?我以为条件语句会退出但是它一直在循环?

  writeText     = (TextView) rootView.findViewById(R.id.WriteText);
  writeText.addTextChangedListener(watch);
  TextWatcher watch = new TextWatcher() {
    @Override
    public void afterTextChanged(Editable arg0) {
        if (writeText.getText() == "") {
            return;
        }
        else{
            String writeData = writeText.getText().toString();
            byte[] OutData = writeData.getBytes();
            ftDevice.write(OutData, writeData.length());
            writeText.setText("");
        }
    }
    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
    }
    @Override
    public void onTextChanged(CharSequence s, int a, int b, int c) {
    }
};

有两个问题:

1-字符串不能与==符号进行比较,有一个equals函数用于此,在这里您可以简单地检查字符串长度== 0作为返回的基本条件。

2-调用setText()将再次触发TextWatcher回调,而不是编辑作为参数传递的Editable对象,更改将被反映。

这样做:

if (writeText.getText().length() == 0) {
        return;
    }
    else{
        String writeData = writeText.getText().toString();
        byte[] OutData = writeData.getBytes();
        ftDevice.write(OutData, writeData.length());
        arg0.replace(0, arg0.length(), "");
    }

字符串比较使用'equals'方法。

String1.equals(String2)代替==.

equals方法用于比较内容,==用于比较引用和原语,而不是内容。

最新更新