我通过扩展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/