小编Oli*_*123的帖子

onSaveInstanceState 在 onDestroyView 之后调用

我在这里处理奇怪的片段生命周期行为。

我有一个托管两个片段的活动:CityFragment - 显示城市列表和 WeatherFragment - 显示所选城市的天气预报。

当应用程序启动时,CityFragment 将显示在屏幕上,当用户选择城市时 - WeatherFragment 通过 supportFragmentManager 和 backstack 添加。然后,如果用户想要旋转屏幕,我会得到图片上的情况在此输入图像描述

  • 0-2 -- CitiesFragment 启动
  • 3-7 -- 用户选择城市,WeatherFragment 显示在屏幕上
  • 8-18 -- 屏幕旋转

正如您在日志中看到的,用户选择城市后,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 的引用存储在片段中,并且可以在那里访问它。

  • 问题 1. CitiesFragment 的 onSaveInstance 状态不应该在 onStop 和 onDestroyView 之前调用吗?
  • 问题2.遇到这种情况如何处理?

android android-fragments kotlin-android-extensions onsaveinstancestate

5
推荐指数
1
解决办法
1971
查看次数