4

我正在开发一个 HTML5 网络应用程序并用 Cordova (phonegap) 1.7 编译它。

我想覆盖 Android 后退按钮,以便我可以调用 window.history.back() 而不是关闭应用程序(默认 Android)。如何防止 Android 在按下后退按钮时杀死默认活动?

我得到“按下后退按钮!!!” 在 logcat 中,因此该方法在应用程序关闭之前被触发。

这是我到目前为止所拥有的:

        // Wait for Cordova to load
        //
        document.addEventListener("deviceready", onDeviceReady, false);

        // Cordova is ready
        //
        function onDeviceReady() {

            document.addEventListener("backbutton", function(e) {

                console.log("Back button pressed!!!!");                 
                window.history.back();


            }, false);

        }

编辑:如果可能的话,我愿意接受解释直接从 DefaultActivity.java android 类模拟 window.history.back() 的方法的答案!

4

3 回答 3

6

我通过将以下代码添加到文件中来解决我自己的问题DefaultActivity.java以防止默认的 android 行为,并保持问题中所述的 JavaScript 代码:

@Override
public void onBackPressed() {
   return;
}

我希望这可以帮助将来遇到同样问题的人!

于 2012-04-30T18:57:52.533 回答
2

我采用了这种方法。正如你所展示的,我钩住了后退按钮事件。我看看这是否是第一页,然后询问用户是否要退出程序。这取决于您希望程序根据其状态执行的操作。如您所示,我没有添加覆盖;我似乎不需要它。

if ($.mobile.activePage.attr('id') === 'firstpage') {
    // Prompt to confirm the exit
} else {
  window.history.back();
}

如果他们想退出,您可以致电:

navigator.app.exitApp();

关闭你的程序。

我想您仍然希望允许用户退出您的应用程序。我不倾向于使用不允许某种退出的应用程序。

希望这可以帮助你。

于 2012-05-17T20:14:04.353 回答
0

从来没有这样做过,但是,你试过return true吗?

就像在 Java SDK 中一样,如果您 return True,系统将假定您已正确捕获该事件,并且不再将其传递给其他事件侦听器。

于 2012-04-30T13:36:37.727 回答