2013-03-20 2 views
1

을 확장하여 사용자 정의 ListView을 작성했으며이보기의 주요 이벤트를 처리하고 싶습니다. 내가 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 –

+0

@HoanNguyen no.에서 내 대답을보십시오. 하드 키 이벤트. – LuxuryMode

답변

1

나는 내 자신의 질문에 답할 수있는 것 같습니다. 당신이 거기 super.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())); 
    } 

것은보기가있는 경우에는 포커스가 설정되지 않습니다 :

AdapterView을 살펴보면, 당신은 다음과 같은 구현을 위해서 setFocusable 무시 것을 볼 수 있습니다 아직 어댑터에서 바인딩 된 데이터가 없습니다 (어댑터가 null이거나 해당 값이 < = 0 임).

이 문제를 해결하려면 setAdapter() 구현 끝에 setFocusable(true)을 추가하기 만하면됩니다.

+0

ListView가 비어있을 때 onKey가 호출되지 않는 것과 같은 문제가있었습니다. setFocusable()과 setFocusableInTouchMode()를 모두 true로 설정했을 때만 작동했지만, 먼저 대답을 읽지 않고서는 절대로 알아 내지 못했습니다. +1하세요! – Adamantium

관련 문제