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

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,这就是应用重启的核心原因。

具体解决步骤:

  1. 修正键名拼写:把Switches里的键改成和Home里完全一致的 "text1"
  2. 替换危险的强制非空操作符:用更安全的方式处理可能的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:57:52