android - 无法使用Kotlin以编程方式检索资源

标签 android kotlin

我正在尝试通过以下方式在我的Kotlin应用中以编程方式加载可绘制对象

resources.getDrawable(R.drawable.XXX)

而我得到的是:
Method threw 'android.content.res.Resources$NotFoundException' exception.

无论目标可绘制对象是什么。

在尝试了不同的方法之后,我终于尝试了一个新创建的Kotlin项目,结果发现它也不起作用。
然后,我创建了一个新的Java项目,在此项目中,所有工作均正常进行。

我没有找到关于在线上遇到相同问题的人们的任何信息,我可以在两个项目中都获得“Resources”对象,但在Kotlin一个项目中找不到可绘制对象。

有什么可以做的事让我不知道吗?

编辑:
我在新创建的项目中获得了这样的资源:
override fun onResume() {
    super.onResume()

    val drawable = resources.getDrawable(R.drawable.ic_launcher_foreground)
}


无论目标资源是什么,可绘制对象,mipmap,颜色...

我在使用Gradle 3.5.3和Kotlin 1.3.61,API级别26的Android Studio 3.5.3上

项目资源是项目创建时添加的资源

最佳答案

我找到了一个临时修复程序,其中大部分都非常有趣。
以“ic_launcher_background”为例作为随机可绘制对象,Java给出了以下结果:

enter image description here

虽然Kotlin中的确切等效代码为我们提供了此功能:
enter image description here

我不明白为什么,但是当使用项目生成的Kotlin方式时,可通过 R 检索的ID与资源类所使用的ID不匹配。

因此,现在我将使用“getIdentifier()”方法来解决我的问题,但这并不是您自然要做的事情。

如果对这里发生的事情有更好的了解的人可以揭开这个谜,那将不胜感激。

关于android - 无法使用Kotlin以编程方式检索资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60336591/

相关文章:

java - 如何安全地更改 Android Studio 中的项目名称?

Android - ViewModel、LiveData、Room 和 Retrofit 以及协程在 kotlin 中组合在一起

java - 我如何获取android中其他应用程序的屏幕时间?

kotlin - kotlin 协程是否有带定时器的异步调用?

java - java 和 kotlin 之间的泛型!!帮我?

android - 在 Android 的 xamarin 表单中使用警报管理器安排通知

android - 唯一ID和ID

java - 启动电子邮件 Intent 时出现 ClassCastException

java - 在您自己的 Android 应用程序中调用第 3 方 native 库

java - 在其他线程中使用蓝牙连接的OutputStream会干扰消息的接收