避免使用getIdentifier检索文本资源的方法?

问题描述

我注意到在android developer page for getIdentifier显示

注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源要有效得多。

我想避免使用它,但是我当前的实现依赖于它。

在我的数据库中,我有数百个预填充的条目,每个条目有3个关联的字符串资源和一个图像。为了通过条目访问资源,我将资源名称作为字符串保存在元组中,然后使用getIdentifier加载它们。

如果我的实现令人困惑,这里有一些图片和示例代码

string resources file

database table

示例代码

coin = model.getSelectedCoin()!!

    binding.topMedia.setimageResource(
        resources.getIdentifier(coin.imageAddress,"drawable",requireContext().packageName)
    )

    binding.descriptionText.text = resources.getString(
        resources.getIdentifier(coin.description,"string",requireContext().packageName)
    )

这是不好的做法吗?有没有更有效的实现方式,允许我将数据库条目与其资源连接起来?

解决方法

也许您可以在数据库外部设置这些值?创建一个描述您的关卡的对象,并使用其resourceId定义该对象的图像和描述。这些基本上是与UI相关的值,它们根本不应该在数据库中。