Каков гарантированный способ получить ненулевой контекст во фрагменте? - PullRequest
0 голосов
/ 27 января 2019

Я видел много примеров того, как получить Контекст в BaseFragment, например:

protected lateinit var ctx: Context

override fun onAttach(context: Context?) {
    super.onAttach(context)
    ctx = context!!
}

И затем мы можем использовать экземпляр контекста в других наших фрагментах, расширяющих BaseFragment. Один , два , три (предлагается получить Context из onViewCreated ()) и так далее. Это выглядит как обходной путь.

У меня также были некоторые случаи, когда при использовании getActivity () или getContext () в Fragment возникали исключения «фрагмент отсоединен от Activity».

Итакчто такое верный путь?

1 Ответ

0 голосов
/ 27 января 2019

Вы не можете гарантировать, что контекст будет на 100% ненулевым, поэтому он помечен как обнуляемый (?), Поэтому упомянутый вами обходной путь фактически вызовет исключение в случае отсоединения действия.Чтобы избежать этого, не отмечайте ctx:Context as lateinit var, делайте его обнуляемым protected var ctx:Context? = null и проверяйте его состояние каждый раз, когда вы хотите его использовать.

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