安卓DroidGap禁用返回按钮

10

请问有人能建议我在使用PhoneGap时如何禁用返回按钮按下事件?

我需要在我的Activity(即DroidGap代码)中做些控制返回按钮事件的事情。

尽管以下代码在我的Activity中有效,但在与DroidGap一起使用时却无效。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
         //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
         return true;
     }
     return super.onKeyDown(keyCode, event);    
}
5个回答

7

appView上调用setOnKeyListener对我很有帮助。

我只需要对上面的代码片段进行微小的更改,如下所示:

appView.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return true;
        }
        return onKeyDown(keyCode, event); 
    } 
});

编辑

在按键事件中实际上会发生两个动作 - 按下动作松开动作

因此,应使用以下内容以获取按键事件。

appView.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
            // Do Here whatever you want 
            return true;
        }
        return onKeyDown(keyCode, event); 
    } 
});

@PnestecDev:你是否试图在返回按钮点击时执行某些操作? - Narendra Singh
是的,我正在尝试在后退点击时导航页面。 - TechFanatic
@NarendraDroidWorm 我按照您的答案实现了...并且事件在单击设备返回按钮时被触发...当我单击设备返回按钮时,什么也不应该发生...您能否帮助我如何达到这个目的? - Avadhani Y
只需注释/删除您在后退按钮单击事件上执行的操作即可。 - Narendra Singh
请从条件中删除 -- event.getAction() == KeyEvent.ACTION_UP。 - Narendra Singh

5
略微优于 Narendra 版本。它可以正确处理除返回按钮以外的按键的键上调用。例如,将以下代码放在 onCreate 覆盖中即可。
appView.setOnKeyListener(new View.OnKeyListener() { 

        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_UP) {
                if(keyCode == KeyEvent.KEYCODE_BACK) {
                    // Do Stuff Here
                    return true;
                }
                return onKeyUp(keyCode, event);
            }
            return onKeyDown(keyCode, event); 
        } 
   });

2

在我的情况下,我使用JavaScript + jQuery,如下所示:

$(document).on('backbutton',
     function(e){

         e.preventDefault();

         // do whatever you like here.

});

无法工作。在Android(Motorola Razor)上使用jQ 1.8.3 + jQM 1.3.2。 - Daniel

0
if (keyCode == KeyEvent.KEYCODE_BACK) {

    return true;
}

0
// ************ stop the back button  *****************

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        return true;
    }
    return super.onKeyDown(keyCode, event);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接