Как применить событие 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) {}
Ответы
Ответ 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)
}
})