is view.setOnTouchListener(listener)多播?它是如何工作的?
问题描述:
我的问题是关于调用setOnTouchListener多次与相同或不同的侦听器的影响。is view.setOnTouchListener(listener)多播?它是如何工作的?
view.setOnTouchListener(myListener);
我知道这将最终在Motion Events的myListener类中调用“public boolean onTouch(View v,MotionEvent event)”方法。我不明白的是当我稍后调用这个时会发生什么:
view.setOnTouchListener(myOtherListener);
myListener是否仍然收到Motion Events?
另外,如果我打电话
view.setOnTouchListener(myListener的);
再次,它是否每次触摸事件调用myListener.onTouch两次?最后,你如何取消订阅作为听众?
我看了一下dev guide,但没有找到任何明确说明这个或类似的setListeners如何工作的内容,但是如果任何人有书签方便或知道这是如何工作的,它将不胜感激。
答
一般规则是当函数以“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 */
如果有添加剂的逻辑,你通常会看到函数名add
或register
前缀。例如,TextView.addTestChangedListener()
和Context.registerReceiver()
。