无法在函数内设置ImageView内容描述
Unable to set ImageView content description within function
为什么我的功能不允许我为 ImageView
设置内容描述?不过,它似乎允许我设置可绘制资源和文本。
class MyAdapter(
private val dataIVPlayOrPause: Drawable,
private val dataTVSong: String
) : RecyclerView.Adapter<RVAdapterEmbark.MyViewHolder>() {
private val typeHeader = 1
private val typeItem = 2
override fun onCreateViewHolder(parent: ViewGroup, type: Int): MyViewHolder {
return when (type) {
typeHeader -> MyViewHolder(inflateHelper(R.layout.header, parent))
typeItem -> MyViewHolder(inflateHelper(R.layout.body, parent))
else -> MyViewHolder(inflateHelper(R.layout.body, parent))
}
}
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
if (getItemViewType(position) == typeHeader) {
} else if (getItemViewType(position) == typeItem) {
val ivPlayPause = viewHolder.itemView. iv_Play_Pause
ivPlayPause(R.drawable.play)
ivPlayPause = R.string.play.toString()
val buttonClickListener = View.OnClickListener {
if (tvSongName.text == null) {
playSong(tvSongName, ivPlayPause)
} else {
pauseSong(tvSongName, ivPlayPause)
}
}
}
}
private fun inflateHelper(resId: Int, parent: ViewGroup): View {
return LayoutInflater.from(parent.context).inflate(resId, parent, false)
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
override fun getItemCount(): Int {
return dataTitle.size + 1
}
override fun getItemViewType(position: Int): Int {
return if (position == 0) typeHeader
else typeItem
}
private fun playSong(
tvSongName: TextView,
ivPlayPause: ImageView
) {
tvSongName.text = "Song name"
ivPlayPause.setImageResource(R.drawable.pause)
ivPlayPause.contentDescription = getString(R.string.pause)
}
}
由于您在 RecyclerView.Adapter
中,因此您无法访问声明了 getString()
的 Activity
、Fragment
或 Context
实例。
在这种情况下,您可以使用 ImageView
的 Context
来获取字符串:
ivPlayPause.contentDescription = ivPlayPause.context.getString(R.string.pause)
为什么我的功能不允许我为 ImageView
设置内容描述?不过,它似乎允许我设置可绘制资源和文本。
class MyAdapter(
private val dataIVPlayOrPause: Drawable,
private val dataTVSong: String
) : RecyclerView.Adapter<RVAdapterEmbark.MyViewHolder>() {
private val typeHeader = 1
private val typeItem = 2
override fun onCreateViewHolder(parent: ViewGroup, type: Int): MyViewHolder {
return when (type) {
typeHeader -> MyViewHolder(inflateHelper(R.layout.header, parent))
typeItem -> MyViewHolder(inflateHelper(R.layout.body, parent))
else -> MyViewHolder(inflateHelper(R.layout.body, parent))
}
}
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
if (getItemViewType(position) == typeHeader) {
} else if (getItemViewType(position) == typeItem) {
val ivPlayPause = viewHolder.itemView. iv_Play_Pause
ivPlayPause(R.drawable.play)
ivPlayPause = R.string.play.toString()
val buttonClickListener = View.OnClickListener {
if (tvSongName.text == null) {
playSong(tvSongName, ivPlayPause)
} else {
pauseSong(tvSongName, ivPlayPause)
}
}
}
}
private fun inflateHelper(resId: Int, parent: ViewGroup): View {
return LayoutInflater.from(parent.context).inflate(resId, parent, false)
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
override fun getItemCount(): Int {
return dataTitle.size + 1
}
override fun getItemViewType(position: Int): Int {
return if (position == 0) typeHeader
else typeItem
}
private fun playSong(
tvSongName: TextView,
ivPlayPause: ImageView
) {
tvSongName.text = "Song name"
ivPlayPause.setImageResource(R.drawable.pause)
ivPlayPause.contentDescription = getString(R.string.pause)
}
}
由于您在 RecyclerView.Adapter
中,因此您无法访问声明了 getString()
的 Activity
、Fragment
或 Context
实例。
在这种情况下,您可以使用 ImageView
的 Context
来获取字符串:
ivPlayPause.contentDescription = ivPlayPause.context.getString(R.string.pause)