跳转至第二个Fragment后切横屏重现首个Fragment的问题如何解决?
问题根因
横竖屏切换触发Activity重建时,系统会自动恢复之前的Fragment栈状态(也就是你跳转后显示的ForecastFrag会被恢复),但你的MainActivity代码没有判断是否为首次创建,每次onCreate都会主动新添加一个CityFrag到容器中,最终导致两个Fragment重叠显示。
解决方案
1. 给初始Fragment添加新增判空逻辑
修改MainActivity中添加CityFrag的代码,只有当savedInstanceState为null(即Activity首次创建,不是配置变更触发的重建)时,才执行添加初始Fragment的操作:
val fm: FragmentManager = supportFragmentManager // 只有首次创建Activity时才添加初始Fragment,重建时由系统自动恢复Fragment栈 if (savedInstanceState == null) { val cityFragment = CityFrag() fm.beginTransaction() .add(R.id.fragment_container, cityFragment) .commit() }
2. 可选:给Fragment根布局添加不透明背景
如果修改后还能看到下层Fragment的残留显示,检查两个Fragment的根布局是否没有设置背景色,给根布局添加android:background="@color/white"(替换为你的页面实际背景色)即可避免透传显示。
3. 不推荐的备用方案
如果你的页面不需要在横竖屏切换时重新加载布局,可以给对应Activity在AndroidManifest.xml中添加配置变更声明,避免Activity重建:
<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize" />
该方案会让系统不重建Activity,也不会重新走onCreate逻辑,但是你需要自行处理配置变更后的布局适配逻辑,所以优先选择第一种方案。
内容的提问来源于stack exchange,提问作者Dante313
相关产品推荐
相关产品推荐

