ViewPager - OnResume первого фрагмента мешает второму фрагменту - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть активность "A" с ViewPager (с TabLayout) внутри. ViewPager включает в себя 2 фрагмента «X» и «Y», поскольку ViewPager обрабатывает жизненный цикл фрагментов. Когда действие возобновляется, фрагменты также go возобновляются.

Когда я запускаю упражнение изначально, первая вкладка - фрагмент «X» находится в фокусе и отображает пользовательский интерфейс, во время которого я получаю программную клавиатуру. (Эта клавиатура запускается при порождении mainUIThread с задержкой 1,5 сек во время onResume фрагмента "Y").

Вопрос в том, почему фрагмент onResume фрагмента "Y" мешает, а "X" "вкладка фрагмента во время onResume? Есть ли способ избежать этого?

Я хочу показать клавиатуру только для фрагмента "Y", а не для фрагмента "X". Поскольку onResume фрагмента «Y» обрабатывает клавиатуру, клавиатура становится видимой.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Как насчет использования OnPageChangeListener ?

Вы можете отобразить клавиатуру, когда выбран фрагмент Y, и скрыть клавиатуру, когда выбраны другие страницы.

my_view_pager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
    override fun onPageSelected(position: Int) {
        if (position == yFragmentPosition) {
            showKeyboard()
        } else {
            hideKeyboard()
        }
    }
    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
    override fun onPageScrollStateChanged(state: Int) {}
})
1 голос
/ 17 апреля 2020

Оба фрагмента onResume должны быть автономными и не должны влиять на другой, но если это происходит, я могу предложить вам не вызывать фрагменты непосредственно в резюме, вместо этого использовать onresume действия, там проверить активный фрагмент и, создать resumeMethod в котором есть все, что вам нужно, в onresume каждого фрагмента и вызывать активный фрагмент при возобновлении, например, фрагмента A.resumeMethod (), если фрагмент А активен, таким образом вы можете избежать ошибки.

...