Как узнать, что операция удаления произошла в EditText в Android? - PullRequest
2 голосов
/ 12 октября 2019

Я хочу получить обратный вызов при удалении символа в EditText.

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 12 октября 2019

Нет CallBack для непосредственного удаления символа !!

Но каждый раз, когда вы добавляете любой текст или редактируете свой текст EditText, все из TextWatcher CallBacks называются Соответственно

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

Поэтому вы можете проверить операцию удаления во всехиз них, как показано ниже. Обратите внимание, что вам не нужно проверять операцию удаления во всех обратных вызовах. Есть 3 способа понять операцию удаления в TextWatcher в 3 TextWatcher CallBacks , и каждый из них может решить вашу проблему:)

. Я думаю, что это лучше для васзнать о некоторых аргументах TextWatcher callBacks.

Как сказал @ ikerfah

  • start , это начальный индекс, который вот-вот будетудалено
  • count - длина текста, который должен быть удален
  • после - длина текста, который должен быть удалендобавлено

Пути:

  1. beforeTextChanged : вы сравниваете после аргумента с аргументом count.
  2. onTextChanged : вы объявляете поле в своей активности или фрагменте и заполняете поле каждый раз, когда вызывается onTextChanged. сравните ваше поле, которое предыдущий счетчик EditText с count аргумент, который является текущим EditTextCount;
  3. afterTextChanged: Это очень похоже на onTextChanged слушательно вы просто используете длина вместо числа.

Измените свой окончательный addTextChangedListener ссылка ниже:

    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;
    }
 });
2 голосов
/ 12 октября 2019
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) {

        }
    });

new внутри вашего обратного вызова beforeTextChanged у вас есть три параметра

  • start - начальный индекс, который должен быть удален
  • count - длина текста, которыйсобирается быть удаленным
  • после того, как длина текста, который должен быть добавлен

теперь вам нужно только сравнить эти параметры, чтобы достичь того, что вы хотите с обратным вызовом beforeTextChanged

...