【发布时间】:2018-05-14 18:05:01
【问题描述】:
我在这里处理奇怪的片段生命周期行为。
我有一个包含两个片段的活动:CityFragment - 显示城市列表和 WeatherFragment - 显示所选城市的天气预报。
当应用程序启动时,CityFragment 显示在屏幕上,当用户选择城市时 - WeatherFragment 通过 supportFragmentManager 与 backstack 添加。 然后,如果用户想旋转屏幕,我会得到图片上的情况
- 0-2 -- CitiesFragment 启动
- 3-7 -- 用户选择城市,WeatherFragment 显示在屏幕上
- 8-18 -- 屏幕旋转
正如您在用户选择城市后立即在日志中看到的那样,为 CitiesFragment 调用 onStop 和 onDestroyView,之后的片段视图为空。 但是当屏幕旋转时,会调用 CitiesFragment onSaveInstanceState(当视图已经被销毁时)。
这里的问题是,在将代码转换为 kotlin 并使用合成进行视图访问后,当我想保存 recyclerview 第一个可见元素以在之后恢复时,我在 onSaveInstanceState 中得到 NullPointerException
val firstVisiblePosition = (recycler_view_cities.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
使用旧的 java 实现,它可以正常工作,因为我将 recycler_view_cities 的引用存储在 Fragment 中,我可以在那里访问它。
- 问题 1. CitiesFragment 的 onSaveInstance 状态不应该在 onStop 和 onDestroyView 之前调用吗?
- 问题2,这种情况如何处理?
【问题讨论】:
标签: android android-fragments kotlin-android-extensions onsaveinstancestate