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

在使用Fragment的MainActivity.kt中如何获取strings.xml文本值?

Android MainActivity获取strings.xml文本的空指针问题解决

问题根源

你在类成员变量声明阶段直接调用getText()这类依赖Context的方法,此时Activity的Context还没完成初始化,调用getResources()会返回null,导致触发NullPointerException。而R.string.title本身只是个资源ID(整数常量),并不是实际的字符串内容。

正确的实现方案

1. 在Activity生命周期方法中初始化

把字符串赋值操作放到onCreate()或者更靠后的生命周期方法里,此时Context已经完全可用:

private lateinit var title: String

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    // 两种写法效果一致
    title = getString(R.string.title)
    // title = resources.getString(R.string.title)
}

用lateinit标记变量,避免初始值为null的麻烦。

2. 用Kotlin懒加载委托

如果希望变量在第一次被使用时才初始化,同时保证Context有效,可以用lazy委托:

private val title: String by lazy {
    getString(R.string.title)
}

lazy代码块会在变量首次被访问时执行,这时Activity已经完成初始化,Context是正常可用的。

额外:Fragment中获取字符串的注意事项

如果是在Fragment里获取,要确保Fragment已经和Activity绑定(比如onAttach()之后),可以这样写:

// 在Fragment的onCreateView或后续生命周期方法中
val title = requireContext().getString(R.string.title)
// 或者通过Activity获取
val title = requireActivity().getString(R.string.title)

内容的提问来源于stack exchange,提问作者Harmony Valley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:22:05