【发布时间】:2021-10-03 07:30:44
【问题描述】:
如何在 Adapter 中实现长按监听?我已经通过接口实现了 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
}
}
【问题讨论】:
-
除了使用
setOnLongClickListener而不是setOnClickListener之外,以完全相同的方式进行操作。您需要第二个界面。 -
所以在 binding.root 初始化块中,我可以创建第二个 binding.root.setOnLongClickListener。我说的对吗?
-
是........
标签: android kotlin android-recyclerview onclicklistener onlongclicklistener