是view.setOnTouchListener(监听器)多播?它是如何工作的?

时间:2011-09-20 06:29:22

标签: android view

我的问题是关于使用相同或不同的侦听器多次调用setOnTouchListener的效果。

  

view.setOnTouchListener(myListener的);

据我所知,这最终会在Motion Events上的myListener类中调用“公共布尔onTouch(View v,MotionEvent事件)”方法。我不明白的是当我后来称之为:

  

view.setOnTouchListener(myOtherListener);

myListener是否仍然接收动作事件?

另外,如果我打电话

  

view.setOnTouchListener(myListener的);

再次,它是否在每次触摸事件中调用myListener.onTouch两次?最后,你如何取消订阅作为听众?

我查看了dev guide,但没有找到任何明确地说出这个或类似的setListeners如何工作的东西,但是如果有人有一个方便的书签或知道这是如何工作,我将不胜感激。

1 个答案:

答案 0 :(得分:10)

一般规则是当函数以“set”开头时它取代了以前的监听器。如果要取消注册侦听器,请使用view.setOnTouchListener(null);

 view.setOnTouchListener(myListener); 
 /* myListener is active */
 view.setOnTouchListener(myOtherListener); 
 /* myListener is inactive, myOtherListener is active */
 view.setOnTouchListener(myListener);
 /* myListener is active, myOtherListener is inactive */

如果存在加法逻辑,您通常会在函数名称中看到addregister前缀。例如,TextView.addTestChangedListener()Context.registerReceiver()