Exemplo n.º 1
0
  /**
   * {@inheritDoc} {@linkplain com.camnter.robotlegs4android.core.IEventMap #mapListener} The same
   * as calling <code>addEventListener</code> directly on the <code>IEventDispatcher</code>, but
   * keeps a list of listeners for easy (usually automatic) removal.
   * 和直接在IEventDispatcher上调用addEventListener一样,但保持简单的侦听器列表(通常是自动)。
   *
   * @param dispatcher The <code>IEventDispatcher</code> to listen to
   * @param type The <code>Event</code> type to listen for
   * @param listener The <code>Event</code> handler
   * @param eventClass Optional Event class for a stronger mapping. Defaults to <code>Event</code>.
   *     可选事件类更强的映射。默认值为Event
   * @param useCapture |false
   * @param priority |0
   * @param useWeakReference |true
   */
  @Override
  public void mapListener(
      IEventDispatcher dispatcher,
      String type,
      IListener listener,
      Class<?> eventClass,
      Boolean useCapture,
      int priority,
      Boolean useWeakReference) {
    if ((!this.getDispatcherListeningEnabled()) && (dispatcher == this.eventDispatcher)) {
      throw new ContextError(ContextError.E_EVENTMAP_NOSNOOPING);
    }
    if (eventClass == null) {
      eventClass = Event.class;
    }
    Params params;
    int i = this.listeners.size();

    while (i-- > 0) {
      params = (Params) this.listeners.get(i);
      if ((params.dispatcher == dispatcher)
          && params.type.equals(type)
          && (params.listener == listener)
          && (params.useCapture == useCapture)
          && (params.eventClass == eventClass)) return;
    }
    IListener callback = new Callback(listener, eventClass);
    params = new Params();
    params.dispatcher = dispatcher;
    params.type = type;
    params.listener = listener;
    params.useCapture = useCapture;
    params.eventClass = eventClass;
    params.callback = callback;
    this.listeners.add(params);
    dispatcher.addEventListener(type, callback, useCapture, priority, useWeakReference);
  }