【问题标题】:How to trigger onClickListener for HorizontalScrollView?如何触发Horizo​​ntalScrollView的onClickListener?
【发布时间】:2014-02-17 12:11:00
【问题描述】:

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

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

我在这些链接中提出了多个问题,其中 1 个是“onClickListener for Horizo​​ntalScrollView”。我的那部分问题从未得到回答。

因此是一个完全排他性的问题。

【问题讨论】:

  • 你能问你的问题吗?仅在标题中询问,我希望无需打开多个链接即可查看更多详细信息。
  • @Stan: 描述没用....我只是想要代码触发 onCilckEvent
  • 您是否希望在您单击滚动视图中的任意位置或单击该滚动视图中的特定对象时触发侦听器?
  • 任何地方...点击我将视图插入到 HSV...所以任何地方
  • 请查看以下链接:Gallery-like HorizontalScrollView Horizontal Scroll View ScrollableTabHost 如果您遇到任何问题,请告诉我...

标签: android horizontalscrollview


【解决方案1】:

我想出了两种方法。

更简单(但不太理想)的一种:

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

【讨论】:

  • 正是我想要的。
  • 当我使用方法 2 并导入“GestureDetector”时,整个事情都会变红,并在 GestureDetector 上出现 --------- 行。 GestureDetector 没了?
【解决方案2】:

好吧,它现在发生在我身上,我来这里寻求解决方案,但在我的情况下,听 onClick 到它的子视图更容易......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    相关资源
    最近更新 更多