Android Kotlin: фрагмент не привязан к контексту - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать TabLayout с различными фрагментами и начал с автоматически сгенерированного кода AndroidStudio для макета с вкладками. Я не изменил способ создания фрагмента заполнителя, его отображения, обработки и т. Д. c. Фрагмент обрабатывается FragmentPagerAdapter, который используется ViewPaper, который, в свою очередь, используется для настройки TabLayout.

В макет уже включен FAB. Его onClick выглядит следующим образом:

fab.setOnClickListener { view ->
    val currentFragment: Fragment = sectionsPagerAdapter.getItem(viewPager.currentItem)
    when (viewPager.currentItem) {
        0 -> doSomething()
        1 -> (currentFragment as PlaceholderFragment).fabOnClick()
        else -> doSomethingElse()
    }
}

Несмотря на то, что вышеприведенный код гарантирует, что fabOnClick() вызывается только для текущего видимого фрагмента, когда я пытаюсь получить контекст, используя requireContext() в PlaceholderFragment, java выдает следующее исключение:

java.lang.IllegalStateException: Fragment PlaceholderFragment{660c58b} (08f94c5f-64b3-4a50-a1d4-2f3a6c7b491c)} not attached to a context.

По некоторым причинам контекст имеет значение , например, доступно в onResume() в PlaceholderFragment:

override fun onResume() {
    super.onResume()
    // Works fine
    Toast.makeText(requireContext(), "placeholder", Toast.LENGTH_LONG).show()
}

fun fabOnClick() {
    // Throws exception
    Toast.makeText(requireContext(), "placeholder", Toast.LENGTH_SHORT).show()
}

I нашел этот поток, Фрагмент, не привязанный к контексту , в котором решение заключалось в том, чтобы зафиксировать транзакцию фрагмента, но все это, кажется, обрабатывается автоматически в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...