Android开发遇Unresolved reference: resources错误,求解决
问题原因与解决方案
错误原因
resources 是Android中Context(如Activity、Application)的专属成员,它依赖Android运行时的上下文环境才能访问资源。你的DataSource是普通类,其companion object属于静态作用域,没有绑定任何Context实例,直接调用resources自然会出现「Unresolved reference」错误。
官方文档的示例是在有Context的环境(比如Activity内部)编写的,所以能正常运行,但你的代码场景不满足这个前提。
解决方案
方案1:通过方法参数传入Context动态获取列表
修改DataSource,让companion object提供一个接收Context的方法:
import android.content.Context import com.example.wordadapter.R class DataSource { companion object { fun getXList(context: Context): List<String> { return context.resources.getStringArray(R.array.String_List).toList() } } }
使用时从有Context的地方(比如Activity)传入上下文:
// 在Activity中调用 val myList = DataSource.getXList(this) // 如果是在Fragment中,用requireContext() val myList = DataSource.getXList(requireContext())
方案2:初始化时绑定Application Context(全局可用)
如果需要全局复用这个列表,可以结合Application Context初始化:
import android.content.Context import com.example.wordadapter.R class DataSource(private val context: Context) { val xList: List<String> = context.resources.getStringArray(R.array.String_List).toList() companion object { lateinit var instance: DataSource // 用Application Context初始化,避免内存泄漏 fun initialize(context: Context) { instance = DataSource(context.applicationContext) } } }
然后在自定义Application类的onCreate方法中完成初始化:
import android.app.Application class MyApplication : Application() { override fun onCreate() { super.onCreate() DataSource.initialize(this) } }
后续在任何地方都可以直接调用:
val myList = DataSource.instance.xList
注意事项
- 永远优先使用
applicationContext而非Activity的Context,避免因持有Activity引用导致内存泄漏 - 静态作用域中不要随意持有Context实例,必须使用时确保是Application级别的上下文
内容的提问来源于stack exchange,提问作者Jaguar
相关产品推荐
相关产品推荐

