2012-02-24 15 views
5

W jednej z moich aktywności mam trzy EditText s i przycisk OK. OnFocusChangeListener jest ustawiony na wszystkie trzy EditText s. Słuchacz powinien uruchamiać się za każdym razem, gdy utracono ostrość.OnFocusChange nie zawsze działa

Przełączanie między EditText s działa idealnie. Ale jeśli użytkownik naciśnie przycisk OK, nie zostanie wywołana zmiana ostrości (utrata ostrości) dla użytkownika EditText, gdy użytkownik skupi się przed naciśnięciem przycisku.

Co jest nie tak z moim kodem?

private class MyOnFocusChangeListener implements OnFocusChangeListener { 
    private EditText editText; 

    public MyOnFocusChangeListener(final EditText editText) { 
     super(); 

     this.editText = editText; 
    } 

    @Override 
    public void onFocusChange(final View view, final boolean isFocused) { 
     if (!isFocused) { 
      if (editText == editText1) { 
       // Do a calculation 
      } else if (editText == editText2) { 
       // Do another calculation 
      } else if (editText == editText3) { 
       // Do a different calculation 
      } 
     } 
    } 
} 

@Override 
public void onCreate(final Bundle bundle) { 
    // ... 
    editText1.setOnFocusChangeListener(new MyOnFocusChangeListener(editText1)); 
    editText2.setOnFocusChangeListener(new MyOnFocusChangeListener(editText2)); 
    editText3.setOnFocusChangeListener(new MyOnFocusChangeListener(editText3)); 
    // ... 
} 

Odpowiedz

7

Można spróbować wyczyścić ostrość, gdy użytkownik kliknie na przycisk OK lub inne ....

np

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
{ 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      editText1.clearfocus(); 
      editText2.clearfocus(); 
      editText3.clearfocus(); 
      .... 
    } 
} 
+0

To prawdopodobnie spowoduje włączenie OnFocusChange we wszystkich trzech EditText, więc nie będę mógł go użyć. Pomogło mi to jednak znaleźć lepszy sposób. Przechowuję teraz EditText, który skupia się na członku klasy, a OnClick przycisku Usuwam fokus tego konkretnego EditText. To działa jak urok. Wielkie dzięki. –

1

Brzmi jak można być problemy z trybem dotykowym, z android docs:

„Zależność pomiędzy trybem dotykowym, selekcji i ostrości oznacza, że ​​nie musi polegać na selekcji i/lub skupić istnieć w twojej aplikacji. "

+0

Dzięki za odpowiedź. To naprawdę źle, ponieważ muszę wybrać między dwoma złymi scenariuszami. 1.) Kalibracja ma miejsce tylko wtedy, gdy użytkownik wprowadzi inny EditText przed naciśnięciem przycisku OK (domyślnie nie można ustawić ostrości). 2.) Zmień przycisk, aby umożliwić ustawianie ostrości, aby użytkownik musiał dwukrotnie nacisnąć przycisk. Ta ostatnia działa lepiej niż pierwsza, ponieważ użytkownik może przechowywać nieskalowane wartości w 1.). –

+0

Być może powinieneś nieco przemyśleć projekt swojej aplikacji, co dokładnie zamierza zrobić? Możesz skomplikować swój kod, kiedy przeprojektowanie może pomóc rozwiązać twój problem. Również twój kod ma pewne problemy, nie musisz tworzyć detektora ostrości i przekazywać edittext do konstruktora. Kiedy zostanie wywołana funkcja onFocusChanged, przejdzie ona do widoku, którego fokus został zmieniony, po prostu przesuń parametr widoku do tekstu edycji (najpierw sprawdź typ!). – Theblacknight

+1

Łącze podaje: "Błąd 404 - Plik nie znaleziony". – astuter

Powiązane problemy