Android Kotlin中Fragment间传参报错导致应用重启求助
问题分析与解决方案
嘿,我一眼就揪出问题啦——你这是键名拼写错误加上强制非空操作符(!!)引发的崩溃!
先对照你的代码看看:
- 在Home Fragment里,你往Bundle里存数据用的键是
"text1":val frag:Fragment = Switches() val bundle = Bundle() bundle.putString("text1", "Text Showing") frag.arguments = bundle - 但在Switches Fragment里,你却用
"test1"这个拼写错误的键去取值:val str:String = arguments!!.getString("test1")
这就导致getString("test1")返回null,而你用!!强制要求它非空,直接触发了NullPointerException,这就是应用重启的核心原因。
具体解决步骤:
- 修正键名拼写:把Switches里的键改成和Home里完全一致的
"text1" - 替换危险的强制非空操作符:用更安全的方式处理可能的null,避免崩溃
修正后的Switches Fragment代码示例(两种可选方式):
// 方式1:用空合并运算符提供默认值,确保不会出现null val str: String = arguments?.getString("text1") ?: "默认显示文本" // 方式2:先判断arguments是否有效再取值 val str: String? = arguments?.getString("text1") // 如果需要非空值,也可以结合判断处理 val safeStr = str ?: "默认显示文本"
另外,推荐你用静态工厂方法来创建带参数的Fragment,这样能从根源上避免键名拼写错误,比如在Switches Fragment里添加:
companion object { // 定义静态方法,直接接收参数并传入Bundle fun newInstance(displayText: String): Switches { val fragment = Switches() val bundle = Bundle().apply { putString("text1", displayText) } fragment.arguments = bundle return fragment } }
之后在Home Fragment里直接调用这个方法创建实例:
val frag = Switches.newInstance("Text Showing")
这样就再也不会出现键名写错的问题啦!
内容的提问来源于stack exchange,提问作者Muhammad Talha Zaroon
相关产品推荐
相关产品推荐

