【发布时间】:2019-06-29 18:48:21
【问题描述】:
我正在尝试在适配器中使用 setOnClickListener 和 setOnLongClickListener 将点击传递给活动。我已经搜索了很多,但我只找到了一些关于如何做一个 clicklistener 但不能同时处理两个的例子。
如何处理活动中的两个侦听器?
适配器
class BrowserAdapter(private val voucherList: List<String>?, private val listener: (String) -> Unit) : RecyclerView.Adapter<BrowserAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(inflate(parent.context, R.layout.item_web, parent, false))
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind(voucherList!![position], listener)
}
override fun getItemCount(): Int {
return voucherList!!.size
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(urlData: String, listener: (String) -> Unit) = with(itemView) {
tx_url.text = urlData
itemView.setOnClickListener{
listener(urlData)
}
itemView.setOnLongClickListener{
listener(urlData)
true
}
}
}
}
活动
rv_web_items.adapter = BrowserAdapter(Preferences.getFavouritesWebsites()) {
presenter.onItemClick(it)
}
【问题讨论】:
-
只需传递一个
boolean即可进行长按和onClick -
我试图在 MyViewHolder 中传递一个像这样的布尔值 (listener(urlData, true)),但代码在 Activity (presenter.onItemClick(it)) 中崩溃,无法解析引用 'it'。请您输入一些代码来说明如何操作
标签: android kotlin android-recyclerview