Подтвердить что ты не робот

Как применить событие Textchange в EditText

Я разработал одно простое приложение, например вычитание, добавление. В этом приложении я использую три EditTexts, один для ответа и два других вопроса. Я хочу рассчитать ответ на вопрос о событии изменения текста. Но когда я применяю событие изменения текста на обоих, это происходит, но не работает должным образом. Потому что, когда я вхожу в текст в первом EditText вопроса, происходит событие, но оно выдает это исключение:

07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event java.lang.NumberFormatException: unable to parse '' as integer

Что мне делать? Я использую событие TextWatcher для изменения текста.

txtOne.addTextChangedListener(this);
txtTwo.addTextChangedListener(this);

public void afterTextChanged(Editable s) {}

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

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

Ответ 1

Я думаю, что вы получаете пустую строку " " которая вызывает эту проблему. Убедитесь, что вы получили непустую строку из вашего EditText.

Учтите, что у вашего EditText нет EditText значения, и вы пытаетесь получить его значение и преобразовать его в int, и вы столкнетесь с такой проблемой.

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
            if(!s.equals("") ) { 
                //do your work here 
            }
    }



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

    }

    public void afterTextChanged(Editable s) {

    }
});

Также проверьте эту ссылку для большей идеи,

fooobar.com/questions/247312/...

Ответ 2

Я думаю, что лучший в случае, если тип edittext - это число... используйте (функцию длины) параметра  вместо функции (equle()) например:

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if (s.length() > 0)
                { //do your work here }
        }

    }

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

    }

    public void afterTextChanged(Editable s) {

    }
});

Ответ 3

Я использовал это и правильно:

public void afterTextChanged(Editable arg0) {
    String inputs = input.getText().toString();
    Integer index=0;
    if(!inputs.equals("")) 
        index=Integer.valueOf(inputs);

}

Ответ 4

Я думаю, вам нужно проверить, что ваше значение editText пустое или не первое. Что-то вроде этого:

String textValue;
textValue = edittext().getText().toString());
Log.v("","Value is " + textValue);
if(textValue != ""){
   // Call Text Change Listener Here
}else{
   // Throw error message or something
}

Надеюсь, что это поможет.

Ответ 5

Добавлена реализация Kotlin для дальнейшего использования

 webUrl.editText!!.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

                var urlToload: String
                if (s ==null || s.isEmpty()) {
                    urlToload = UniversalWebViewFragment.YOUTUBE_SERACH_URL + "hd trailers"
                } else {
                    urlToload = UniversalWebViewFragment.GOOGLE_SERACH_URL + s.toString()
                }

                loadURL(urlToload)
            }

        })