[英]How to provide long click listener in Kotlin in Adapter
How can I implement long click listener in Adapter?如何在 Adapter 中实现长按侦听器? I have already implemented onClickLister by interface.我已经通过接口实现了 onClickLister。 But I don't know how to implement long click listener.但我不知道如何实现长按侦听器。
This is Adapter这是适配器
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
}
}
I have override function in Activity我在活动中有覆盖功能
class Activity: AppCompatActivity(), PolozkaAdapter.OnItemClickListener{
override fun onItemClick(polozkaDoklad: PolozkaTuple) {
//TODO - do something
}
}
Update your OnItemClickListener
to include a long click handler as更新您的OnItemClickListener
以包含一个长按处理程序作为
interface OnItemClickListener{
fun onClick(polozkaHlavicka: DokladTuple)
fun onLongClick(polozkaHlavicka: DokladTuple)
}
Now in PolozkaViewHolder
init
, add longClickListener
as现在在PolozkaViewHolder
init
,将longClickListener
添加为
binding.root.setOnLongClickListener{
// get position data and call long click handler
//listener.onLongClick()
true
}
finally update the implementation of OnItemClickListener
in Activity
for onLongClick
最后更新实施OnItemClickListener
在Activity
的onLongClick
using Kotlin , i do it like that without adding listeners interfaces , i found it more readable an easy to use, here is my example and you can adjust it to your adapter and objects for this example i have a Cycle object it's costume you can change it with yours i declare two variables使用 Kotlin ,我这样做没有添加侦听器接口,我发现它更具可读性且易于使用,这是我的示例,您可以将其调整为您的适配器和此示例的对象我有一个 Cycle 对象,它是您可以更改的服装它和你的我声明两个变量
var onItemClick: ((Cycle) -> Unit)? = null
var onItemLongClick: ((Cycle) -> Unit)?= null
then in the view holder然后在视图持有者中
init {
itemView.setOnClickListener{
onItemClick?.invoke(cycleList[adapterPosition])
}
itemView.setOnLongClickListener {
onItemLongClick?.invoke(cycleList[adapterPosition])
return@setOnLongClickListener true
}
}
and i use it like that anywhere :我在任何地方都这样使用它:
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" here stand for the clicked item object for me it's the clicked Cycle “它”在这里代表我点击的项目对象,它是点击的循环
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.