Я пытаюсь вызвать метод Java из своего кода Javascript. Это для приложения Windows Phone 7, использующего Phonegap.
У меня есть следующее в моем коде javascript.
document.addEventListener("backbutton", onBackKeyDown, false);
function onBackKeyDown(){
}
И в моем коде Java у меня есть следующее.
public static native void exportStaticMethod() /*-{
$wnd.onBackKeyDown =
$entry([email protected]::hideSettingsWidgets());
}-*/;
Затем в onModuleLoad() я вызываю это так:
MyApp.exportStaticMethod();
Это не работает. У меня есть предупреждение в hideSettingsWidgets()
, но оно никогда не отображается.
*EDIT* Вот еще немного кода. EventListener не добавляется в Javascript. Он специально добавлен в код Java. Я не мог заставить слушателей зарегистрироваться изначально, поэтому вот что я добавил.
public static native void removeBackListener() /*-{
$wnd.removeTheListener();
}-*/;
И в моем JavaScript
function removeTheListener(){
document.removeEventListener("backbutton", onBackKeyDown, false);
}
Вот мой звонок hideSettingsWidgets()
public void hideSettingsWidgets(){
for(int i=0;i<settingsScreenWidgets.length;i++){
settingsScreenWidgets[i].setVisible(false);
}
alertString("Working");
removeBackListener();
}
И я вызываю метод, который вы мне дали внутри showSettingsWidgets()
p
rivate void showSettingsWidgets(){
for(int i=0;i<settingsScreenWidgets.length;i++){
settingsScreenWidgets[i].setVisible(true);
}
setCurrentImage();
setOnOffImage();
setupJavaHandler();
}
Кажется, он добавляет EventListener, который находится внутри вашего
public native void setupJavaHandler() /*-{
var app = this;
var onBackKeyDown = $entry(function() {
[email protected]::hideSettingsWidgets();
});
$doc.addEventListener("backbutton", onBackKeyDown, false);
}-*/;
Поэтому я не уверен, где я ошибаюсь. Я не добавлял упомянутый вами ArrayList‹>, потому что не был уверен в этом, а прослушиватель событий не запускался при загрузке страницы.
Похоже, showSettingsWidgets()
так и не запустили