如何知道Android中的EditText发生了删除操作?

How to know a delete operation occurred in EditText in Android?

我想在 EditText 中删除一个字符时得到回调。

我该怎么做?

editText.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) {

        }
    });

新的在你的 beforeTextChanged 回调中你有三个参数

  • start是即将被删除的起始索引
  • count 是即将被删除的文本的长度
  • after 是即将添加的文本的长度

现在您只需比较这些参数即可通过回调 beforeTextChanged 实现您想要的任何结果

没有直接删除字符的回调!!

但是每次您添加任何文本或编辑 EditText 文本时,所有 TextWatcher 回调都会调用 分别

(1-beforeTextChanged , 2-onTextChanged, 3-afterTextChanged)

因此您可以检查所有的删除操作,如下所示。 请注意,您不需要检查所有回调中的删除操作。 在 3 TextWatcher CallBacks 中有 3 种方法可以理解 TextWatcher 中的删除操作,每种方法都可以解决您的问题:)

。我认为您最好了解一些 TextWatcher 回调参数。

正如@ikerfah所说

  • start是即将删除的起始索引
  • count是即将删除的文字长度
  • after是即将添加的文字长度

方法:

  1. beforeTextChanged:你 compare after argument with count argument .
  2. onTextChanged:您在您的 activity 或片段中声明一个字段 并在每次 [=11= 】 叫。比较你的 字段是 previous EditText count with count 参数是 当前 EditTextCount;
  3. afterTextChanged: 它很像 onTextChanged 侦听器,但只是你使用 length 而不是计数。

Change Your Final addTextChangedListener link below:

    yourEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

        if (after < count) {
            // delete character action have done
            // do what ever you want
            Log.d("MainActivityTag", "Character deleted");
           }
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int start, int before, int count) {

      //mPreviousCount count is fied
         if (mPreviousCount > count) {
                // delete character action have done
                // do what ever you want
                Log.d("MainActivityTag", "Character deleted");
            }
            mPreviousCount=count;
        }

    @Override
    public void afterTextChanged(Editable editable) {
        Log.d("MainActivityTag",editable.toString());
        int length=editable.length();

      //mPreviousLength is a field
        if (mPreviousLength>length)
        {
            // delete character action have done
            // do what ever you want
            Log.d("MainActivityTag", "Character deleted");
        }
        mPreviousLength=length;
    }
 });