【问题标题】:cant catch androidback event无法捕获 androidback 事件
【发布时间】:2018-01-19 08:40:45
【问题描述】:

当我按下我的 Android 设备上的返回按钮时,它会关闭我当前正在进行的活动。我需要防止这种情况发生。我找到了this 问题在这里,我还找到了该事件的this 文档并且命名不同,然后我找到了同一事件的第三个名称here。我尝试了所有这些,即使同时像这样:

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

它们都不起作用,我也注意到我必须使用 Titanium.UI.currentWindow.addEventListener("evt", callback)Titanium.UI.currentWindow 似乎是未定义。我这样打开我的窗口:

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

这是我的回调函数

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();
    }
}

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript android titanium appcelerator back


    【解决方案1】:

    如果您想停止当前活动,则不应在按下 android 后退按钮时关闭。所以你必须从上面的“back”函数中删除/注释“$.window.close()”行。

    谢谢,

    【讨论】:

    • 这不是问题,我的后退功能应该关闭窗口,但首先它必须询问用户是否要关闭。问题是函数返回永远不会发生,因为它永远不会被事件调用,那是因为事件本身永远不会被捕获。
    【解决方案2】:

    您可以尝试以下方法:

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

    在这种情况下,只要您按下返回按钮,就会调用 backCallbackFunctionHandler 函数。在其中您可以显示一个警告对话框并处理是/否按钮单击以执行关闭或不关闭窗口所需的操作。

    【讨论】:

    • 感谢您的回答,但没有奏效。我得到$.MyControllerName 未定义(显然我使用的是控制器的实际名称)。
    【解决方案3】:

    为了以后的参考,我设法解决了这个问题。

    我所做的是在打开它之前将事件侦听器添加到我打开它的视图中:

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

    我还必须将回调函数back 放在同一个文件中。

    【讨论】:

      【解决方案4】:

      如何在应用内处理它?使用这个

       @Override
      public void onBackPressed() {
          super.onBackPressed();  
      }
      

      【讨论】:

      • 我忘了提一些非常重要的事情。我正在使用 JavaScript。那不是javascript吗? (我不是新手,但我从未见过。)
      • 哦,我的代码是你可以把它放在你的MainActivity中。我有一个问题,所以您确实有一个应用程序并且您正在使用 webview?
      • @SakuraFukuyoshi 技术是钛;)
      猜你喜欢
      • 2017-05-02
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2018-11-02
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多