为什么我不能在这个 recyclerview 适配器中设置 setOnLongClick?
why can't I set a setOnLongClick in this recyclerview adapter?
问题:我还没有找到可行的解决方案,并允许我在我的 recyclerview 适配器中使用 onLongClickListener
我知道我的选择似乎是实现一个接口或使用 lambda,但是我一直在尝试我能找到的一切,并且 none 它们正在工作。
我尝试过以下解决方案的地方:
Item Onclick RecyclerView Kotlin Android
RecyclerView onClick in kotlin
以及在谷歌搜索“kotlin recyclerview onClickAdapter”时我能找到的所有其他内容
我在每个解决方案中都遇到了不同的错误,但主要的收获是 none 它们都在工作,这告诉我我的适配器代码可能有问题。
我得到的一个错误示例:如果我尝试在 TaskViewHolder
的 bind
函数中使用 setOnClickListener
,我会得到
的错误
Wrong return type, expecting Boolean, received Unit
没有传入列表,因为我使用带有房间数据库的视图模型中的 submitList
适配器代码基于 Room with a View code
我有
适配器代码:
class TaskRvAdapter : ListAdapter<Task, TaskRvAdapter.TaskViewHolder>(TaskComparator()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {
return TaskViewHolder.create(parent)
}
override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
val current = getItem(position)
holder.bind(current.task)
}
class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val taskItemView: TextView = itemView.findViewById(R.id.task_rv_item)
fun bind(text: String?) {
taskItemView.text = text
}
companion object {
fun create(parent: ViewGroup): TaskViewHolder {
val view: View = LayoutInflater.from(parent.context)
.inflate(R.layout.task_rv_item, parent, false)
return TaskViewHolder(view)
}
}
}
class TaskComparator : DiffUtil.ItemCallback<Task>() {
override fun areItemsTheSame(oldItem: Task, newItem: Task): Boolean {
return oldItem === newItem
}
override fun areContentsTheSame(oldItem: Task, newItem: Task): Boolean {
return oldItem.task == newItem.task
}
}
}
尝试使用此代码,格式正确
fun bind(text: String?) {
taskItemView.text = text
itemView.setOnClickListener {
Log.i("TaskRvAdapter", "item clicked: "+text)
}
itemView.setOnLongClickListener{
Log.i("TaskRvAdapter", "item long clicked: "+text)
return@setOnLongClickListener true
}
}
问题:我还没有找到可行的解决方案,并允许我在我的 recyclerview 适配器中使用 onLongClickListener
我知道我的选择似乎是实现一个接口或使用 lambda,但是我一直在尝试我能找到的一切,并且 none 它们正在工作。
我尝试过以下解决方案的地方:
Item Onclick RecyclerView Kotlin Android
RecyclerView onClick in kotlin
以及在谷歌搜索“kotlin recyclerview onClickAdapter”时我能找到的所有其他内容
我在每个解决方案中都遇到了不同的错误,但主要的收获是 none 它们都在工作,这告诉我我的适配器代码可能有问题。
我得到的一个错误示例:如果我尝试在 TaskViewHolder
的 bind
函数中使用 setOnClickListener
,我会得到
Wrong return type, expecting Boolean, received Unit
没有传入列表,因为我使用带有房间数据库的视图模型中的 submitList
适配器代码基于 Room with a View code
我有
适配器代码:
class TaskRvAdapter : ListAdapter<Task, TaskRvAdapter.TaskViewHolder>(TaskComparator()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {
return TaskViewHolder.create(parent)
}
override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
val current = getItem(position)
holder.bind(current.task)
}
class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val taskItemView: TextView = itemView.findViewById(R.id.task_rv_item)
fun bind(text: String?) {
taskItemView.text = text
}
companion object {
fun create(parent: ViewGroup): TaskViewHolder {
val view: View = LayoutInflater.from(parent.context)
.inflate(R.layout.task_rv_item, parent, false)
return TaskViewHolder(view)
}
}
}
class TaskComparator : DiffUtil.ItemCallback<Task>() {
override fun areItemsTheSame(oldItem: Task, newItem: Task): Boolean {
return oldItem === newItem
}
override fun areContentsTheSame(oldItem: Task, newItem: Task): Boolean {
return oldItem.task == newItem.task
}
}
}
尝试使用此代码,格式正确
fun bind(text: String?) {
taskItemView.text = text
itemView.setOnClickListener {
Log.i("TaskRvAdapter", "item clicked: "+text)
}
itemView.setOnLongClickListener{
Log.i("TaskRvAdapter", "item long clicked: "+text)
return@setOnLongClickListener true
}
}