在使用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
相关产品推荐
相关产品推荐

