Android: Bewerten Sie EditText nachdem der Benutzer beendet die Bearbeitung

, Was ich will
Ich habe ein EditText, wo der Benutzer kann einen Wert eingeben, wie 10.40. Sobald der Benutzer mit der Bearbeitung fertig bin ich die Formatierung seiner Eingabe in eine Währung, zum Beispiel dem oben genannten Wert bekommen würde formatiert $10.40 (im Fall von Locale.UNS). Und ich Anzeige das Ergebnis in die gleiche EditText, dass der Benutzer zuvor bearbeitet.

Problem
Denn ich werde-format (D. H. ändern) seinen Eingang, ich muss wissen, wenn er fertig ist (so meine Formatierung nicht interfer mit seiner ständigen input).

, Was ich versucht habe
TextWatcher ist keine option, da es feuert auf jedes einzelne Bearbeiten, damit, wenn der Benutzer eins, null, vier, Punkt-und null (=10.40). Ich bin derzeit mit einem OnFocusChangeListener, die funktioniert wie gewünscht, ABER das problem ist: ich habe Schaltflächen in meiner Anwendung, und wenn der Benutzer klickt auf eine Schaltfläche, nach der Bearbeitung der die EditText EditText nicht den Fokus verlieren, daher mein code zur Formatierung nie genannt ...

Danach habe ich versucht Herumspielen mit der Schaltfläche den Fokus, wenn er auf FocusableInTouchMode - die Ergebnisse bei der Taste mit gedrückt werden, zweimal, um zu feuern (das ist ein no go), da es den Fokus erhält das erste mal bekommen und aktiviert das zweite mal. Nach so viel daran herum zu hacken, ich Frage mich, ob jemand hat eine Idee, wie man dieses dilemma lösen.

Code

Füge ich die folgenden OnFocusChangeListener zu meinem EditText, deren Funktion die ich oben beschrieben habe. Der EditText ist gekapselt innerhalb einer CurrencyTextbox (das ist nicht wirklich relevant):

@Override
protected OnFocusChangeListener getOnFocusChangeListener() {
    return new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                //Member variable in the class which contains an EditText
                CurrencyTextbox.this.hadFocus = true;
            } else {
                //Thes EditText has lost focus
                Log.v(TAG, "Lost focus.");
                if (CurrencyTextbox.this.hadFocus) {
                    //We previously had focus, now we lost it, format the user input!
                    //Get current value of the Textbox
                    String value = CurrencyTextbox.this.textbox.getText().toString();
                    //Formatting the user input
                    value = String.format(//Doing some formatting);
                    //Reset the had focus
                    CurrencyTextbox.this.hadFocus = false;
                }
            }
        }
    };
}

Das problem ist jedoch, die oben OnFocusChangelistener bekommen nur genannt, wenn meine EditText den Fokus verliert, aber es hat NICHT den Fokus verlieren, wenn ich auf einen button zu klicken in meiner Tätigkeit, und wie oben erwähnt, ist es nicht möglich, legen Sie die Schaltfläche isFocusableInTouchMode zu wahren, wie es muss dann angeklickt werden, zweimal, jedes mal um das Feuer.

  • Zeigt den relevanten code hilft immer.
  • Nicht sicher, es würde - die Frage ist wirklich sehr allgemein, und ich weiß, dass es ein Allgemeines Problem (und ich gehe davon aus, dass eine Allgemeine Antwort/Ansatz Bezeichnung, nicht um eine ausführliche code-snippet). Ich kann nach einigen code, aber ich fürchte, es kann nicht helfen, viel mehr zu verstehen das beschriebene Problem.
  • Außerdem: ich habe nicht fehlerhaften code, ist es wirklich nicht ein code-problem. Es ist nur so, dass, wenn Sie auf Android Sie auf eine Schaltfläche klicken, die Schaltfläche nicht zu gewinnen ist, konzentrieren (einfach so), daher ist jede andere widget, das zuvor den Fokus hatte, wird nicht verlieren, dass der Fokus (wie der button nicht zu gewinnen ist, konzentrieren).
InformationsquelleAutor AgentKnopf | 2011-12-29
Schreibe einen Kommentar