web-dev-qa-db-fra.com

Comment puis-je savoir quand un EditText perd son focus?

J'ai besoin d'attraper quand un EditText perd le focus, j'ai cherché d'autres questions mais je n'ai pas trouvé de réponse.

J'ai utilisé OnFocusChangeListener comme ceci

OnFocusChangeListener foco = new OnFocusChangeListener() {

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

    }
};

Mais ça ne marche pas pour moi.

135
japuentem

Implémentez onFocusChange of setOnFocusChangeListener et il existe un paramètre booléen pour hasFocus. Lorsque cela est faux, vous avez perdu le focus sur un autre contrôle.

 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
            }
        }
    });
303
ρяσѕρєя K

Demandez à votre Activity d'implémenter OnFocusChangeListener() si vous souhaitez une utilisation factorisée de cette interface, exemple :

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

Dans votre OnCreate, vous pouvez ajouter un écouteur, par exemple:

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

alors le studio Android vous invitera à ajouter la méthode à partir de l’interface, acceptez-la .... cela ressemblera à ceci:

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

et comme vous avez un code factorisé, il vous suffira de le faire:

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

tout ce que vous codez dans le !hasFocus concerne le comportement de l'élément qui perd le focus, cela devrait faire l'affaire! Mais attention, dans un tel état, le changement de focus risque d'écraser les entrées de l'utilisateur!

8
Cerberus

Façon Kotlin

editText.setOnFocusChangeListener { _, hasFocus ->
    if (!hasFocus) {  }
}
1
Achraf Amil

Son fonctionnement correct

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

}
0
Keshav Gera

Utilisation de l'expression lambda Java 8:

editText.setOnFocusChangeListener((v, hasFocus) -> {
    if(!hasFocus) {
        String value = String.valueOf( editText.getText() );
    }        
});
0
Sandeep Yohans