如何在 Kotlin Android 中为 RecyclerView itemView 中的特定元素实现 onClickListener? [复制]

Posted

技术标签:

【中文标题】如何在 Kotlin Android 中为 RecyclerView itemView 中的特定元素实现 onClickListener? [复制]【英文标题】:How to implement onClickListener for a specific element inside RecyclerView itemView in Kotlin Android? [duplicate] 【发布时间】:2021-08-21 06:15:03 【问题描述】:

我想在 RecylerView 的一个项目中为 followButton 实现一个 onClickListener。我还没有找到任何使用我遵循的方式的教程/问题,并且对 Kotlin 中所需的方法完全一无所知。 这是我刚刚成功为 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 上设置它会将整个视图设置为可点击,因为您只想在关注按钮上设置它,只需这样做followButton.setOnClickListener listener.onItemClick(adapterPosition) 另外,如果需要,我将如何处理多个项目? 根据您的需要向您的界面添加更多功能,例如fun onFollowButtonClick()fun onTextViewClick(),或者您可以在单个功能中发送一个类型,例如fun onItemClick(position:Int, typeOfClick:Int) 【参考方案1】:

您正在为 itemView 设置 OnClickListener,这使得视图可点击。如果您只想为 followButton 设置 OnClickListener,只需为 followButton 设置 OnClickListner。

init 

        followButton .setOnClickListener(this)

    

【讨论】:

以上是关于如何在 Kotlin Android 中为 RecyclerView itemView 中的特定元素实现 onClickListener? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 中为 Kotlin Multiplatform 配置 iOS 应用程序?

使用 Kotlin 语言在 Android Studio 中为文本设置渐变颜色

如何在多平台 Android 模块中配置 Kotlin jvmTarget?

在 Kotlin 中为成功和错误处理两种不同的改造响应

如何在intelliJ IDEA中为我现有的Kotlin项目生成build.gradle文件

在 Kotlin-js 中为 HTML 元素设置样式