Android 如何从适配器类中动态获取R.drawable.{var}?

Android 如何从适配器类中动态获取R.drawable.{var}?,android,kotlin,Android,Kotlin,也许有更简单的方法,但我希望根据API发送给我的内容加载标志图像。在这种情况下,server.flag代表德国为“de”。我在drawables中有一个de.png,可以通过R.drawable.de访问。所以我希望动态地做这件事 class ServerAdapter(private var serverList: ArrayList<ServerRow>) : RecyclerView.Adapter<DefaultViewHolder>() {

也许有更简单的方法,但我希望根据API发送给我的内容加载标志图像。在这种情况下,
server.flag
代表德国为“de”。我在drawables中有一个
de.png
,可以通过
R.drawable.de
访问。所以我希望动态地做这件事

class ServerAdapter(private var serverList: ArrayList<ServerRow>) :
    RecyclerView.Adapter<DefaultViewHolder>() {


    override fun onBindViewHolder(holder: DefaultViewHolder, position: Int) {

            ...

            val id = Resources.getSystem().getIdentifier(server.flag, "drawable", holder.itemView.context.packageName)
            Glide.with(holder.itemView.context)
                .load(id)
                .into(holder.getImage(R.id.server_country_flag_id))

}
}
类服务器适配器(专用变量服务器列表:ArrayList):
RecyclerView.Adapter(){
覆盖onBindViewHolder(holder:DefaultViewHolder,位置:Int){
...
val id=Resources.getSystem().getIdentifier(server.flag,“drawable”,holder.itemView.context.packageName)
Glide.with(holder.itemView.context)
.负载(id)
.into(holder.getImage(R.id.server\u country\u flag\u id))
}
}
但是,我得到一个
无法找到资源ID#0x0
。id显示为0。 请问我遗漏了什么?

试着这样做:

val context = holder.itemView.context
int resourceID = context.resources.getIdentifier(
    server.flag, "drawable", context.packageName
)

不过,由于getIdentifer方法很昂贵,我不建议在onBindViewHolder中执行此操作。无法在将数据发送到适配器之前进行此转换吗?

能否提供适配器的布局以及视图持有者类?当然,您的意思是
DefaultViewHolder
?还有什么?啊,是的,错误在
Resources.getSystem()
中。有道理,谢谢你。你说得对。我必须考虑一下。保留一张地图,其中server.flag为键,drawable为值。您甚至可以创建一个映射,并将resourceID保留为值。检查映射中是否已经有server.flag,如果没有,请运行getIdentifier并将其放入映射中。