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
相关产品推荐
相关产品推荐

