2013-06-20 15 views
13

Buduję aplikację na Androida. Mam EditText. Chcę zapisać zmiany (lub cokolwiek innego) automatycznie po zmianie przez użytkownika tekstu. Teraz używamAndroid - Zrób coś * po * tekst zmienia się w EditText

editText.addTextChangedListener(textWatcher); 

i

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

Ale to zapisuje zmiany po każdej małej zmianie (dodać \ usuwanie litery), a ja chcę, że to będzie zapisane tylko po użytkownika końcowego (zamknął klawiaturę, kliknął inny editekst, itd.). Jak mogę to zrobić?

+2

Co powiesz na lostFocus? –

Odpowiedz

15

Implementacja onFocusChange z setOnFocusChangeListener i istnieje parametr boolowski dla hasFocus. Kiedy jest to fałsz, straciłeś ostrość do innej kontrolki i powinieneś zapisać dane editext. na przykład

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

editText.setOnFocusChangeListener(new OnFocusChangeListener() {   

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

     } 
    }); 

Wdrożenie setOnFocusChangeListener dla wszystkich EditTexts i powinien obsługiwać Back Press zdarzenie zbyt. Jeśli użytkownik zmieni dane editekstu i nie przejdzie do innego EditText i zostanie naciśnięty, edytowana vallue nie zostanie zapisana. Więc powinien użyć onKeyDown lub onBackPressed zbyt

+0

Wygląda dobrze, ale czy mogę sprawdzić, czy tekst został zmieniony? czy mogę połączyć TextWatcher i FocusChangeListener? – TamarG

+0

Tak, możesz połączyć oba. I zmniejszyć liczbę akcji zapisywania danych. –

+0

Czy możesz mi pokazać, jak? Umieścić editText.addTextChangedListener w onFocusChange? wstaw editText.setOnFocusChangeListener w afterTextChanged? – TamarG