減算、加算などの簡単なアプリを1つ開発しました。このアプリでは、3つのEditTextを使用します。1つは回答用、もう2つは質問用です。テキスト変更イベントに関する質問の回答を計算します。しかし、この両方にテキスト変更イベントを適用すると、イベントが発生しますが、正しく機能しません。質問の最初の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) {}
この問題を引き起こしている空の文字列" "
を受け取っていると思います。 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) {
}
});
詳細については、このリンクも確認してください。
編集テキストのタイプが数値の場合に最適だと思います...(equle()関数)の代わりにパラメーターの(長さ関数)を使用しますex:
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) {
}
});
私はこれを使用しましたが、正しいです:
public void afterTextChanged(Editable arg0) {
String inputs = input.getText().toString();
Integer index=0;
if(!inputs.equals(""))
index=Integer.valueOf(inputs);
}
まず、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
}
それが助けになることを願っています。
私は同じ問題を抱えていて、これらの2つのアクションで問題は解決しました。
1-Android:inputType = "textNoSuggestions"(問題自体は解決しませんでした)
2-リスナーの追加:
edittext1.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
Log.e("JFT", "EDITTEXT => = "+s);
if(!s.equals("") ) {
//do your work here
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
将来の参照用に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)
}
})