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

Android Kotlin中通过Intent从Fragment向Activity传递数据失败,请求帮助

解决Fragment通过Intent向Activity传数据的问题

我来帮你排查下问题所在,你的代码里有两个关键问题导致数据传不过去,甚至可能触发空指针异常:

  • 视图初始化顺序错误:你在调用inflater.inflate()加载布局之前,就直接给fb_ac设置点击事件了。这时候fb_ac还没有被实例化,肯定是null,运行时会直接崩溃。必须先加载布局,再从布局里找到对应的按钮控件。
  • Intent上下文传错了:Fragment本身不是Context的子类,所以创建Intent时第一个参数不能传this@ACFragment,得用Fragment关联的上下文,比如requireContext()或者activity。

下面是修正后的完整代码:

class ACFragment : Fragment() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // 先加载布局并保存为view变量
        val view = inflater.inflate(R.layout.fragment_ac, container, false)
        
        val id = "ac"
        // 从加载好的view中找到按钮
        val fbAcButton = view.findViewById<Button>(R.id.fb_ac)
        fbAcButton.setOnClickListener {
            // 使用requireContext()作为Intent的上下文
            val intent = Intent(requireContext(), AddFunction::class.java)
            intent.putExtra("id", id)
            startActivity(intent)
        }
        
        return view
    }
}

另外别忘了在AddFunction Activity里接收数据,示例代码如下:

class AddFunction : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_add_function)
        
        // 获取传递过来的id数据
        val receivedId = intent.getStringExtra("id")
        // 这里可以根据需求使用数据,比如打印日志或者显示在UI上
        Log.d("AddFunction", "接收到的id: $receivedId")
    }
}

几个额外的小提示:

  • 如果你用的是ViewBinding,可以替代findViewById(),代码会更简洁安全。
  • requireContext()会确保Fragment已经关联到Context,如果还没关联会抛出异常,比直接用activity更严谨(activity可能为null)。

内容的提问来源于stack exchange,提问作者Prasad v Bhagat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:22:49