2017-09-07 9 views
0

전화에서 Talkback 기능을 활성화했습니다.ListView 내게 필요한 옵션 Return 인덱스

사용자는 목록에서 다음 항목을 선택/강조 표시하려면 오른쪽으로 터치 와이프 제스처를합니다. 목록에서 새로 선택한 요소의 색인을 갖고 싶습니다.

ListView에서 새로운 선택된 항목의 색인을 가져 오려고합니다.

listView.setAccessibilityDelegate(new View.AccessibilityDelegate() { 
     @Override 
     public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) { 
      if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) { 
       int selectedItemPosition = event.getSelectedItemPosition(); // doesn't work, returns always -1 
        } 
     } 
}); 

편집 1 : listView.getSelectedItemPosition() -1을 반환 음성 안내 지원과 함께 다른 요소를 선택한 후 모든 시간.

답변

1

이 문제 (ListView 선택 항목 인덱스를 가져 오는 문제)는 접근성 API 사용에 특히 중요하지 않으며 수행해야합니다. 은 "getToIndex()"함수에 대한

문서 :

는 텍스트 선택 끝의 인덱스 또는 마지막으로 볼 수있는 항목의 인덱스 스크롤 가져옵니다. 당신이 정말 원하는 것은 단지 ACCESSIBILITY_FOCUS을받은보기 및 NOT보기를하는지

event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) 

"선택을 :

그것은 당신의 설명과 코드, 즉이 라인에서 보인다 ". 이들은 매우 다릅니다. 나는 확실히이

int selectedItemPosition = ... 

훨씬 더 분명하다

int a11yFocusedItemPosition = ... 

하는 방법을 변경하는 것이 좋습니다. "선택됨"은 목록보기 측면에서 매우 특정한 것을 의미하며, 이는 혼란스러운 것입니다. 포커스를받을 아이가 보통이기 때문에

listView.setAccessibilityDelegate(new View.AccessibilityDelegate() { 
    @Override 
    public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) { 

     if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) { 
      int accessibilityFocusedItemIndex = -1; 

      for (int i = 0; i < host.getChildCount(); i++) { 
       if (host.getChildAt(i) == child) { 
        accessibilityFocusedItemIndex = i; 
        break; 
       } 
      } 

      Log.d("LogTag", "Accessibility Focused Item Index: " + accessibilityFocusedItemIndex); 
     } 

     return super.onRequestSendAccessibilityEvent(host, child, event); 
    } 
}); 

참고 그 목록보기, 이런 기능이 작동하도록 관리하는 특별한 경우이다 : 가정 접근성 초점은 당신이 찾고있는 것은,이 멋지게해야 할 사실이다 호스트 뷰의 직계 자식. 이는 목록보기 셀에 래핑되지 않은 개별 활성 요소에 대해서는 사실이 아닐 수 있습니다.

+0

멋지다. 그러나 편집을 보아라. 그것은 -1 인 것을 되 돌린다. 나는 방금 메서드 이름을 추측했다. ... – Quonux

+0

그것은 선택된 항목이 없기 때문에 가능성이 높다. 더 "의도적으로"지향적 인 글. 무엇을 성취하려고합니까? 제가 염려하는 한 -1은 아마도 당신이 기대해야 할 것이기 때문에, 당신은 당신이 그것을 기대해야하는 이유를 알지 못하기 때문에 혼란 스럽습니다. 질문을 편집하여 사용자가 수행하려고하는 변경 사항, "selectedItemPosition"을 사용하여 수행 할 작업 및 그 값을 이해하면 어떤 의미가 있는지 이해할 수 있습니다. – ChrisCM

+0

참고 : "accessibility_focused"및 "selected"인보기는 SUPER DIFFERENT입니다. 초점이 맞춰진 뷰 또는 방금 선택한 뷰를 찾고 있습니까? 보기가 활성화되기 전까지는보기가 "선택"되지 않으므로 -1이 표시됩니다. – ChrisCM