2017-08-10 4 views
1

Wenn ich die Zurück-Taste auf meinem Android-Gerät drücke, schließt es die Aktivität, die ich gerade aktiviere. Ich muss verhindern, dass dies geschieht. Ich fand this Frage hier, auch fand ich this Dokumentation für dieses Ereignis und die Benennung ist anders, dann fand ich einen dritten Namen für das gleiche Ereignis here. Ich habe versucht, mit allen von ihnen, auch zugleich wie folgt aus:kann Androidback-Ereignis nicht erfassen

$.currentWindow.addEventListener("android:back",back); 
$.currentWindow.addEventListener("androidback",back); 
$.currentWindow.addEventListener("windows:back",back); 
$.currentWindow.addEventListener("windowsback",back); 

keiner von ihnen arbeitete, auch ich merkte, ich habe Titanium.UI.currentWindow.addEventListener("evt", callback) zu verwenden, aber Titanium.UI.currentWindow scheint undefiniert zu sein. Ich öffne mein Fenster wie folgt aus:

var nextWindow = core.createWindow({ 
    controllerName : "restaurantActivity" 
}); 
nextWindow.open(); 

Hier ist meine Callback-Funktion

function back(e) { 
    e.cancelBubble = true; 
    console.log(e.type); 
    if (Ti.App.pplatillo.length != 0) { 
     console.log("Confirm before exit."); 
     var dialog = Ti.UI.createAlertDialog({ 
      cancel : 1, 
      buttonNames : ["Sí", "No"], 
      message : "Tienes artículos en tu carrito y el pedido no se ha concretado, si sales perderás los artículos. ¿Seguro que desea salir?", 
      title : "Salir" 
     }); 
     dialog.addEventListener("click", function(e) { 
      if (e.index != e.source.cancel) { 
       Ti.App.pplatillo = []; 
       Ti.App.car = 0; 
       Ti.App.totalBill = 0; 
       $.window.close(); 
      } 
     }); 
     dialog.show(); 
    } else { 
     console.log("Just exit :("); 
     $.window.close(); 
    } 
} 

Jede Hilfe geschätzt wird.

Antwort

-1

Wie wäre es mit der Handhabung in der App? Verwenden Sie dies

+0

Ich habe vergessen, etwas sehr Wichtiges zu erwähnen. Ich benutze Javascript. Das ist kein Javascript richtig? (Ich bin nicht neu, aber ich habe das nie gesehen.) –

+0

Oh, mein Code ist, dass du es in deine MainActivity schreiben kannst. Ich habe eine Frage, also haben Sie eine App und Sie verwenden Webview? –

+0

@SakuraFukuyoshi die Technologie ist Titanium;) –

0

Wenn Sie Ihre aktuelle Aktivität beenden möchten, sollte nicht nach Drücken der Android-Schaltfläche zurück geschlossen werden. Sie müssen also die Zeile "$ .window.close()" aus Ihrer obigen "Zurück" -Funktion entfernen/kommentieren.

Danke,

+0

Das ist nicht das Problem, meine hintere Funktion sollte das Fenster schließen, aber zuerst muss der Benutzer fragen, ob er schließen möchte. Das Problem ist, dass die Funktion zurück nie auftritt, weil sie nie von dem Ereignis aufgerufen wird, und das ist, weil das Ereignis selbst nie abgefangen wird. –

0

Sie können den folgenden Ansatz versuchen:

$.MyControllerName.addEventListener("android:back", backCallbackFunctionHandler); 

In diesem Fall, wenn Sie die Zurück-Taste drücken, wird die backCallbackFunctionHandler Funktion aufgerufen zu werden. Darin können Sie ein Warndialogfeld anzeigen und mit Ja/Nein-Schaltfläche klicken, um die erforderliche Aktion auszuführen, um das Fenster zu schließen oder nicht zu schließen.

+0

Danke für deine Antwort, aber es hat nicht funktioniert. Ich bekomme '$ .MyControllerName' als undefined (offensichtlich verwende ich den tatsächlichen Namen des Controllers). –

0

Für zukünftige Referenzen, habe ich das Problem gelöst.

Was ich tat, war zu der Ansicht in der Ansicht der Ereignis-Listener hinzufügen, wo ich es öffnen, bevor es zu öffnen:

var nextWindow = core.createWindow({ 
    controllerName : "restaurantActivity" 
}); 

nextWindow.addEventListener("android:back",back); 

nextWindow.open(); 

Ich musste auch back in der gleichen Datei, die die Callback-Funktion setzen.

Verwandte Themen