如何为Horizo​​ntalScrollView触发onClickListener?

时间:2014-02-17 12:11:01

标签: android horizontalscrollview

这个问题解释了我想要的一切。

Horizo​​ntalScrollView似乎是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 Horizo​​ntalListener for Horizo​​ntalScrollView”。那部分问题从未得到解答。

因此是一个独家提问。

1 个答案:

答案 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;
        }
    });