You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跳转至第二个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 23:30:01