我通过扩展ListView
创建了自定义AdapterView
,并且我想处理此视图中的关键事件。我已经覆盖了onKeyDown
,但是从来没有看到过它。我甚至尝试重写dispatchKeyEvent
,也永远不会被调用。我还使用setFocusable(true)
专注于我的视图。
另外,关于哪个视图实际上有重点,我有点困惑。在HierarchyView中,树中的每个视图都表示hasFocus = false。
如何在我的视图中接收关键事件?
答案 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()
。