我通过扩展ListView创建了一个自定义AdapterView,我想处理此View内部的关键事件。我已覆盖onKeyDown,但从未看到它被调用。我什至尝试覆盖dispatchKeyEvent,但从未被调用。我还通过setFocusable(true)使View成为焦点。

另外,对于实际关注的观点,我有些困惑。在HierarchyView中,树中的每个视图都说hasFocus = false。

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

最佳答案

看来我可以在这里回答我自己的问题。

看一下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或其
因此,要解决此问题,只需在setFocusable(true)实现的末尾添加setAdapter()

关于android - 自定义AdapterView-未调用onKeyDown,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15532404/

10-09 06:11