2016-06-01 2 views
2

Je souhaite donc que l'utilisateur puisse modifier la valeur d'un EditText et mettre à jour une valeur correspondante dans la base de données. Jusqu'à présent, j'ai examiné diverses techniques, mais elles ont toutes des problèmes.Mettre à jour la valeur dans la base de données après avoir terminé avec EditText?

  1. TextWatchers semblent fonctionner, mais comme ils se déclenchent à chaque numéro/lettre presse, qui semble comme beaucoup d'appels inutiles à la base de données.

  2. Les déclencheurs de focus, mais beaucoup de messages que j'ai trouvés sont vieux et peut-être obsolètes, et je ne sais pas s'ils fonctionneront sur tous les appareils.

Quel est le correctif le plus récent/à jour pour ce problème? Comment est-ce que je peux détecter universellement quand un EditText a perdu le foyer et peut déclencher sans risque l'appel de base de données?

Répondre

0

Essayez comme ça

editext.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View view, boolean focus) { 
if(focus==false) 
{ 
    //do database operation 
} 
     } 
    }); 
0
  1. Vous pouvez compter sur l'utilisateur en appuyant sur « Terminé »:

    editText.setOnEditorActionListener(
        new EditText.OnEditorActionListener() 
        { 
         @Override 
         public boolean onEditorAction(TextView view, int actionId, KeyEvent event) 
         { 
          // you may also use IME_ACTION_SEARCH or 
          // event.getKeyCode() == KeyEvent.KEYCODE_ENTER 
          if (actionId == EditorInfo.IME_ACTION_DONE) 
          { 
           // update database 
    
           // consume event 
           return true; 
          } 
    
          // don't consume event 
          return false; 
         } 
        } 
    ); 
    
  2. Vous pourriez utiliser l'approche TextWatcher mais en combinaison avec une minuterie qui pousse une mise à jour de la base de données chaque - disons - 2 secondes après le dernier changement. Il vous suffit donc de démarrer le minuteur lors de la première modification et de le réinitialiser à chaque fois.

Je l'ai rencontré ce problème moi-même il y a quelque temps, mais malheureusement je ne pouvais pas comprendre toute autre solution que celles ci-dessus ou l'approche avec le focusListener.