¿Cómo puedo saber cuándo un EditText pierde el foco?

Necesito detectar cuando un EditText pierde el foco, he buscado otras preguntas pero no encontré una respuesta.

Utilicé OnFocusChangeListener como este

 OnFocusChangeListener foco = new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // TODO Auto-generated method stub } }; 

Pero, no funciona para mí.

Implementar en 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 } } }); 

Haga que su Activity implemente OnFocusChangeListener() si desea un uso factorizado de esta interfaz, por ejemplo:

 public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{ 

En su OnCreate puede agregar un oyente, por ejemplo:

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

entonces Android Studio te pedirá que agregues el método desde la interfaz, lo aceptes … será como:

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

y como tienes un código factorizado, tendrás que hacer eso:

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

cualquier cosa que codifique en el !hasFocus es para el comportamiento del elemento que pierde el foco, ¡eso debería ser el truco! ¡Pero tenga en cuenta que en tal estado, el cambio de enfoque podría sobrescribir las entradas del usuario!

Está trabajando apropiadamente

 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(); } }