【发布时间】:2019-01-01 16:14:56
【问题描述】:
我一直在在线和 StackOverflow 上搜索如何在 onTouchListener 中执行操作,如果事件是点击,而不是任何形式的动作,但我无法找到答案以及我的试过了也不管用。我有一个ListViewAdapter,在getView 方法中,我在listItem 上设置了onTouchListener。
我想要做的是当listItem 被点击时,我想显示一个Toast,但如果事件是一个拖动(就像用户滚动列表) em>,我不想显示Toast。
以下是我尝试过的代码。 (makeToast 是一个用于创建 Toast 的函数,events.getRelation() 是我想要在 Toast 中拥有的字符串。):
listItem.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_HOVER_ENTER) {
makeToast(events.getRelation());
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// makeToast(events.getRelation());
} else if (event.getAction() == MotionEvent.ACTION_SCROLL) {
// makeToast(events.getRelation());
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
// makeToast(events.getRelation());
} else if (event.getAction() == MotionEvent.AXIS_SCROLL) {
// makeToast(events.getRelation());
} else if (event.getAction() == MotionEvent.AXIS_VSCROLL) {
// makeToast(events.getRelation());
} else {
//makeToast(events.getRelation());
}
return false;
}
});
我已经尝试在不同类型的MotionEvents 下使用makeToast 方法,但我仍然没有得到我想要的结果,因为Toast 根本没有创建,或者它是在我创建的时候创建的滚动,而不是点击。有人能帮我解决这个问题吗?我觉得这是一个简单的问题,但我一直找不到解决方案
【问题讨论】:
-
这个问题与实现
onTouch和onClick有关,因为onClick永远不会在onTouch之后调用。我的问题是区分滚动和点击以在点击上创建Toast。 -
我同意其他用户希望能够检测到
onTouch()中的点击/点击的原因与您的不同。但是由于你们俩都想实现相同的事情,请解释为什么其他帖子的答案对您的情况没有帮助。 (IMO 接受的自我回答并不是很好,但有不止一个其他答案解释了如何评估 DOWN 和 UP 之间的时间以做出决定) -
感谢 0X0nosugar。那篇文章的第二个答案帮助了我。在您发布之前我无法找到答案,所以谢谢。
标签: android listview touch listitem motionevent