2011-10-14 59 views
1

我有PopupWindow android默認小部件的麻煩。 當我觸摸按鈕顯示在手機上彈出,比按後退按鈕,顯示出彈出之前,我必須強制關閉的消息,錯誤的是未來:PopupWindow調度事件崩潰



    10-14 16:51:53.389: ERROR/AndroidRuntime(3766): FATAL EXCEPTION: main 
      java.lang.NullPointerException 
      at android.widget.PopupWindow$PopupViewContainer.dispatchKeyEvent(PopupWindow.java:1342) 
      at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471) 
      at android.view.ViewRoot.deliverKeyEvent(ViewRoot.java:2431) 
      at android.view.ViewRoot.handleMessage(ViewRoot.java:1741) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:123) 
      at android.app.ActivityThread.main(ActivityThread.java:4627) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:521) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
      at dalvik.system.NativeStart.main(Native Method) 

所以,有些測試中,我看到後,這個bug爲再現於Android 2.3 <版本爲2.1(2.2) 也是我很深挖在grepcode來源,有方法:



     @Override 
     public boolean dispatchKeyEvent(KeyEvent event) { 
      if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN 
         && event.getRepeatCount() == 0) { 
        getKeyDispatcherState().startTracking(event, this); 
        return true; 
       } else if (event.getAction() == KeyEvent.ACTION_UP 
         && getKeyDispatcherState().isTracking(event) && !event.isCanceled()) { 
        dismiss(); 
        return true; 
       } 
       return super.dispatchKeyEvent(event); 
      } else { 
       return super.dispatchKeyEvent(event); 
      } 
     } 

    ... 

     public KeyEvent.DispatcherState getKeyDispatcherState() { 
      return mAttachInfo != null ? mAttachInfo.mKeyDispatchState : null; 
     } 

和方法getKeyDispatcherState()返回NULL

是否有一個解決了這個問題?

+0

你有沒有設法找到一個解決的辦法? – kuchi

回答

1

這個問題的焦點是你在Popupwindow顯示之前關注它,所以在你的活動之前dispatchevent會收到後退鍵,但是現在你的Popupwindow沒有顯示出來。你可以測試不關注Popupwindow,你會理解我的意思。

+0

我有同樣的問題,我不知道誰會給焦點彈出窗口。正如在原來的海報堆棧跟蹤中,只有涉及的Android類。我們甚至沒有明確地顯示popupwindow(但是我們確實使用只在默認情況下顯示的上下文菜單)。任何幫助,將不勝感激。 – RaB