自定义AdapterView - 未调用onKeyDown

时间:2013-03-20 18:58:59

标签: android

我通过扩展ListView创建了自定义AdapterView,并且我想处理此视图中的关键事件。我已经覆盖了onKeyDown,但是从来没有看到过它。我甚至尝试重写dispatchKeyEvent,也永远不会被调用。我还使用setFocusable(true)专注于我的视图。

另外,关于哪个视图实际上有重点,我有点困惑。在HierarchyView中,树中的每个视图都表示hasFocus = false。

如何在我的视图中接收关键事件?

1 个答案:

答案 0 :(得分: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可以看出,如果尚未从适配器绑定数据(意味着适配器为null或其为< = 0),则View将无法聚焦。

因此,要解决此问题,只需在setFocusable(true)实施结束时添加setAdapter()