向Activity传递字符串后,在其Fragment中获取值为空的问题
问题根源分析
你遇到的问题核心在于你手动创建了一个全新的RegistrationActivity实例,而不是获取系统已经启动并绑定到Fragment的那个Activity对象。
当你执行val activity = RegistrationActivity()时,这个新的Activity实例完全没有经过Android系统的生命周期流程——它的onCreate方法根本没被调用,所以mobile变量始终是初始化时的空字符串"",自然调用getMobile()会返回空值。
正确解决方案
这里有两种靠谱的解决方式,根据你的需求选择:
方式一:获取Fragment绑定的Activity实例
在Fragment中,Android系统已经帮你关联了对应的Activity,你只需要获取这个已存在的实例即可:
// 在你的Fragment中 val registrationActivity = requireActivity() as RegistrationActivity val mobile = registrationActivity.getMobile()
注意:使用
requireActivity()可以确保Activity非空,如果Fragment还没绑定Activity,会抛出异常;如果想更安全,也可以用getActivity()?.let { ... }做空判断。
方式二:Fragment直接读取Intent数据
既然数据是通过Intent传递到Activity的,Fragment也可以直接从Activity的Intent中读取,不需要借助Activity的方法:
// 在你的Fragment的onViewCreated或onActivityCreated方法中 val mobile = requireActivity().intent.extras?.getString("mobile") ?: "" // 这里用空合并运算符处理空值,避免NullPointerException
额外优化建议
另外,你的Activity代码里有个潜在的空安全问题:getMobile()方法中使用了mobile!!,如果mobile是null(比如Intent里没有传这个值),会直接崩溃。建议修改为更安全的写法:
fun getMobile(): String { return mobile ?: "" }
这样即使mobile为null,也会返回空字符串,避免崩溃。
内容的提问来源于stack exchange,提问作者Alex Petev
相关产品推荐
相关产品推荐

