Как узнать, когда EditText теряет фокус?

Мне нужно поймать, когда EditText теряет фокус, я искал другие вопросы, но я не нашел ответа.

Я использовал OnFocusChangeListener как этот

OnFocusChangeListener foco = new OnFocusChangeListener() {

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

    }
};

Но это не работает для меня.

Ответ 1

Внесите onFocusChange из setOnFocusChangeListener и там булев параметр для hasFocus. Если это неверно, вы потеряли фокус на другом элементе управления.

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

Ответ 2

Имейте Activity Activity OnFocusChangeListener(), если вы хотите факторизованное использование этого интерфейса, Пример:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

В вашем OnCreate вы можете добавить слушателя, например:

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

тогда студия android предложит вам добавить метод из интерфейса, принять его... это будет выглядеть так:

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

и поскольку у вас есть факторизованный код, вам просто нужно это сделать:

@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:\"");
    }
}

все, что вы кодируете в !hasFocus, предназначено для поведения элемента, который теряет фокус, это должно сделать трюк! Но будьте осторожны, что в таком состоянии изменение фокуса может перезаписать записи пользователя!

Ответ 3

Работает правильно

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

}