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).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich einige der Forschung, und unter anderem fand ich diese thread. Es baut auf ein ähnliches Problem, dass du (der button nicht gewinnt focus). Versuchen Sie Folgendes: Auf deine Tasten legen setFocusable(true) (NICHT setFocusableInTouchMode! Wie diese Ausgeburten der schikanöses Verhalten Sie sich anders in Ihrer OP), legen Sie dann die folgenden OnClickListener auf Ihre Tasten:
Aber Sie sollten wohl einfach nur fix die Sachen konzentrieren, die für buttons, wird das aktuelle Verhalten wirklich dazu führen, dass einige Fragen (wie deine).
Versuchen mit beiden
View.setFocusableInTouchMode()
undView.requestFocus()
. Sie können dieonKeyListener()
- Schnittstelle zur Erkennung von Benutzereingaben und startet einen timer nach jedemonKey
Fall, starten Sie Ihren Bearbeiten nach angemessener Verzögerung.was ist das problem ur immer? müssen
setOnFocusChangeListener
mit ureditfield
. prüfen Sie es einfach. und überschreiben die onFocusChange.plz check für die...
hiergeben Sie den link-Beschreibung hier
Ja, es ist definitiv ein Problem mit der edit-text nicht zu verlieren, die einmal den Fokus erhält. Nach ein bisschen googeln fand ich, dass seine mögliche, um das gewünschte Ergebnis erzielen, indem Sie nur workaround.
Ich hatte eine ähnliche Anforderung, und ich machte eine Problemumgehung zum ausführen der obigen Aufgabe, und es funktioniert großartig für mich.
Die Abhilfe ist wie folgt:
Legen Sie die onClickListener für die editText und in das onClick-Ereignis festlegen ein flag zu sagen, das editText geklickt wurde.
Legen Sie die onKeyListener für die editText und erhalten den aktuellen Wert des editText in der onKey-event.
Nun, sagen Sie geklickt haben, Getan /Zurück-Taste in Ihrer Aktivität/dialog. Hier können Sie die flags, bekam, wenn die editText geklickt wurde. Also, wenn Ihr wahre macht keine Prozeduraufrufe, die Sie wollen.
Jetzt für die zurück/fertig-Taste setzen Sie den onClickListener und überprüfen Sie, ob das flag gesetzt wurde oder nicht