Wert aus EditText auslesen

  • Antworten:3
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 146

10.07.2019, 16:55:25 via Website

Hallo zusammen

Wenn ich die View EditText verlasse, dann soll eine Berechnung ausgelöst werden. Dies mache ich auf folgendem Weg:

        edt_100fr = (EditText) findViewById(R.id.edt_hundert);
    edt_100fr_betrag = (EditText) findViewById(R.id.edt_hundert_betrag);

    edt_100fr.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            Float f_res = null;
            Integer n_zahl;

            String str_text = edt_100fr_betrag.getText().toString();
            if( str_text.length() > 0 ) {
                n_zahl = Integer.parseInt(str_text);
                f_res = Float.valueOf(n_zahl * 100);
                edt_100fr.setText(Float.toHexString(f_res));
            }
        }
    });
}

Wenn ich die app Debugge dann sehe ich, dass der String meist lehr ist ob wohl eine Zahl im Feld drin steht.
Was muss ich machen damit es in jedem Fall funktioniert.

Gruss Renato

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 777

10.07.2019, 21:02:26 via Website

Hallo ich nochmal.
Mit dem onFocusChange(View v, boolean hasFocus)
Könntest du maximal mit Hilfe der hasFocus Variablen prüfen ob die false ist also ob deine View den Focus verloren hat. Der listner wird beim Focus bekommen und beim Focus verlassen aufgerufen.
In der v Variablen hast du die View von der Aufruf kommt in deinem Fall der edittext.

Um das sicher und stabil hin zubekommen würde ich auch eine flag variable empfehlen die du beim ersten Aufruf setzt, (also wenn hasFocus true ist) wenn die View den Fokus bekommt, und wenn ihr der Fokus entzogen wird und dein flag gesetzt ist machst du deine weiteren Sachen. Versesse aber nicht dein flag zu löschen.

Diese Methode garantiert dir aber nicht das auch ein sinnvoller Inhalt in dem edittext ist.
Es wird nur der Focus ausgewertet nicht der Inhalt.

— geändert am 10.07.2019, 21:12:42

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 777

10.07.2019, 17:46:33 via Website

Hallo mit dem OnFocusChangeListener wird das nicht gehen der Prüft nur ob deine View den Focus hat aber nicht wie der Inhalt ist. Bzw ob er sich geändert hat.
Dazu würde ich den „Textwatcher“ empfehlen. Und dort auf Enter Prüfen.

https://developer.android.com/reference/android/text/TextWatcher

https://www.javatpoint.com/android-edittext-with-textwatcher

— geändert am 10.07.2019, 19:05:01

Hilfreich?
Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 777

10.07.2019, 21:02:26 via Website

Hallo ich nochmal.
Mit dem onFocusChange(View v, boolean hasFocus)
Könntest du maximal mit Hilfe der hasFocus Variablen prüfen ob die false ist also ob deine View den Focus verloren hat. Der listner wird beim Focus bekommen und beim Focus verlassen aufgerufen.
In der v Variablen hast du die View von der Aufruf kommt in deinem Fall der edittext.

Um das sicher und stabil hin zubekommen würde ich auch eine flag variable empfehlen die du beim ersten Aufruf setzt, (also wenn hasFocus true ist) wenn die View den Fokus bekommt, und wenn ihr der Fokus entzogen wird und dein flag gesetzt ist machst du deine weiteren Sachen. Versesse aber nicht dein flag zu löschen.

Diese Methode garantiert dir aber nicht das auch ein sinnvoller Inhalt in dem edittext ist.
Es wird nur der Focus ausgewertet nicht der Inhalt.

— geändert am 10.07.2019, 21:12:42

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 146

11.07.2019, 12:22:50 via Website

Ciao Jokel

Danke für den Hinweis. Genau so geht es. Wenn ich die View verlasse wird die Berechnung durchgeführt.

 edt_100fr.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus && v == edt_100fr) {
                Float f_res = null;
                Integer n_zahl = null;

                String str_text = edt_100fr.getText().toString();
                if (str_text.length() > 0) {
                    n_zahl = Integer.parseInt(str_text);
                    f_res = Float.valueOf(n_zahl * 100);
                    edt_100fr_betrag.setText(Float.toString(f_res));
                }
            }
        }
    });

Nur habe ich noch einen zusätzlichen Fehler eingebaut. Ich prüfte die eine View, lese den Wert aus der anderen. Darum war der String immer lehr. Tja so ist das leben.

Gruss Renato

Hilfreich?
Diskutiere mit!