【发布时间】:2020-06-28 15:10:00
【问题描述】:
我有一个实现onClick()、onLongClick() 和onTouch() 的视图(它是RecyclerView 中的ViewHolder,但我认为它不会有任何区别)。我面临的问题是 longClick 永远不会被执行。我在其他问题中读到了它,但我不知道该怎么做,什么时候应该在onTouch() 中返回true \ false。这是我的代码;
实现View.OnTouchListener的ViewHolder类中的函数bind():
binding.background.setOnClickListener {
Log.d("Click")
}
binding.background.setOnLongClickListener {
Log.d("Long Click")
}
binding.background.setOnTouchListener(this) // here I see warning "Custom view `ConstraintLayout` has setOnTouchListener called on it but does not override performClick"
覆盖 onTouch()
override fun onTouch(v: View?, event: MotionEvent?): Boolean
{
return when (event!!.action)
{
MotionEvent.ACTION_DOWN ->
{
x1 = event.x
true
}
MotionEvent.ACTION_UP ->
{
x2 = event.x
return if (abs(x2 - x1) > MIN_DISTANCE)
{
Log.d("Was swiped")
true
}
else
{
Log.d("Wasn't swiped")
v?.performClick()
false
}
}
else -> false
}
}
这个函数只检测视图上的滑动。我应该在onTouch() 中更改什么以使longClick 工作?另外,有没有更简单的方法来检测 RecyclerView 项目上的滑动?
【问题讨论】:
-
如果你覆盖触摸,我认为这会拦截相同的事件,否则会去点击或长按。 ??????
-
@EpicPandaForce 我想是的,但有什么办法可以让
longClick和onTouch在同一个视图上?
标签: android kotlin onclicklistener ontouchlistener onlongclicklistener