如何为 recyclerView 上的两个不同事件设置监听器?

How to set listener for two diferent events on recyclerView?

我正在尝试为我的 recyclerview 适配器上的 cardview 实现两个不同的侦听器。我想我必须使用元素 id 来处理事件,但我不知道该怎么做。这是我的适配器视图持有者,我在其中调用其中一个侦听器并且工作正常。

class ProductListViewHolder(itemView: View, listener: OnItemClickListener ) : RecyclerView.ViewHolder(itemView) {

    var lytProductInfo: LinearLayout? = null
    var btnAddProduct: Button? = null

    init {
        
        lytProductInfo = itemView.findViewById(R.id.lytProductInfo)
        btnAddProduct = itemView.findViewById(R.id.btnAddProduct)

        lytProductInfo!!.setOnClickListener(View.OnClickListener {
            if (itemView.hasFocus()) {
                itemView.clearFocus()
                //hide keyboard when item has been clicked
                if (itemView is EditText) {
                    val imm = itemView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                    imm.hideSoftInputFromWindow(itemView.getWindowToken(), 0)
                }
            }
            val position = adapterPosition
            if (position != RecyclerView.NO_POSITION) {
                //click function
                listener.onClick(position)
            }
        })
    }
}

这就是我在 class

中的称呼
productListAdapter!!.setOnItemClickListener( object: ProductListAdapter.OnItemClickListener {
            override fun onClick(position: Int) {
                val saleId = productList[position].idProduct
            }

        override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            val saleId = productList[position].idProduct
        }
    })

第二个侦听器将来自 btnAddProduct。

我该怎么做?

您可以像这样从适配器创建回调,
在构造函数中创建一个参数,

class YourAdapter(val onYourCallback:(Int)-> Unit):RecyclerView.ViewHolder(itemView){
    
    
    }

像这样在适配器中调用它,

onYourCallback(position)

您可以像这样在您的 activity 中接收回调,

YourAdapter(){position->
 callYourFunctionHere()
}

在你的适配器上实现这个class

interface OnItemClickListener : AdapterView.OnItemClickListener {
        fun onInformationClicked(position: Int, v: View?)
        fun onAddClicked(position: Int, v: View?)
    }

然后在您的取景器上

lytProductInfo!!.setOnClickListener(View.OnClickListener { v ->
                val position = adapterPosition
                if (position != RecyclerView.NO_POSITION) {
                    listener.onInformationClicked(position, v)
                }
            })

        btnAddProduct!!.setOnClickListener(View.OnClickListener { v ->
            val position = adapterPosition
            if (position != RecyclerView.NO_POSITION) {
                listener.onAddClicked(position, v)
            }
        })

然后在你的 parent class

productListAdapter!!.setOnItemClickListener( object: ProductListAdapter.OnItemClickListener {
            
        override fun onInformationClicked(position: Int, v: View?) {
            showProductInfo()
        }

        override fun onAddClicked(position: Int, v: View?) {
            addProduct()
        }
    })