这个问题解释了我想要的一切。
HorizontalScrollView似乎是setOnClickListener()不会触发的唯一小部件。
注意:我无法使用onTouch事件,因为每次触摸都会触发4-5 次。
我也无法在其父视图中使用onTouch,因为父视图有许多具有不同功能的按钮。
以下说明并不重要:
但是,这些是我搜索过的现有链接(没有帮助):
horizontalscrollview onclicklistener doesn't get called
How to implement on click listener for horizontalscrollview
Click event of HorizontalScrollView
Android click event of items in HorizontalScrollView not respond after scroll
这些是我发布的链接(没有完全回答):
Insert views in HorizontalScrollView programatically
One of the ImageButton not clicking & make HorizontalScrollView clickable
我在这些链接中询问了多个问题,其中一个是“on HorizontalListener for HorizontalScrollView”。那部分问题从未得到解答。
因此是一个独家提问。
答案 0 :(得分:12)
我想出了两种方法。
更简单(但不太理想)的一个:
HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.scrollView);
scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
// Do stuff
}
return false;
}
});
当您单击,拖动或用手指做任何事情时,只会调用一次。但是,它也会对各种手势做出反应,因此如果您只想检测点击/点击事件,则需要进一步调查“事件”对象并过滤掉您不需要的事件。这可能比你想要的更多,所以你应该更好地使用GestureDetector为你做这件事。
这导致方法2:
HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.scrollView);
final GestureDetector detector = new GestureDetector(this, new OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// Do stuff.
return false;
}
// Note that there are more methods which will appear here
// (which you probably don't need).
});
scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return false;
}
});