我在这里处理奇怪的片段生命周期行为。
我有一个托管两个片段的活动:CityFragment - 显示城市列表和 WeatherFragment - 显示所选城市的天气预报。
当应用程序启动时,CityFragment 将显示在屏幕上,当用户选择城市时 - WeatherFragment 通过 supportFragmentManager 和 backstack 添加。然后,如果用户想要旋转屏幕,我会得到图片上的情况
正如您在日志中看到的,用户选择城市后,CitiesFragment 会调用 onStop 和 onDestroyView,之后的片段视图为 null。但是当屏幕旋转时,CitiesFragment onSaveInstanceState 会被调用(当视图已经被销毁时)。
这里的问题是,将代码转换为 kotlin 并使用合成进行视图访问后,当我想保存 recyclerview 第一个可见元素以在之后恢复时,我在 onSaveInstanceState 中收到 NullPointerException
val firstVisiblePosition = (recycler_view_cities.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
Run Code Online (Sandbox Code Playgroud)
使用旧的 java 实现,它工作得很好,因为我将 recycler_view_cities 的引用存储在片段中,并且可以在那里访问它。
android android-fragments kotlin-android-extensions onsaveinstancestate