2012-05-16 66 views
113

Necesito detectar cuando un EditText pierde el foco, he buscado otras preguntas pero no he encontrado una respuesta.¿Cómo puedo saber cuándo un EditText pierde el foco?

que utilizan OnFocusChangeListener como esto

OnFocusChangeListener foco = new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     // TODO Auto-generated method stub 

    } 
}; 

embargo, esto no funciona para mí.

Respuesta

257

Implemente onFocusChange de setOnFocusChangeListener y hay un parámetro booleano para hasFocus. Cuando esto es falso, pierdes el foco en otro control.

EditText txtEdit = (EditText) findViewById(R.id.edittxt); 

txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {   
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) { 
       // code to execute when EditText loses focus 
      } 
     } 
    }); 
+15

+1 - pero vale la pena señalar que si su edición de texto se encuentra en una vista de lista, cada jugada clave se traducirá en la caja y conseguir perder el foco. Consulte esta solución para realizar un seguimiento del recuadro que se enfoca actualmente: http://stackoverflow.com/questions/9527067/android-edittext-in-listview-loses-focus-on-calling-notifydatachanged – bsautner

+13

41 upvotes por una respuesta que básicamente dice "leer el valor 'hasFocus'". La verdad es que esto es realmente difícil de hacer que EditText pierda su enfoque y hay toneladas de preguntas sin respuesta al respecto. –

+0

¿Dónde agrego el código que muestra? Si lo coloco como está en "onCreate", la aplicación falla – Jona

6

Que su Activity implemento OnFocusChangeListener() si quieres un uso factorizada de esta interfaz, ejemplo:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{ 

En su OnCreate puede agregar un oyente por ejemplo:

editTextReaserch.setOnFocusChangeListener(this); 
editTextMyWords.setOnFocusChangeListener(this); 
editTextPhone.setOnFocusChangeListener(this); 

a continuación, Android Studio le pedirá que agregue el método desde la interfaz, acéptelo ... i t será como:

@Override 
public void onFocusChange(View v, boolean hasFocus) { 
// todo your code here... 
} 

y cuando usted tiene un código factorizada, vas a tener que hacer eso:

@Override 
public void onFocusChange(View v, boolean hasFocus) { 
    if (hasFocus) { 
     editTextReaserch.setText(""); 
     editTextMyWords.setText(""); 
     editTextPhone.setText(""); 
    } 
    if (!hasFocus){ 
     editTextReaserch.setText("BlaBlaBla"); 
     editTextMyWords.setText(" One Two Tree!"); 
     editTextPhone.setText("\"your phone here:\""); 
    } 
} 

todo lo que en el código de !hasFocus es que el comportamiento de la el elemento que pierde el foco, ¡eso debería hacer el truco! ¡Pero tenga en cuenta que en tal estado, el cambio de enfoque podría sobrescribir las entradas del usuario!

0

Su funciona correctamente

EditText et_mobile= (EditText) findViewById(R.id.edittxt); 

et_mobile.setOnFocusChangeListener(new OnFocusChangeListener() {   
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       // code to execute when EditText loses focus 
if (et_mobile.getText().toString().trim().length() == 0) { 
         CommonMethod.showAlert("Please enter name", FeedbackSubmtActivity.this); 
        } 
      } 
     } 
    }); 



public static void showAlert(String message, Activity context) { 

    final AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setMessage(message).setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

       } 
      }); 
    try { 
     builder.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
Cuestiones relacionadas