如何为 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()
}
})
我正在尝试为我的 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()
}
})