2013-06-20 3 views
13

Ich baue eine Android-Anwendung. Ich habe einen EditText. Ich möchte Änderungen (oder irgendetwas anderes) automatisch speichern, nachdem der Benutzer den Text geändert hat. Jetzt benutze ichAndroid - Etwas tun * nachdem * Text in EditText geändert wurde

editText.addTextChangedListener(textWatcher); 

und

TextWatcher textWatcher = new TextWatcher() { 
    public void afterTextChanged(Editable s) { 
    ... 
    } 

Aber es speichert die Änderungen nach jeder kleinen Änderung (add \ einen Brief entfernen), und ich möchte, dass sie erst nach dem Benutzer gespeichert werden werden fertig (schloss die Tastatur, klickte auf einen anderen Edittext etc.). Wie kann ich das tun?

+2

Wie wäre es mit lostFocus? –

Antwort

15

Implementieren Sie onFocusChange von setOnFocusChangeListener und es gibt einen booleschen Parameter für hasFocus. Wenn dies falsch ist, haben Sie den Fokus auf ein anderes Steuerelement verloren und sollten die Daten von editext speichern. zum Beispiel

EditText editText= (EditText) findViewById(R.id.editText); 

editText.setOnFocusChangeListener(new OnFocusChangeListener() {   

     public void onFocusChange(View v, boolean hasFocus) { 
      if(!hasFocus) { 
       //SAVE THE DATA 
      } 

     } 
    }); 

Implement setOnFocusChangeListener für alle EditTexts und Sie sollten auch Back Press Ereignis behandeln. Wenn der Benutzer die Daten von edittext ändert und nicht zu einem anderen EditText kommt und zurück gedrückt wird, dann wird redigierter Wert nicht gespeichert. Also sollte onKeyDown oder onBackPressed auch

+0

Sieht gut aus, aber kann ich überprüfen, ob der Text geändert wurde? kann ich TextWatcher und FocusChangeListener kombinieren? – TamarG

+0

Ja, Sie können beides kombinieren. Und reduzieren Sie die Anzahl der Daten speichern Aktion. –

+0

Können Sie mir zeigen, wie? Setzen Sie editText.addTextChangedListener in onFocusChange? Put editText.setOnFocusChangeListener in afterTextChanged? – TamarG