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

迁移至新Splash Screen API后结合Navigation组件跳转崩溃问题求助

问题解决思路

第一个错误:Theme.AppCompat 主题要求

这个报错的核心是二级Activity的主题未继承AppCompat系列主题。新的Splash Screen API仅需在启动页(MainActivity)调用installSplashScreen(),二级Activity不需要调用这个方法,且必须确保其主题继承自Theme.AppCompat或其子类(比如Theme.MaterialComponents.DayNight.NoActionBar这类兼容主题)。

解决步骤:

  1. 打开res/values/styles.xml(或对应夜间模式样式文件),为二级Activity定义兼容主题:
<style name="SecondActivityTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- 自定义样式配置,比如隐藏ActionBar等 -->
</style>
  1. 在AndroidManifest.xml中为二级Activity绑定该主题:
<activity
    android:name=".SecondActivity"
    android:theme="@style/SecondActivityTheme" />
  1. 移除二级Activity中的installSplashScreen()调用——该方法仅用于启动页,其他Activity调用会引发不必要的主题冲突或生命周期异常。

第二个错误:Fragment 无参构造缺失

报错提示“could not find Fragment constructor”,这是Android Fragment的强制规范:所有Fragment必须提供公共无参构造方法。系统在重建Fragment(如配置变更、内存回收后恢复)时,会通过反射调用无参构造实例化Fragment,若你的Fragment仅存在带参数的构造,就会触发这个异常。

解决步骤:

  1. 检查报错的ab.qFragment(对应你代码中的具体Fragment类),确保它有公共无参构造:
class TargetFragment : Fragment() {
    // 必须保留无参构造,即使是空实现
    constructor() : super()

    // 如需传递参数,不要用带参构造,改用Bundle传递
    companion object {
        fun newInstance(param: String): TargetFragment {
            val fragment = TargetFragment()
            val args = Bundle()
            args.putString("PARAM_KEY", param)
            fragment.arguments = args
            return fragment
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 从arguments中取出参数
        val param = arguments?.getString("PARAM_KEY")
    }
}
  1. 确保所有通过Navigation跳转或动态加载的Fragment都遵循该规范,统一用arguments Bundle传递数据,不要依赖带参构造。

内容的提问来源于stack exchange,提问作者DeKekem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:35:23