У меня есть текстовое представление редактирования, и я хочу сделать некоторую проверку сразу после того, как пользователь прекратил писать в поле и перешел к следующему, поэтому решил, что использование AfterTextChanged будет логичным делом.TextWatcher AfterTextChanged реагирует на каждую нажатую клавишу?
Проблема заключается в том, что AfterTextChanged запускает код, который я написал в файлах paretheses после каждого нажатия клавиши.
etUserPasswordSignupPage.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
//do some validation and then TOAST
}
});
И Toast показывает несколько раз, в то время как Im набрав :( Как я могу сделать это ждать, пока пользователь прекратил печатать и пошел в другое поле, или Готово, а затем запустить код для «afterTextChanged»?
EDIT:
Вот что произошло после реализации setOnEditorActionListener
09-26 17:15:36.275: E/AndroidRuntime(2102): FATAL EXCEPTION: main
09-26 17:15:36.275: E/AndroidRuntime(2102): java.lang.NullPointerException
09-26 17:15:36.275: E/AndroidRuntime(2102): at net.shiftinpower.activities.Signup$4.onEditorAction(Signup.java:154)
09-26 17:15:36.275: E/AndroidRuntime(2102): at android.widget.TextView.onEditorAction(TextView.java:3377)
09-26 17:15:36.275: E/AndroidRuntime(2102): at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:83)
09-26 17:15:36.275: E/AndroidRuntime(2102): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:301)
09-26 17:15:36.275: E/AndroidRuntime(2102): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:79)
и вот мой реальный код:
etUserPasswordAgainSignupPage.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
userPasswordAgain = etUserPasswordAgainSignupPage.getText().toString();
if (userPasswordAgain.equals("")) {
Toast.makeText(net.asdqwe.activities.Signup.this, configurationz.ERROR_MESSAGES_SIGNUP_FIELD_NOT_FILLED, Toast.LENGTH_SHORT).show();
} else {
passwordAgainIsOk = true;
Log.d("kylie", "pass again is ok");
}
if (!(userPassword.equals(userPasswordAgain))) {
Toast.makeText(net.asdqwe.activities.Signup.this, configurationz.ERROR_MESSAGES_SIGNUP_PASSWORDS_DO_NOT_MATCH, Toast.LENGTH_SHORT).show();
passwordsMatch = false;
} else {
passwordsMatch = true;
Log.d("kylie", "passwords match");
}
}
return false;
}
});
Используйте InputFilter для проверки, а addTextChangedListener() –
, что вы хотите, чтобы проверить точно –
С вы пытаетесь проверить после перехода в следующее поле ввода, пытались ли вы использовать 'OnFocusChangeListener' вместо' TextChangedListener'? – acj