Свойство Lateinit дает исключение, даже если оно является init - PullRequest
0 голосов
/ 12 сентября 2018

Мой фрагмент выглядит так:

open lateinit var recyclerView: RecyclerView

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { 
    val rootView = inflater.cloneInContext(contextThemeWrapper).inflate(R.layout.xxx, container, false)

    if (savedInstanceState == null) {
        recyclerView = rootView.findViewById(R.id.sss)
    }
}

Я видел эту ошибку в своем журнале:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{tv.lattelecom.app/tv.lattelecom.app.main.MainActivity}: kotlin.UninitializedPropertyAccessException: lateinit property recyclerView has not been initialized
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2793)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4720)

Мне интересно, как и почему это происходит? Кроме того, не знаю, как воспроизвести эту ошибку. Я предполагаю, что это происходит, когда приложение некоторое время находилось в фоновом режиме и было / было повернуто. Идеи?

1 Ответ

0 голосов
/ 12 сентября 2018

Возможно, вы захотите проверить, инициализирована ли recyclerView, но с if(savedInstanceState == null) лучше использовать if(recyclerView::lateinitVar.isInitialized) для этого.

См. http://kotlinlang.org/docs/reference/whatsnew12.html#checking-whether-a-lateinit-var-is-initialized

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