2013-03-02 2 views
18

Cancelling Dies ist die Warnung Ich erhalte:Warnung, wenn ActionBar Überlauf-Menü auf Android 4.1.x

03-02 14:38:43.980: W/InputEventReceiver(3961): Attempted to finish an input event but the input event receiver has already been disposed.

Das Menü Ich habe von einer regulären res/menu/activity_menu.xml Datei generiert wurde. Ich handle die Ereignisse genau wie auf http://developer.android.com/guide/topics/ui/menus.html#options-menu

Wenn ich auf die vertikalen drei Punkte klicken, um das Überlaufmenü zu öffnen und abzubrechen, bekomme ich diese Warnung. Es scheint wenig Wissen darüber zu geben, wie man seinen Auslöser fängt. Irgendwelche Ideen?

+0

Es ist eine Warnung, und es ist nicht Teil Ihrer App. Sieht in Android selbst wie ein Problem aus. Sie sollten in der Lage sein, es sicher zu ignorieren –

+0

verwenden Sie ActionBar Sherlock? –

+0

@JustinV. Ich benutze Android für diesen Zweck. – alexismorin

Antwort

14

Dies steht nicht mit Ihrer Arbeit in Verbindung.

Überlaufmenü wird von PopupWindow implementiert. Wenn Benutzer das Ereignis "PopupWindow, ACTION_DOWN" berührt, wird es in die Nachrichtenwarteschlange der App eingereiht. Dann wird es an View über die ViewPostImeInputStage-Klasse übergeben und schließlich sendet ViewPostImeInputStage dieses Eingabeereignis an den onTouchEvent-Listener von PopupWindow.

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     final int x = (int) event.getX(); 
     final int y = (int) event.getY(); 

     if ((event.getAction() == MotionEvent.ACTION_DOWN) 
       && ((x < 0) || (x >= getWidth()) || (y < 0) || (y >= getHeight()))) { 
      dismiss(); 
      return true; 
     } else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { 
      dismiss(); 
      return true; 
     } else { 
      return super.onTouchEvent(event); 
     } 
    } 

dissmiss() versuchen PopupWindow und PopupWindow schließen :: onDetachedWindow WindowInputEventReceiver rufen :: entsorgen() aus.

Und dann ViewPostImeInputStage Aufruf WindowInputEventReceiver :: finishInputEvent dieses ACTION_DOWN Ereignis zu beenden. Die WindowInputEventReceiver-Instanz ist jedoch bereits entsorgt, sodass Warnmeldungen ausgegeben werden.

Sie können es nach Haltepunkt debuggen. Öffne InputEventReceiver.java (benötige android Quellcode bei Framework/base /) und setze den Haltepunkt bei der dispose Methode.

+0

Danke für das Teilen! Aber wie kann man diese Warnung loswerden? Ich verstehe das Hauptproblem nicht ganz? In Marshmallow, sobald das PopupMenu abgewiesen wurde, wird die Tastatur automatisch ausgeblendet und das Menü und die Tastatur verloren, da ich mit PopupMenu eigene IME erstellt habe. Können Sie bitte helfen? – Mohammad