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.
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
}
}
});
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!
Façon Kotlin
editText.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) { }
}
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();
}
}
Utilisation de l'expression lambda Java 8:
editText.setOnFocusChangeListener((v, hasFocus) -> {
if(!hasFocus) {
String value = String.valueOf( editText.getText() );
}
});