Как запустить событие из родного модуля
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
даже стрельба, вы должны проверить это в первую очередь.