所有可绘图项列表中的可绘图项名称kotlin



这是我的类,在这里我用所有的Drawables进行调用,但当我这样做的时候"drawableList.toString(("将名称返回为";android.graphics.drawable.bitmap@65vd6f5"我希望回报是";R.drawing.icon_outline_airplane";。有人能帮我吗?

class IconComponenteRecyclerAdapter : RecyclerView.Adapter<IconComponenteRecyclerAdapter.ViewHolder>() {
var drawableList = getAllDrawables().filter { it.toString().startsWith("android.graphics.drawable.") }
private fun getAllDrawables(): List<Drawable?> {
return R.drawable::class.java.fields.map {
ResourcesCompat.getDrawable(resources, it.getInt(null), null)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IconComponenteRecyclerAdapter.ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.icon_component_card, parent, false)
return ViewHolder(v)
}
override fun getItemCount(): Int {
return drawableList.size
}
override fun onBindViewHolder(holder: IconComponenteRecyclerAdapter.ViewHolder, position: Int) {
holder.itemTitle.text = drawableList[position].toString().removePrefix("android.graphics.drawable.")
holder.itemImage.setImageDrawable(drawableList[position])
Log.d("Image - XXXXXX", drawableList.toString())
}
inner class ViewHolder(itemView : View): RecyclerView.ViewHolder(itemView){
var itemImage : ImageView
var itemTitle : TextView
init {
itemImage = itemView.findViewById(R.id.image_icon_component)
itemTitle = itemView.findViewById(R.id.tv_icon_name)
}
}
}

如果您想要Drawables和它们的ID名称,那么您需要创建一个类来同时保存这两个名称,如下所示:

class NamedDrawable(val name: String, val drawable: Drawable) {
override fun toString(): String = name
}
private fun getAllDrawables(): List<NamedDrawable> {
return R.drawable::class.java.fields.mapNotNull { field ->
ResourcesCompat.getDrawable(resources, field.getInt(null), null)
?.let { NamedDrawable(field.name, it) }
}
}

最新更新