Как запустить событие из родного модуля

CLI версии 3.2.3, Titanium SDK версии 3.2.2.GA

Я использую внешний JAR-файл и пытаюсь заставить его работать в родном модуле, чтобы родной модуль можно было использовать с титаном

я не могу запустить событие из обработчика

у меня есть два класса в родном модуле clsModule и обработчик

clsModule.java

import ext.Extclient;

@Kroll.module(name="extclient", id="ti.extclient")
public class clsModule extends KrollModule{

private Handler h ;
Extclient ext ;

public clsModule()
    {
    super();
    ext = new Extclient();
     h = new Handler(this);
    im.addHandler(h);
    }
}

Handler.java

import ext.ResponseHandler;

public class Handler implements ResponseHandler 
    {

public void OnConnected(String arg0, String arg1) {
HashMap<String, Object> event = new HashMap<String, Object>();
    event.put("u1", arg0);
    event.put("u2", arg1);

    //How do i fire a event here ?

    }
}

я попытался с fireEvent, но это не сработало, это дает ошибку, что это не определено.

1 ответ

Решение

Ваш модуль (как и все модули) расширяет KrollModule, который расширяет KrollProxy, который обрабатывает события. Ваш класс Handler не имеет доступа к этому объекту, поэтому он не может инициировать само событие, однако вы уже передаете эту ссылку (new Handler(this)) так что просто используйте это!

import ext.ResponseHandler;

public class Handler implements ResponseHandler {
    private KrollModule proxy; // Hold onto this reference
    public Handler(KrollModule proxy) {
        this.proxy = proxy;
    }

    public void OnConnected(String arg0, String arg1) {
        // Fire event if anyone is listening
        if (proxy.hasListeners("colorChange")) {
            HashMap<String, Object> event = new HashMap<String, Object>();
            event.put("u1", arg0);
            event.put("u2", arg1);
            proxy.fireEvent("colorChange", hm);
        }
    }
}

Это общая идея, передать прокси для запуска события самому классу, альтернативой будет встроить анонимную реализацию ResponseHandler вместо этого внутри вашего модуля. Я не уверен, правильно ли вы реализуете ResponseHandler или OnConnected даже стрельба, вы должны проверить это в первую очередь.

Другие вопросы по тегам