【问题标题】:Is there anyway to remove an onTouchListener from a view object?无论如何要从视图对象中删除 onTouchListener 吗?
【发布时间】:2011-09-05 06:50:19
【问题描述】:

我有一个用于 webview 的 on touch 监听器,但它对 webview 的功能有不良影响,所以我想知道在初始交互后是否有移除 on touch 监听器?

【问题讨论】:

    标签: android webview touch listener


    【解决方案1】:
    webView.setOnTouchListener(null);
    

    【讨论】:

    • 是移除 on touch 监听器以便功能恢复正常,还是只是将监听器设置为 null 意味着 webview 在被触摸时不会做任何事情?
    • 感谢您的帮助,但我刚刚对其进行了测试,但仍然遇到相同的功能问题。 (例如,双击缩放不起作用)
    • 如何自定义 onTouchListener 并返回 false ??
    • 那么 webview 仍然认为它有一个 onTouchListener 并且不会执行它的默认功能。
    【解决方案2】:

    因此,在您的活动中,您将设置覆盖的 onTouchListener:

                mWebView.setOnTouchListener(new View.OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    v.setOnTouchListener(mWebView.mOnTouchListener);
                    return false;
                }
            });
    

    您必须创建一个新类,扩展 WebView。您可以在其中定义一个 OnTouchListener。

        public final OnTouchListener mOnTouchListener = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent rawEvent) {
            return false;
        }
    }; 
    

    将 ontouchlistener 设置为 null 不会将其重置为默认定义。您仍然需要提供一个实际的侦听器。

    【讨论】:

    • 很酷的想法,但你能详细说明新类如何与mWebView 交互吗? mWebView 是如何到达 mOnTouchListener 的?谢谢!
    • mWebView 不是标准的 Android Webview 控件。相反,它是您创建的自定义控件,它只是一个继承自 WebView 的新类。
    • 顺便说一句,如果您正在扩展View,例如WebView,则不需要实现触摸侦听器。 View 有一个您可以实现的内置方法:boolean onTouchEvent (MotionEvent event) { ... }。创建触摸侦听器的优点是您可以在某个其他类 中执行此操作,例如您已经定义的片段或活动。所以你不必创建另一个新类。
    • .. 但更重要的是对于原始问题,如果您子类 WebView,在您的 onTouchEvent 中,您将通过调用 @ 将事件传递给原始类987654329@ 每当您自己处理事件时。 “删除”有问题的触摸内容仅仅意味着您设置了一些您测试的标志来决定是否使用您的自定义代码。类似boolean onTouchEvent(MotionEvent event) { if (doMyCustomCode) { .. code here ..; return true; } else return base.onTouchEvent(event); }
    • .. 或者更好:boolean onTouchEvent(MotionEvent event) { boolean handled = false; if (doMycustomCode) { .. code here that sets handled=true after doing whatever, if it is an event that you respond to .. } if (handled) return true; else return base.onTouchEvent(event); }
    【解决方案3】:

    我在网上寻求帮助并找到了这篇文章。 当我这样做时

    myView.setOnTouchListener(null);
    

    我的myView 停止回复onTouch

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2011-01-08
      相关资源
      最近更新 更多