2012-02-24 25 views
5

En una de mis actividades tengo tres EditText sy un botón Aceptar. El OnFocusChangeListener se establece en los tres EditText s. El oyente debe activarse cada vez que se pierde el foco.OnFocusChange no siempre funciona

El cambio entre EditText s funciona a la perfección. Pero si el usuario presiona el botón Aceptar, no hay ningún cambio de enfoque (perder el foco) activado para el EditText que el usuario enfocó antes de presionar el botón.

¿Qué pasa con mi código?

private class MyOnFocusChangeListener implements OnFocusChangeListener { 
    private EditText editText; 

    public MyOnFocusChangeListener(final EditText editText) { 
     super(); 

     this.editText = editText; 
    } 

    @Override 
    public void onFocusChange(final View view, final boolean isFocused) { 
     if (!isFocused) { 
      if (editText == editText1) { 
       // Do a calculation 
      } else if (editText == editText2) { 
       // Do another calculation 
      } else if (editText == editText3) { 
       // Do a different calculation 
      } 
     } 
    } 
} 

@Override 
public void onCreate(final Bundle bundle) { 
    // ... 
    editText1.setOnFocusChangeListener(new MyOnFocusChangeListener(editText1)); 
    editText2.setOnFocusChangeListener(new MyOnFocusChangeListener(editText2)); 
    editText3.setOnFocusChangeListener(new MyOnFocusChangeListener(editText3)); 
    // ... 
} 

Respuesta

7

Se podría tratar de aclarar el foco cuando el usuario haga clic en Aceptar o en otro botón ....

por ejemplo,

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
{ 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      editText1.clearfocus(); 
      editText2.clearfocus(); 
      editText3.clearfocus(); 
      .... 
    } 
} 
+0

Esto posiblemente desencadenaría OnFocusChange en los tres EditText, así que no puedo usarlo. Pero esto me ayudó a encontrar una mejor manera. Ahora guardo el EditText que obtiene el foco en un miembro de la clase y en OnClick del botón borro el foco de ese EditText en particular. Eso funciona como un encanto. Muchas gracias. –

1

suena como usted podría tener problemas con el modo táctil, desde el android docs:

"La relación entre el modo táctil, la selección y enfoque significa que no se debe confiar en la selección y/o el foco de existir en tu aplicación ".

+0

Gracias por su respuesta. Esto es realmente malo porque tengo que elegir entre dos escenarios malos. 1.) Una calcualción solo tiene lugar si el usuario ingresa un EditText diferente antes de presionar el botón OK (los botones no son enfocables por defecto). 2.) Cambie el botón a enfocable para que el usuario tenga que presionar el botón dos veces. Este último funciona mejor que el primero porque el usuario puede almacenar valores no calculados en 1.). –

+0

Tal vez debería reconsiderar un poco el diseño de su aplicación, ¿qué es exactamente lo que está tratando de hacer? Podría complicar demasiado su código, cuando un rediseño podría ayudar a resolver su problema. También su código tiene algunos problemas, no necesita crear un oyente de enfoque y pasar el texto de edición al constructor. Cuando se invoca onFocusChanged, pasará la vista cuyo foco cambió, simplemente transfiera el parámetro de vista a un texto de edición (¡compruebe primero su tipo!). – Theblacknight

+1

El enlace muestra: "Error 404 - Archivo no encontrado". – astuter

Cuestiones relacionadas