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

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

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

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

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

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


person Schnodahipfe    schedule 15.04.2012    source источник
comment
Не могли бы вы поделиться с нами, почему вы хотели бы сделать такую ​​вещь? Мне просто интересно.   -  person Zsombor Erdődy-Nagy    schedule 15.04.2012
comment
Мне нужно отслеживать, какой из фрагментов виден для целей ведения журнала   -  person Schnodahipfe    schedule 15.04.2012


Ответы (1)


Используя ответ на этот вопрос: 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;
    }
}
person Schnodahipfe    schedule 16.04.2012
comment
как получить количество дочерних представлений, которые в настоящее время видны для просмотра полосы прокрутки? - person CoDe; 03.10.2012
comment
любое решение/предложение здесь? - person CoDe; 30.01.2013
comment
давно ничего не делал с Android, но если вы увеличиваете счетчик в приведенном выше операторе if, должно получиться - person Schnodahipfe; 20.06.2013
comment
Отличное решение. Мне помогает :) - person Libin; 25.06.2014