android - 如何从 Adapter 类中动态获取 R.drawable.{var}?
问题描述
也许有一种更简单的方法,但我希望根据 API 发送给我的内容加载标志图像。在这种情况下server.flag
,德国的“de”。我有一个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))
}
}
但是我得到一个Unable to find resource ID #0x0
. id 显示为 0。请问我错过了什么?
解决方案
试试这样:
val context = holder.itemView.context
int resourceID = context.resources.getIdentifier(
server.flag, "drawable", context.packageName
)
虽然 getIdentifer 方法很昂贵,但我不建议在 onBindViewHolder 中执行此操作。您不能在将数据发送到适配器之前进行此转换吗?
推荐阅读
- c# - c# 文件创建访问被拒绝
- three.js - 将 EffectComposer 添加到使用 Spot Light react-three-fiber 和 react-postprocessing 照明的房间时出现奇怪的伪影
- c# - c# - cpu 友好的单线程控制台应用程序,每分钟做一些事情
- reactjs - 将chartjs更改为自定义图像的点样式
- ios - 如何在 Agora.io iOS 中使用 RTM 发送消息?
- node.js - Kafkajs - 获取统计信息(滞后)
- swift - 内容预览器未在 Xcode 12.5.1 上加载
- css - 有没有办法在包装类中包含 bootstrap-vue,这样它就不会与页面上的其他引导库冲突?
- python-3.x - 带有两个循环的异步,最佳实践
- c# - 根据两个 JSON 字符串之间的比较从 JSON 字符串中删除元素 - C#