清除TextWatcher的beforeTextChanged()内的EditText数据

时间:2014-05-15 06:24:52

标签: android android-edittext textwatcher

我必须在我的应用中观看EditText,如果EditText数据在2行中 然后,我想再写第3行,然后前两行的数据应该清楚。

为此,我使用以下方式进行

mTextWatcher = new TextWatcher() {

        private int lines;

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            Log.v("", "inside ontextchnaged");

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

            lines = getTotalLines(txtDataSource);
            if (lines == 2) {                   

                   txtDataSource.removeTextChangedListener(mTextWatcher);
                Log.v("", txtDataSource.getText().toString());
                txtDataSource.setText("");
                txtDataSource.addTextChangedListener(mTextWatcher);

            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            Log.v("", "inside aftertextchanged");

        }
    };

    txtDataSource.addTextChangedListener(mTextWatcher);

我没有通过以下代码输入行

private int getTotalLines(EditText editText) {
    int lineNumber = 0;
    String text = editText.getText().toString()
            .substring(0, editText.getSelectionStart());

    for (int i = 0; i < text.length(); i++) {
        if (String.valueOf(text.charAt(i)).equalsIgnoreCase("\n")) {
            lineNumber++;
        }
    }

    return lineNumber;
}

因此,当我在EditText中获得2行数据时,我将从EditText删除观察者 然后清除EditText的数据,并再次在EditText添加了观察者。

每一件事情都很好,但问题是在我开始写完之后是2行之后它没有写出我从键盘输入的第一个字符,它开始从第二个字符输入写入。

所以在输入2个字符的2行后,它没有写第一个字符,我输入它开始写第二个字符。

请帮我解决这个问题。

谢谢....

2 个答案:

答案 0 :(得分:1)

最后我解决了我的问题。

这可能不是标准的方法,但我没有找到任何其他方法来做到这一点 的 beforeTextChanged()

我在 onTextChanged()

中使用下面的代码解决了
     @Override
     public void onTextChanged(CharSequence s, int start, int before,
                int count) {

 lines = getTotalLines(txtDataSource);

  if (lines == 2 ) {

     String frstChar = String.valueOf(s.toString().charAt(s.toString().length() - 1));
     txtDataSource.removeTextChangedListener(mTextWatcher);

 txtDataSource.setText("" + frstChar);

     txtDataSource.setSelection(txtDataSource.getText().toString().length());

 txtDataSource.addTextChangedListener(mTextWatcher);

}
   }

现在在第3行第一个字符显示在EditText中。

我正在分享我的方式,以便如果其他人会遇到这样的问题,他们可以通过这种方式解决..

由于

答案 1 :(得分:-1)

尝试从单词的中间进行编辑时解决问题。

“setSelection”一直强制你在文本的末尾写字。