PhoneGap + jQueryMobile:Android后退按钮关闭嵌套列表中的应用程序

时间:2011-11-24 02:30:53

标签: jquery android cordova

我正在使用PhoneGap和jQuery Mobile创建一个应用程序。

使用jQuery Mobile我创建了一个嵌套列表。

点击进入嵌套列表后,我想回去。我希望点击Android设备上的后退按钮(Nokia N1),它会返回一个级别。

但是Android会关闭应用程序,而不是回到一个级别。

我正在使用PhoneGap 1.2.0,jQuery Mobile v1.0rc2,jQuery 1.6.4和Android 2.3.3(Gingerbread)。

我也升级到jQuery Mobile 1.0,没有任何变化。

6 个答案:

答案 0 :(得分:11)

您可以收听后退按钮事件:

document.addEventListener("backbutton", onBackKeyDown, false);

function onBackKeyDown() {
    // Handle the back button
}

如果当前页面是主页(jQuery Mobile中的$.mobile.activePage),请退出应用程序:

navigator.app.exitApp();

答案 1 :(得分:8)

我遇到了同样的问题。我发现了如何处理Java代码中的后退按钮。

如果可能,这将退回一步,否则退出应用程序。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
    if(appView.canGoBack()){
       appView.goBack();
        return true;
    }
  }
  return super.onKeyDown(keyCode, event);
}

也可以在JavaScript方面进行:

document.addEventListener("backbutton", function() {
    //Logic//
}, false);

答案 2 :(得分:2)

还可以尝试:

function onBackKeyDown(e) {
    e.preventDefault();

    if ($.mobile.activePage.attr('id') == 'main') {
         <!-- navigator.app.exitApp(); -->
         device.exitApp();
    }
    else {
         history.back(1);
    } 
}

答案 3 :(得分:2)

对于那些来到这里的人,因为应用程序在关注文本字段并按下backButton后关闭:

在Android 4.0.3(ICS)中,您不必使用PhoneGap API覆盖backButton,以便在聚焦输入文本字段然后按后退按钮后停止关闭/崩溃应用程序。通常这会关闭应用程序,因为WebKit正在创建一个带有附加轮廓的点按高亮显示,无法使用CSS更改。

当您对焦输入时,软键盘会出现。当您第一次按下backButton时,您的软键盘会消失。当您再次单击以返回导航历史记录时,应用程序正在关闭,而不是跳转到之前访问过的页面。这是因为突出显示跳出了导航结构。好像它不在DOM中。我真的不明白这种行为。这是解决方案:

添加

input {
-webkit-user-modify: read-write-plaintext-only
}

这会中断webkit进行点击突出显示,你仍然可以留在应用程序中,并可以使用你的(不是覆盖)backButton返回历史记录。

答案 4 :(得分:1)

我来到这里是因为Cordova / PhoneGap应用程序中的文本字段(inputtextarea)内的后退按钮问题不会触发正常行为(在我的情况下,它不会触发我的JavaScript处理程序。)

不幸的是,使用CSS的上述解决方案在Android 2.3上无效。

所选择的解决方案覆盖了Java中的事件,对我来说还不够,因为我需要触发一个JavaScript处理程序,而不是回到webview中。此外,此解决方案正在重新实现默认的Cordova行为,这不是最佳做法,因为它会丢失其他内置功能。<​​/ p>

所以,我所做的(并且它起作用)覆盖了KeyUp事件,如上所述,但我没有重新实现它,而是在appVIew上调用处理程序(这是Cordova的实现)。

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    return appView.onKeyUp(keyCode, event);
}

答案 5 :(得分:0)

这是使用PhoneGap之类的问题。他们以Android不起作用的方式构建应用程序。

后退按钮会弹出活动堆栈的最新活动。由于您有一个看起来像多个活动的整个应用程序,它实际上是一个带有叠加层的活动。你将要做的事情,并牢记这一点,这不是真正的做事方式。

你必须实际地覆盖后退按钮的功能才能让它回到jQuery堆栈中,然后一旦平面Android应用程序是唯一剩下的东西,那么也可以从那里回来。我不知道PhoneGap是否允许你对Android系统有那么多的控制权,但默认情况下,Android操作系统不能正常使用你的jQuery列表。

我希望这能提供一些见解。