2013-03-20 72 views
1

我創建了一個自定義ListView擴展AdapterView,我想處理這個視圖內的關鍵事件。我已覆蓋onKeyDown,但永遠不會看到它叫。我甚至嘗試覆蓋dispatchKeyEvent,並且永遠不會被調用。我也讓我的視圖可以用setFocusable(true)進行關注。自定義AdapterView - onKeyDown不叫

另外,對於哪個視圖實際上有重點,我有點困惑。在HierarchyView中,樹中的每個視圖都顯示hasFocus = false。

如何在我的視圖中接收關鍵事件?

+0

你想處理軟鍵盤事件?看到我的答案在http://stackoverflow.com/questions/15476079/onkeydown-is-not-invoked-while-using-soft-keypads/15485248#15485248 – 2013-03-20 19:01:08

+0

@HoanNguyen沒有。硬鍵事件。 – LuxuryMode 2013-03-20 19:21:51

回答

1

看起來我可以在這裏回答我自己的問題。

考慮看看AdapterView,你可以看到,它覆蓋setFocusable與下面的實現:

@Override 
    public void setFocusable(boolean focusable) { 
     final T adapter = getAdapter(); 
     final boolean empty = adapter == null || adapter.getCount() == 0; 

     mDesiredFocusableState = focusable; 
     if (!focusable) { 
      mDesiredFocusableInTouchModeState = false; 
     } 

     super.setFocusable(focusable && (!empty || isInFilterMode())); 
    } 

你可以從最後調用看到super.setFocusable那裏,查看將不可聚焦,如果沒有來自適配器的數據綁定(意味着適配器爲空或其爲< = 0)。

所以要解決這個問題,只需在setAdapter()實施的末尾添加setFocusable(true)即可。

+0

我有與ListView爲空時不會調用onKey相同的問題。它只有在我將setFocusable()和setFocusableInTouchMode()都設置爲true時才起作用,但是如果沒有先閱讀你的答案,我將永遠無法解決它。 +1起! – Adamantium 2013-04-17 16:27:29