Как вызвать метод afterTextChanged () в TextWatcher только один раз? - PullRequest
0 голосов
/ 29 января 2020

Я хочу вызывать метод afterTextChanged (Editable s) в TextWatcher только один раз, когда пользователь полностью ввел текст в EditText.

В настоящее время метод afterTextChanged вызывается после ввода каждого отдельного символа. Как мне сделать вызов моего метода checkSentence () только один раз?

Я пробовал как:

sentenceEdit.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }
            public void onTextChanged(CharSequence s, int start, int before, int count){

            }

            public void afterTextChanged(Editable s) {
                isSentenceModified=true;
                //Toast.makeText(MainActivity.this,"Editable:"+s,Toast.LENGTH_SHORT).show();
                checkSentence(s.toString());
            }
        });

Ответы [ 4 ]

0 голосов
/ 29 января 2020

Короче, ты не можешь. Метод обратного вызова не предназначен для вызова только один раз, так как @Mustafa Yanik указал, что вы никогда не знаете, когда действие пользователя закончится.

Другой возможный подход, который вы можете использовать, - это определение конца предложения, например, когда '.' или '?' или '!' добавляется к тексту, а затем вызывается метод checkSentence ().

0 голосов
/ 29 января 2020

Попробуйте, обработав boolean переменную

edtText.addTextChangedListener(new TextWatcher() 
        {
            boolean isReflect = false;
            public void beforeTextChanged(CharSequence cs, int start, int count, int after) {}
            public void onTextChanged(CharSequence cs, int start, int before, int count) {}
            public void afterTextChanged(Editable editable) 
            {
                if (isReflect) 
                { 
                    // your code here
                }
                isReflect = !isReflect; //Here boolean value is changed after if loop
            }


        });

Надеюсь, это сработает!

0 голосов
/ 29 января 2020

Мы не знаем, когда закончится процесс пользователя. Таким образом, вы можете использовать слушателя смены фокуса.

sentenceEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
         checkSentence(sentenceEdit.getText().toString());
        }
    }
});
0 голосов
/ 29 января 2020

после ввода одного указателя удалите текстовый слушатель

 sentenceEdit.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }
            public void onTextChanged(CharSequence s, int start, int before, int count){
 if (s.toString().length() > 0) {
                        sentenceEdit.removeTextChangedListener(this);
                    } 
            }

            public void afterTextChanged(Editable s) {
                isSentenceModified=true;
                //Toast.makeText(MainActivity.this,"Editable:"+s,Toast.LENGTH_SHORT).show();
                checkSentence(s.toString());
            }
        });
...