Android:跨Activity的Fragment间用Bundle传值(求Kotlin示例)
跨Activity的Fragment间用Bundle传数据的正确实现
你的现有代码是同一Activity内Fragment切换的传参方式,但Fragment A和B分属不同Activity,这种方式不生效。正确的思路是:先把数据从Fragment A传递到Activity B,再由Activity B把数据传给Fragment B,全程用Bundle/Intent Extras实现。
步骤1:Fragment A中启动Activity B并传递数据
在Fragment A里,获取EditText的内容,通过Intent的extras(本质是Bundle)把数据传给Activity B:
// Fragment A 代码 val emailText = emailField.text.toString() // 确保获取EditText的文本内容 val intent = Intent(requireContext(), ActivityB::class.java) intent.putExtra("KEY_EMAIL", emailText) // 用键值对存数据 startActivity(intent)
步骤2:Activity B接收数据并传递给Fragment B
在Activity B的onCreate方法中,先从Intent取出数据,再创建Fragment B时把数据放入它的arguments:
// Activity B 代码 class ActivityB : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_b) // 从Intent中取出传递的数据 val receivedEmail = intent.getStringExtra("KEY_EMAIL") // 创建Fragment B并设置arguments val fragmentB = DashboardHomeFragment() val bundle = Bundle().apply { putString("data", receivedEmail) } fragmentB.arguments = bundle // 将Fragment B加载到Activity B的容器中 supportFragmentManager.beginTransaction() .replace(R.id.fragment_container_b, fragmentB) // 替换成你的容器ID .commit() } }
步骤3:Fragment B中读取数据
Fragment B的代码可以保留核心逻辑,但要优化空值处理,避免空指针:
// Fragment B 代码 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val inputData = arguments?.getString("data") ?: "无数据" // 空值默认处理 binding.emailCv.text = inputData }
关键说明
- 跨Activity传数据必须通过Intent,因为两个Activity是独立的组件,Fragment无法直接跨Activity传递arguments。
- 键名(比如
KEY_EMAIL)建议用常量定义,避免拼写错误,比如在一个单独的文件里定义:const val KEY_EMAIL = "key_email"。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

