如何在 Kotlin Android 中为 RecyclerView itemView 中的特定元素实现 onClickListener?
How to implement onClickListener for a specific element inside RecyclerView itemView in Kotlin Android?
我想为 RecylerView 中的项目内的 followButton 实现 onClickListener。我还没有设法找到任何使用我遵循的方式的 tutorial/question 并且对 Kotlin 中所需的方法完全一无所知。
这是适配器 class 的代码,我刚刚成功地为 itemView 实现了一个 onItemClickListener。
class adapterClass(private val exampleList : List<objectClass>, private val listener : onItemClickListener) : RecyclerView.Adapter<adapterClass.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.example_item, parent, false)
return ViewHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val currentItem = exampleList[position]
val url: String = currentItem.imageResourceLink
val circularProgressDrawable = CircularProgressDrawable(holder.itemView.context)
circularProgressDrawable.strokeWidth = 10f
circularProgressDrawable.centerRadius = 100f
circularProgressDrawable.start()
GlideApp.with(holder.itemView.context).load(url).circleCrop().placeholder(circularProgressDrawable).error(R.drawable.error).fallback(R.drawable.fallback).transition(DrawableTransitionOptions.withCrossFade()).into(holder.imageView)
holder.textView1.text = currentItem.text1
holder.textView2.text = currentItem.text2
}
override fun getItemCount(): Int = exampleList.size
inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView), View.OnClickListener{
val imageView: ImageView = itemView.findViewById(R.id.imageView)
val textView1: TextView = itemView.findViewById<TextView>(R.id.textView)
val textView2: TextView = itemView.findViewById<TextView>(R.id.textView2)
val followButton: Button = itemView.findViewById(R.id.followButton)
init {
itemView.setOnClickListener(this)
}
override fun onClick(p0: View?) {
val position : Int = adapterPosition
if(position != RecyclerView.NO_POSITION) {
listener.onItemClick(position)
}
}
}
interface onItemClickListener{
fun onItemClick(position:Int)
}
}
如果可能,我希望遵循与当前使用的方式相同的方式(ViewHolder 中的 onClickListener),以确保此适配器在整个应用程序中的可重用性。
谢谢
您正在为 itemView 设置 OnClickListener,这使得视图可点击。如果您只想为 followButton 设置 OnClickListener,只需为 followButton 设置 OnClickListner。
init {
followButton .setOnClickListener(this)
}
我想为 RecylerView 中的项目内的 followButton 实现 onClickListener。我还没有设法找到任何使用我遵循的方式的 tutorial/question 并且对 Kotlin 中所需的方法完全一无所知。 这是适配器 class 的代码,我刚刚成功地为 itemView 实现了一个 onItemClickListener。
class adapterClass(private val exampleList : List<objectClass>, private val listener : onItemClickListener) : RecyclerView.Adapter<adapterClass.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.example_item, parent, false)
return ViewHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val currentItem = exampleList[position]
val url: String = currentItem.imageResourceLink
val circularProgressDrawable = CircularProgressDrawable(holder.itemView.context)
circularProgressDrawable.strokeWidth = 10f
circularProgressDrawable.centerRadius = 100f
circularProgressDrawable.start()
GlideApp.with(holder.itemView.context).load(url).circleCrop().placeholder(circularProgressDrawable).error(R.drawable.error).fallback(R.drawable.fallback).transition(DrawableTransitionOptions.withCrossFade()).into(holder.imageView)
holder.textView1.text = currentItem.text1
holder.textView2.text = currentItem.text2
}
override fun getItemCount(): Int = exampleList.size
inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView), View.OnClickListener{
val imageView: ImageView = itemView.findViewById(R.id.imageView)
val textView1: TextView = itemView.findViewById<TextView>(R.id.textView)
val textView2: TextView = itemView.findViewById<TextView>(R.id.textView2)
val followButton: Button = itemView.findViewById(R.id.followButton)
init {
itemView.setOnClickListener(this)
}
override fun onClick(p0: View?) {
val position : Int = adapterPosition
if(position != RecyclerView.NO_POSITION) {
listener.onItemClick(position)
}
}
}
interface onItemClickListener{
fun onItemClick(position:Int)
}
}
如果可能,我希望遵循与当前使用的方式相同的方式(ViewHolder 中的 onClickListener),以确保此适配器在整个应用程序中的可重用性。 谢谢
您正在为 itemView 设置 OnClickListener,这使得视图可点击。如果您只想为 followButton 设置 OnClickListener,只需为 followButton 设置 OnClickListner。
init {
followButton .setOnClickListener(this)
}