Null keyevent und actionid = 0 in onEditorAction () (Jelly Bean / Nexus 7)

Ich habe einen Bearbeitungstext, der als Suchfeld in meiner Anwendung fungiert. In Jelly Bean auf meinem Nexus 7, wenn ich etwas in das Textfeld eingeben, das ich höre und schlage die Eingabe von keyEvent = null und ActionId = 0 in die onEditorAction () Methode übergeben. Hat jemand anderes begegnet? Ich denke, es könnte ein Fehler sein.

In der zweiten if-Anweisung unten bekomme ich einen Null-Pointer, weil die actionId = 0 und KeyEvent = null;

  • Methode, um alle EditTexts in einer Ansicht zu erhalten
  • Cordova Manifest Fusion gescheitert
  • Der Keystore konnte nicht in AndroidStudio geöffnet werden - "Redundante Länge Bytes gefunden"
  • Wie bekomme ich einen Hörer für eine Schaltfläche für die Datumspickers in Android?
  • Fehlerverbindung abgelehnt
  • Taille DrawerLayout mit nur Titel (kein App Icon)?
  • // Search field logic. @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.d(TAG, "onEditorAction"); if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) return false; if (actionId == EditorInfo.IME_ACTION_SEARCH || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { .....Do some stuff(); } } 

  • VerrifyError mit Guice auf Android maven Projekt
  • Java.lang.IllegalStateException: Das angegebene Kind hat bereits ein Elternteil. Sie müssen removeView () auf dem Elternteil des Kindes aufrufen
  • Gridview-Show nach der tatsächlichen Höhe innerhalb der Scroll-Ansicht
  • Soll ich meine Log-Anrufe bei der Erstellung meines letzten Pakets kommentieren?
  • Warum ist FusedLocationApi.getLastLocation null
  • Aktualisierungsbalken in der Benachrichtigungsleiste aktualisieren
  • 4 Solutions collect form web for “Null keyevent und actionid = 0 in onEditorAction () (Jelly Bean / Nexus 7)”

    Beendet bis Hinzufügen in einem Null-Check für KeyEvent. Dank Commonsware für den Hinweis auf dies geschieht auf 3.0+. Scheint mehr wie ein Workaround dann eine Lösung, aber es funktioniert.

     // Search field logic. @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.d(TAG, "onEditorAction"); if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) { return false; } else if (actionId == EditorInfo.IME_ACTION_SEARCH || event == null || event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { .....Do some stuff(); } } 

    Neben KeyEvent.ACTION_UP wir auch KeyEvent.ACTION_DOWN erfassen. Es KeyEvent.ACTION_UP denn, KeyEvent.ACTION_UP wird nie an EditText damit unsere onEditorAction nicht funktioniert. Beispiel:

     @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { final boolean isEnterEvent = event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER; final boolean isEnterUpEvent = isEnterEvent && event.getAction() == KeyEvent.ACTION_UP; final boolean isEnterDownEvent = isEnterEvent && event.getAction() == KeyEvent.ACTION_DOWN; if (actionId == EditorInfo.IME_ACTION_DONE || isEnterUpEvent ) { // Do your action here performLogin(); return true; } else if (isEnterDownEvent) { // Capture this event to receive ACTION_UP return true; } else { // We do not care on other actions return false; } } 

    Sie müssen EditorInfo.IME_ACTION_DONE ersetzen, um die Version von EditorInfo.IME_ACTION_ nach android:imeOptions="actionNext" zu korrigieren android:imeOptions="actionNext"

    Ich fand, dass mein "Bug-like Verhalten" auf imeActionLabel komplizierte Dinge war. Ich habe es nur verwendet, weil es im Text Fields Guide als eine Möglichkeit, eine benutzerdefinierte Return Key Label wurde erwähnt wurde. Hier sind die Ergebnisse meiner Tests in Lollipop,

    Fall 1: Voreinstellung, Rückkehrschlüsselsymbol = Schließwinkelwinkel

     <EditText android:singleLine="true" android:inputType="textUri"/> 

    OnEditorAction wird einmal aufgerufen.

    • KeyEvent = null, actionId = 5 = EditorInfo.IME_ACTION_NEXT
      • Wenn return true, Cursor bleibt in EditText, Tastatur geöffnet
      • Wenn die Rückkehr falsch ist, bewegt sich der Cursor zur nächsten fokussierbaren, die Tastatur wird bei Bedarf geöffnet

    Fall 2: imeOptions , Rückgabeschild Symbol = Häkchen

     <EditText android:singleLine="true" android:inputType="textUri" android:imeOptions="actionDone"/> 

    OnEditorAction wird einmal aufgerufen.

    • KeyEvent = null, actionId = 6 = EditorInfo.IME_ACTION_DONE
      • Wenn return true, Cursor bleibt in EditText, Tastatur geöffnet
      • Wenn return false, Cursor bleibt in EditText, Tastatur schließt

    Fall 3: imeActionLabel , Rücktaste Symbol = "URdone"

     <EditText android:singleLine="true" android:inputType="textUri" android:imeOptions="actionDone" android:imeActionLabel="URdone"/> 

    OnEditorAction kann mehrmals aufgerufen werden.

    • KeyEvent = null, actionId = 0

      • Wenn return true, Cursor bleibt in EditText, Tastatur öffnen , onEditorAction wird nicht ein zweites Mal aufgerufen
      • Wenn die Rückkehr falsch ist, wird onEditorAction eine ZWEITE Zeit genannt:
    • KeyEvent = KeyEvent.ACTION_DOWN , actionId = 0

      • Wenn die Rückkehr falsch ist, bewegt sich der Cursor zur nächsten fokussierbaren, die Tastatur wird bei Bedarf geöffnet . OnEditorAction wird nicht zum dritten Mal aufgerufen
      • Wenn return true ist, wird onEditorAction eine DRITTE Zeit genannt:
    • KeyEvent = KeyEvent.ACTION_UP , actionId = 0

      • Wenn return true, Cursor bleibt in EditText, Tastatur geöffnet
      • Wenn die Rückkehr falsch ist, bewegt sich der Cursor zur nächsten fokussierbaren, die Tastatur wird bei Bedarf geöffnet

    NOTIZEN:

    Ich bin mir nicht sicher, ob actionId = 0 von EditorInfo.IME_ACTION_UNSPECIFIED oder EditorInfo.IME_NULL .

    Wenn das nächste fokussierbare nicht editierbar ist, wird das Rückkehrschlüsselsymbol zu einem Pfeil nach links.

    Sie können auch setOnFocusChangeListener verwenden, um setOnFocusChangeListener zu überschreiben, die nach dem obigen setOnFocusChangeListener onFocusChange wird.

    Es könnte erwähnenswert sein, dass man mehr als ein Event für den Klick auf Enter (abhängig von der Android-Version) bekommen kann. Einer für die KeyDown (KeyEvent.ACTION_DOWN), eine für die KeyUp (KeyEvent.ACTION_UP). Als ich vergaß zu überprüfen, dass ich versehentlich begonnen zwei Server-Anrufe für die gleiche Aktion.

     searchBox.setOnEditorActionListener(new OnEditorActionListener() { // enter key in search box triggers search @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ((event != null && event.getAction() == KeyEvent.ACTION_UP) || event==null) { onSearchButtonClicked(); } return true; } }); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.