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

Fragment中使用companion object时Intent参数报错该如何解决?

错误原因

你的代码存在两个核心问题触发编译报错:

  • Intent 构造方法的第一个入参要求是Context类型,Fragment本身不是Context的子类,直接传入BookingFragment实例无法匹配参数规则,需要调用Fragment的requireContext()方法获取它依附的上下文实例。
  • 你调用的startActivity()是Android系统用来启动Activity组件的API,第二个参数需要传入目标Activity的类对象,你传入BookingFragment::class.java(Fragment类)本身就不符合参数要求,且startActivity不支持直接启动Fragment。

修复方案

根据你的实际需求二选一即可:

场景1:需要启动承载BookingFragment的目标Activity

如果你的需求是跳转到包含BookingFragment的页面,调整代码如下:

companion object {
    // 入参改为Context类型,方便任意场景调用
    fun start(context: Context) {
        // 第二个参数替换为你实际的目标Activity类名
        context.startActivity(Intent(context, BookingActivity::class.java))
    }
}

// 调用示例:在其他Fragment中调用时传requireContext()
BookingFragment.start(requireContext())

场景2:需要创建BookingFragment实例供Activity加载

如果你的需求是获取BookingFragment实例,添加到Activity的Fragment容器中,使用标准的newInstance模式即可:

companion object {
    // 需要传参时可在方法中添加参数,通过setArguments存入Fragment
    fun newInstance(): BookingFragment {
        return BookingFragment()
    }
}

// 调用示例:在Activity中加载Fragment
val fragment = BookingFragment.newInstance()
supportFragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment)
    .commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:57:02