android - 如何在 Kotlin 的 RecyclerView 上实现 longClickListen
问题描述
在搜索了几个小时的解决方案后,我可以实现 ItemClickListener,但由于某种原因,我不能使用相同的方法来实现 itomLongClickListener。它给了我“类型不匹配”错误:类型不匹配。必需:布尔值 找到:单位
如果您能指出我做错了什么,我将不胜感激。
下面是我的代码
class MyAdapter(ct: Context, s1: Array<String>, s2: Array<String>?):RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
var nameList: Array<String>? = null
var oneLineMessage: Array<String>? = null
var context: Context? = null
init {
nameList = s1
oneLineMessage = s2
context = ct
}
fun onClick(view :View){
val intent= Intent(context,SecondPage::class.java)
context?.startActivity(intent)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
var inflater = LayoutInflater.from(context)
var v = inflater.inflate(R.layout.my_row, parent, false)
return MyViewHolder(v)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.friendName?.text = nameList?.get(position)
if (oneLineMessage != null) {
holder.messagePreview?.text = oneLineMessage?.get(position)
} else {
holder.messagePreview?.visibility = View.GONE
}
holder.layout?.setOnClickListener(View.OnClickListener {
val intent= Intent(context,SecondPage::class.java)
context?.startActivity(intent)
})
}
override fun getItemCount(): Int {
return nameList?.size as Int
}
inner class MyViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
var friendName: TextView? = itemView.findViewById(R.id.nameText)
var messagePreview: TextView? = itemView.findViewById(R.id.messagePreview)
var layout: RelativeLayout? = itemView.findViewById(R.id.secondPageConstraintLayout)
init {
itemView.setOnClickListener{
val position=adapterPosition+1
Toast.makeText(context, "you chose $position", Toast.LENGTH_SHORT).show()
}
itemView.setOnLongClickListener(View.OnLongClickListener {
val position=adapterPosition+1
Toast.makeText(context, "you long pressed $position", Toast.LENGTH_SHORT).show() })
}
}
}
解决方案
View.OnLongClickListner
是一个接口boolean onLongClick(View v)
,这意味着你必须返回boolean
。
如果回调消耗了长按,则返回 true,否则返回 false。
show()
返回Unit
,这是您的 lambda 中的最后一行{}
所以如果你在你itemView
刚刚返回的时候消耗了长按true
itemView.setOnLongClickListener {
val position=adapterPosition+1
Toast.makeText(context, "you long pressed $position", Toast.LENGTH_SHORT).show()
true
}
推荐阅读
- angular - Kendo UI angular - 在条形图中旋转 x 轴的标签
- node.js - socket.io 的动态主题
- python - yaxis 上的 HourLocator() 引发运行时错误意外超过 Locator.MAXTICK
- python - Xception input_shape 通道
- informatica - 电子邮件变量只允许在会话的上下文中
- reactjs - 在反应本机网格视图中添加项目单击事件
- r - 组间比较 Mann-Whitney 检验
- solr - Solr Cloud:如何将文档(pdf、office)元数据禁用为字段
- powerbi-embedded - 需要单击小部件以使其在 Power BI Embedded 中获得焦点
- android - 即使在设置 setMinimumLatency 和 setOverrideDeadline 之后,计划的作业也不能正确重复