Как узнать элемент основного фрагмента FragmentStateAdapter

У меня есть тип пейджера просмотра FragmentStateAdapter, и я хотел бы знать, когда основной фрагмент находится в позиции, например. 100% видно. Поддерживает ли FragmentStateAdapter это? Я уже пробовал подходы к этому post безуспешно.

Каждый фрагмент в пейджере имеет некоторый контроль над активностью хоста, но этот контроль должен быть взаимоисключающим. Так, например, в зависимости от того, какой фрагмент виден на 100%, кнопка в макете активности хоста изменит цвет. Но цвет должен зависеть от того, какой фрагмент является основным, а не от того, какой фрагмент возобновляется (например, соседний невидимый фрагмент может находиться в возобновленном состоянии).

Я использую ViewPager2 и класс виджета.

изменить

Возможно, альтернативой является использование как глобальный прослушиватель изменения макета проверить, отображается ли корневой макет фрагмента на 100%?


person the_prole    schedule 16.07.2020    source источник


Ответы (1)


Похоже, вы должны использовать ViewPager2.OnPageChangeCallback

Обратный вызов onPageSelected() будет вызываться при выборе страницы, и вы можете основывать свою логику на позиции ViewPager.

viewPager.registerOnPageChangeCallback(
        object: ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
                when (position) {
                    0 -> {
                        //Set button color
                    }
                    1 -> {
                        //Set button color to something else
                    }
                    else -> {

                    }
                }
            }
        }
)

Если использование отображаемого в настоящее время типа фрагмента лучше соответствует вашим потребностям, чем использование позиции, вы можете использовать ссылки на фрагменты в адаптере, см. здесь для получения дополнительной информации: https://stackoverflow.com/a/36504458/4409409

person Daniel Nugent    schedule 17.07.2020
comment
Это может сработать, еще одно наблюдение: фрагмент onResumed пейджером. - person the_prole; 17.07.2020