Definí un campo EditText y deseo que se le informe cuando el usuario edite esos campos. Así que pensé: simple: agregué un OnKeyListener y así lo hice. Pero a pesar de que el campo de texto se edita (e incluso muestra el texto ingresado/modificado), no recibo ninguna devolución de llamada, es decir, el resultado de LOG no aparece.Android: ¿por qué mi OnKeyListener() no se llama?
TextView text = new TextView(this);
text.setText(...);
...
text.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event) {
TextView tv = (TextView)v;
CharSequence val = tv.getText();
Log.v(TAG, "value: " + val);
// ... rest omitted for brevity
}
});
¿Alguna idea, por qué esa devolución de llamada nunca se llama?
Michael
PS .: Sigh! ¡Android está lleno de rarezas! Parece que casi nada de lo que toqué hasta ahora funcionó inmediatamente como uno esperaría. Y, lo creas o no, tengo MUCHA experiencia con GUIs, esp. en Java (AWT, Swing, SWT, lo que sea ...) ¡Pero Android es una bestia realmente dura!
@Falmarri, ¿qué pasa con eso? Conceptualmente, getText devuelve una secuencia de caracteres, por lo que no hay nada de malo en tratar de almacenar el valor de retorno en una variable que sea de ese tipo. Y tienes que hacer ese reparto para usar el método getText. No puede simplemente cambiar el método onKey para tomar un TextView porque anula un método en OnKeyListener. (Podría decirse que debería haber una @Override en él, pero es bastante obvio en este caso.) – MatrixFrog
@Falmari: obviamente no has programado para Android. También preferiría cadenas, pero Android devuelve CharSequence por todas partes en lugar de Strings, por lo que tienes que hacer moldes o Strings() con frecuencia. Y si un encabezado de método solo define una "Vista" pero usted sabe que es una Vista de texto y necesita uno de los métodos que solo proporciona TextView, ¿qué más puede hacer? ¿Tienes una mejor sugerencia? – mmo