gpt4 book ai didi

android - 如何在适配器的 Kotlin 中提供长点击监听器

转载 作者:行者123 更新时间:2023-12-04 23:53:31 25 4
gpt4 key购买 nike

如何在 Adapter 中实现长按监听?我已经通过接口(interface)实现了 onClickLister。但是我不知道如何实现长点击监听。

这是适配器

class DokladAdapter(private val listener: OnItemClickListener): ListAdapter<DokladTuple, DokladAdapter.PolozkaViewHolder>(DiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PolozkaViewHolder {
val binding = DokladyItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return PolozkaViewHolder(binding)
}

override fun onBindViewHolder(holder: PolozkaViewHolder, position: Int) {
val currentItem = getItem(position)
if (currentItem != null) {
holder.bind(currentItem)
}
}

inner class PolozkaViewHolder(private val binding: DokladyItemBinding): RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener{
val position = bindingAdapterPosition
if (position != RecyclerView.NO_POSITION){
val item = getItem(position)
if (item != null){
listener.onItemClick(item)
}
}
}
}
fun bind(polozkaHlavicka: DokladTuple){
binding.apply {
tvU.text = "U"
tvDOKL.text = polozkaHlavicka.doklad.toString()
//tvODB.text = "200"
tvORG.text = polozkaHlavicka.odj.toString()
tvDATUM.text = polozkaHlavicka.datuct.toString()
}
}
}
interface OnItemClickListener{
fun onItemClick(polozkaHlavicka: DokladTuple)
}

class DiffCallback: DiffUtil.ItemCallback<DokladTuple>(){
override fun areItemsTheSame(oldItem: DokladTuple, newItem: DokladTuple) =
oldItem.doklad == newItem.doklad

override fun areContentsTheSame(oldItem: DokladTuple, newItem: DokladTuple) =
oldItem == newItem
}
}

我在 Activity 中有覆盖功能

class Activity: AppCompatActivity(), PolozkaAdapter.OnItemClickListener{
override fun onItemClick(polozkaDoklad: PolozkaTuple) {
//TODO - do something
}
}

最佳答案

使用 Kotlin,我就这样做了,没有添加监听器接口(interface),我发现它更具可读性且易于使用,这是我的示例,您可以将其调整为您的适配器和对象对于这个例子,我有一个 Cycle 对象,它是服装,你可以用你的来改变它我声明了两个变量

var onItemClick: ((Cycle) -> Unit)? = null
var onItemLongClick: ((Cycle) -> Unit)?= null

然后在 View 持有者中

init {
itemView.setOnClickListener{
onItemClick?.invoke(cycleList[adapterPosition])
}
itemView.setOnLongClickListener {
onItemLongClick?.invoke(cycleList[adapterPosition])
return@setOnLongClickListener true
}

}

我在任何地方都这样使用它:

    cycleAdapter= CycleAdapter(cycleList)
binding.cyclesRecyclerView.adapter=cycleAdapter
cycleAdapter.onItemClick={
Toast.makeText( requireContext(),it.cycleName, Toast.LENGTH_SHORT).show()
}
cycleAdapter.onItemLongClick={
Toast.makeText( requireContext(),it.cycleName, Toast.LENGTH_SHORT).show()
}

这里的“it”代表被点击的项目对象,对我来说它是被点击的循环

关于android - 如何在适配器的 Kotlin 中提供长点击监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68545458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com