validar studio solo salto que personalizar obtener numeros mascara linea edittext datos android

solo - validar edittext en android studio



Tecla Intro en EditText pulsando onKey dos veces (7)

Ahhhh

Creo que esto está sucediendo para arriba y abajo?

He adjuntado un OnKeyListener a un EditText. He anulado el controlador onKey para capturar un KeyEvent.

Cuando un usuario pulsa la tecla enter (ya sea la tecla enter de su computadora mientras usa el emulador o la tecla enter del hardware en su teléfono con un teclado de hardware), el controlador onKey se ejecuta dos veces. Ambas ejecuciones tienen el código clave 66.

¿Por qué está pasando esto?

Quiero mi pantalla para que cuando el usuario presione la tecla enter, se realice una búsqueda. Debido a lo que está sucediendo, la búsqueda se realiza innecesariamente dos veces.

Mi método se ve así:

mFilter.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { // perform search return true; } return false; } });


Depuré y lo que funcionó para mí fue eso,

editText.setOnKeyListener(View.OnKeyListener { view, i, keyEvent -> if (i == KeyEvent.KEYCODE_ENTER && enterAsSend && (keyEvent.action == KeyEvent.ACTION_UP || keyEvent.action == KeyEvent.ACTION_DOWN)) { //Do stuff } return@OnKeyListener true } false })

y verifique su Editext ese android:inputType="textNoSuggestions" porque el primer clic en la tecla enter nos da la sugerencia del diccionario.


Este evento es KeyEvent.ACTION_DOWN por KeyEvent.ACTION_DOWN y KeyEvent.ACTION_UP . He hecho la depuración y finalmente me doy cuenta de que hay un KeyEvent event llamado KeyEvent event que nunca uso, luego verifiqué y encontré el problema.


Prueba esto:

mFilter.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if (keyCode == KeyEvent.KEYCODE_ENTER) { // perform search return true; } } return false; } });


Puedes filtrar así:

object.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { // do stuff return true; } return false; } });

Idem cuando presionas la tecla con KeyEvent.ACTION_DOWN


Tuve el mismo problema y las respuestas anteriores me ayudaron, pero estoy usando Xamarin.Android (c #) por lo que es una sintaxis ligeramente diferente ... Esto es lo que funcionó para mí:

MyStringTextBox.KeyPressed += OnEnterKeyPressed; protected void OnEnterKeyPressed(object sender, View.KeyEventArgs e) { if (e.KeyCode == Keycode.Enter && e.Event.Action == KeyEventActions.Up) { DoSomething(this, EventArgs.Empty); } else { e.Handled = false; } }

De esta manera, solo se llamará DoSomething () al presionar la tecla Enter (arriba) y, por lo tanto, se disparará una vez. Funciona y se prueba en Xamarin.Android


if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==0) {