setOnEditorActionListener(new DoneOnEditorActionListener()); wird nicht ausgeführt

  • Antworten:11
  • OffenNicht stickyNicht beantwortet
Gelöschter Account
  • Forum-Beiträge: 28

26.04.2018, 17:04:49 via Website

Guten tag!
Ich habe ein Textfeld, bei dem ich die Tastatur ausblenden möchte, wenn die Enter-Taste gedrückt wird.
Ich habe dafür folgenden Code eingegeben:
Durch den fehlenden LOG-Eintarg, sehe ich, dass diese Funktion nie ausgeführt wird.
Was mache ich denn falsch?
Danke im Voraus für Eure Hilfe
etCmd ist das EditText-feld:

 etCmd.setOnEditorActionListener(new DoneOnEditorActionListener());

und die Funktion daztu:

 class DoneOnEditorActionListener implements EditText.OnEditorActionListener {
  @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
   Log.e(TAG, "*****INFO: DoneOnEditorActionListener\n");
   if (actionId == EditorInfo.IME_ACTION_DONE) {
       InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
     return true;
     }
    return false;
            }
    }

Antworten
Gelöschter Account
  • Forum-Beiträge: 257

27.04.2018, 07:03:02 via Website

Hallo, hast du in deiner XML-Datei die InputMethod gesetzt? :)

Mit der Menge an Code, die du zur Verfügung gestellt hast, lässt sich leider nicht so wirklich gezielt sagen, warum es nicht aufgerufen wird. Das kann zig Gründe haben. ;)

swa00

Antworten
Gelöschter Account
  • Forum-Beiträge: 28

27.04.2018, 10:17:07 via Website

Doch ich denke schon, habe android:imeOptions="actionDone" in dem EditText in der XML eingetragen.
Damit will ich eigentlich nur die Tastatur verschwinden lassen, wenn man drückt. Aber wenn ich debugge, sehe ich nicht, dass es aufgerufen wird.

1) in der xml eintragen
2) EditorActionListener mit dem EditText verfinden
3) Klasse auf der Basis von " EditText.OnEditorActionListener" implementieren
Fehlt etwas?
Das EditTextfeld dazu sieht so aus:

            <EditText
            android:id="@+id/tvCmd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:digits=" 0123456789ABCDEF"
            android:gravity="center_horizontal|center_vertical"
            android:hint="hexadecimal"
            android:imeOptions="actionDone"
            android:inputType="textCapCharacters"
            android:text="@string/hex" />

— geändert am 27.04.2018, 10:20:15

Antworten
  • Forum-Beiträge: 2.902

27.04.2018, 10:24:56 via Website

Und was spricht gegen einen völlig trivialen KeyEventListener auf den EditView ?

und bei Chr 13

 InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

— geändert am 27.04.2018, 10:28:08

Liebe Grüße - Stefan
[ App - Entwicklung ]

Pascal P.

Antworten
Gelöschter Account
  • Forum-Beiträge: 28

27.04.2018, 11:28:00 via Website

Ich habe es auch probiert, aber es reagiert auch nicht.
Ich dachte, dass es daran liegt, dass ich auch einen Textwatcher eingesetzt habe, der den Tastendruck auffängt (den habe ich implementiert, um nur hexadezimale Zeichen anzunehmen)
Aber auch wenn ich ihn auskommentiere, bewirkt die Taste nichts. Die anderen Tasten, die darstellbar sind, sehe ich.

Antworten
  • Forum-Beiträge: 2.902

27.04.2018, 11:29:56 via Website

Ich habe es auch probiert, aber es reagiert auch nicht.

Dann hast du definitv etwas falsch umgesetzt .
Dieser Listener / Override ist ein Basis element.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 28

27.04.2018, 11:33:51 via Website

Ja, aber, was könnte es sein? So sieht es zur zeit aus:

 etCmd = (EditText) findViewById(R.id.tvCmd);
  etCmd.setOnEditorActionListener(new DoneOnEditorActionListener());
  etCmd.addTextChangedListener(new HexadecimalEingabe(etCmd) );
  etCmd.setOnKeyListener(new View.OnKeyListener() {            @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
              Log.e(TAG, "*****INFO: setOnKeyListener KEYCODE ");
              if (keyCode == KeyEvent.KEYCODE_ENTER) {
                Log.e(TAG, "*****INFO: KEYCODE_ENTER");
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);                 }
        return true;
        }
    });

Antworten
  • Forum-Beiträge: 2.902

27.04.2018, 11:47:08 via Website

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Mein source lautet oben aber schon ein wenig anders ........
Du baust mit deiner Variante keine Verbindung zum Service auf

Tipp :
a) Führe das Hidden mal ein ganz klein wenig verzögert in einem AsynTask aus.
b) klammere mal deinen ActionListener aus
c) und klaue dem EditView den Focus

— geändert am 27.04.2018, 12:10:21

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 28

27.04.2018, 12:45:50 via Website

Das habe ich jetzt gemacht, (ActionListener auskommentieren und EditText dem Fokus geklaut) bis auf das Verzögern, weil ich dann wenigstens den LOG-Eintrag sehen würde, oder? aber der erscheint nicht im LOG.

ich lese Folgendes in https://developer.android.com/reference/android/view/View.OnKeyListener:
Kann es sein, dass es der Grund ist, dass der KeyListener nicht ausführt?

Key presses in software keyboards will generally NOT trigger this method, although some may elect to do so in some situations. Do not assume a software input method has to be key-based; even if it is, it may use key presses in a different way than you expect, so there is no way to reliably catch soft input key presses

Antworten
  • Forum-Beiträge: 2.902

27.04.2018, 12:53:20 via Website

Na ja , du solltest auch erst ganz zum Schluss den Focus klauen , nach der Zeitverzögerung.
Deshalb stand der bei mir unter punkt c :-)

Moment : Du willst damit sagen , dass du nicht einmal einen OnKey Event bekommst ?

Nimm mal bitte einen Standart EditView , ohne Filrefanz, setze den Lister drauf und schau ob der kommt
Und lass die Logs weg, debugge lieber

— geändert am 27.04.2018, 12:55:11

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Gelöschter Account
  • Forum-Beiträge: 28

27.04.2018, 13:31:01 via Website

Mit einem neuen EditText funktioniert es plötzlich.
Ich mache die Activity neu, vielleicht habe ich irgendwo etwas Falsches.
Vielen Dank und schönes Wochenende!

— geändert am 27.04.2018, 13:38:59

swa00

Antworten
Gelöschter Account
  • Forum-Beiträge: 28

02.05.2018, 10:53:58 via Website

Falls jemand anderer das gleiche Problem hat: Im Endeffekt hat es mit dem

  etCmd.setOnEditorActionListener(new DoneOnEditorActionListener());

funktioniert, sobald ich in der XML

android:singleLine = "true"

eingegeben hat.
Vielen Dank für die Hilfe, komme jetzt weiter.

Antworten

Empfohlene Artikel