“Soumettre” implicitement après avoir frappé Fait sur le clavier au dernier EditText

J’ai utilisé certaines applications où, lorsque je remplis mon nom d’utilisateur, puis je passe à mon mot de passe, si j’appuie sur “Terminé” sur le clavier, le formulaire de connexion est automatiquement soumis, sans que je clique sur le bouton Soumettre. Comment ça se passe?

Essaye ça:

Dans votre mise en page mettez / éditez ceci:

 

Dans votre activité, mettez ceci (par exemple dans onCreate):

  // your text box EditText edit_txt = (EditText) findViewById(R.id.search_edit); edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { submit_btn.performClick(); return true; } return false; } }); 

submit_btn est votre bouton de soumission avec votre gestionnaire onclick attaché.

Vous devez définir les options IME sur votre EditText .

  

Ajoutez ensuite un OnEditorActionListener à la vue pour écouter l’action “done”.

 EditText editText = (EditText) findViewById(R.id.some_view); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_DONE) { // TODO do something handled = true; } return handled; } }); 

Doc officiel de l’API: https://developer.android.com/guide/topics/ui/controls/text.html#ActionEvent

Voilà comment c’est fait

 editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE){ //do something } return false; } }); 

N’oubliez pas d’append

  

actionDone dans votre EditText.

Solution simple et efficace avec Kotlin

Étendre EditText :

 fun EditText.onSubmit(func: () -> Unit) { setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { func() } true } } 

Ensuite, utilisez la nouvelle méthode comme ceci:

 editText.onSubmit { submit() } 

submit() est quelque chose comme ça:

 fun submit() { // call to api } 

Extension plus générique

 fun EditText.on(actionId: Int, func: () -> Unit) { setOnEditorActionListener { _, receivedActionId, _ -> if (actionId == receivedActionId) { func() } true } } 

Et puis vous pouvez l’utiliser pour écouter votre événement:

 email.on(EditorInfo.IME_ACTION_NEXT, { confirm() }) 
   

dans le fichier .java

 EditText userNameField = (EditText) findViewById(R.id.signinscr_userName); EditText passwordField = (EditText) findViewById(R.id.signinscr_password); passwordField.setOnEditorActionListener(new OnEditorActionListener() { public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { //Do your operation here. return false; } }); 
  EditText edit_txt = (EditText) findViewById(R.id.search_edit); edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // which is u had set a imeoption if (actionId == EditorInfo.IME_ACTION_DONE) { submit_btn.performClick(); return true; } return false; } }); 

Dans votre fichier XML à l’intérieur de votre tag edittext, ajoutez l’extrait ci-dessous

 android:imeOptions="actionDone" 

Ensuite, dans votre classe Java, écrivez le code ci-dessous

 editText.setOnEditorActionListener(new EditText.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int id, KeyEvent event) { if (id == EditorInfo.IME_ACTION_DONE) { //do your work here return true; } return false; } }); 

append la ligne suivante dans edittext

 android:imeOptions="actionDone" 

Heureux codage