Android – HorizontalScrollView – получить представление в фокусе (или его индекс)

У меня есть HorizontalScrollView содержащий LinearLayout , который, в свою очередь, содержит пару FrameLayout s. Каждый FrameLayout содержит макет Fragment . Теперь я пытаюсь получить представление, то есть FrameLayout , которое в настоящее время отображается или находится в фокусе в HorizontalScrollView . Как только у меня есть представление в фокусе, я могу получить его индекс в LinearLayout .

Я пробовал следующее, но ничего не работает:

  • HorizontalScrollView.findFocus () – возвращает значение null
  • LinearLayout.findFocus () – возвращает значение null
  • LinearLayout.getFocusedChild () – возвращает значение null
  • FrameLayout.hasFocus () – возвращает false для всех FrameLayout s

Я также мог бы попытаться выяснить, какой из дочерних элементов LinearLayout имеет фокус, делая вычисления на основе текущей X-позиции каждого ребенка. Однако вызов getX() для каждого дочернего getX() всегда возвращает «0.0».

Кто-нибудь есть идея, как получить представление в фокусе (или даже лучше его индекс в LinearLayout )?

Используя ответ на этот вопрос: « android-how-to-check-if-a-view-inside-of-scrollview-is-visible» я придумал следующее решение:

 Rect scrollBounds = new Rect(); MyHorizontalScrollView.getDrawingRect(scrollBounds); Rect childBounds = new Rect(); for (int i = 0; i < MyLinearLayout.getChildCount(); i++) { MyLinearLayout.getChildAt(i).getHitRect(childBounds); if(scrollBounds.contains(childBounds)) { IndexOfVisibleChild = i; return; } }