Android - onBackPressed() 不工作

发布于 2024-09-15 10:41:28 字数 1124 浏览 7 评论 0原文

我有一个针对 Android 2.1 构建的应用程序,我想覆盖后退按钮。

我按照这里的示例:

http://android-developers.blogspot.com/2009_12_01_archive.html< /a>

我的代码如下:


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d("CDA", "onKeyDown Called");
            onBackPressed();
        }

        return true;
    }

    @Override
    public void onBackPressed() {
    Log.d("CDA", "onBackPressed Called");
        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent); 

        return;
    }   

它适用于 2.x 之前的设备,但不适用于 2.1 update-1 的 Hero 和 2.2 的 Nexus One。

我在这个例子中遗漏了什么吗?或者谁能​​指出为什么它不起作用?

我什至没有在 logcat 中按下按钮。

I have an application building against Android 2.1 and I want to override the back button.

I have followed the example here:

http://android-developers.blogspot.com/2009_12_01_archive.html

And my code is as follows:


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d("CDA", "onKeyDown Called");
            onBackPressed();
        }

        return true;
    }

    @Override
    public void onBackPressed() {
    Log.d("CDA", "onBackPressed Called");
        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent); 

        return;
    }   

It works on pre 2.x devices but doesn't work on a Hero with 2.1 update-1 and a Nexus One with 2.2.

Is there somwthing I am missing from the example? Or can anyone point out why it isn't working?

I dont even get the button pressed in the logcat.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迟到的我 2024-09-22 10:41:28

您使用的是onKeyUp()吗?

在 Android 1.x 中仅使用 onKeyDown() 或在 Android 2.x 中使用 onBackPressed()

Are you using onKeyUp()?

Use just onKeyDown() in Android 1.x or onBackPressed() in Android 2.x

韵柒 2024-09-22 10:41:28

一些快速搜索建议您应该在 onKeyUp() 期间放置 Back 拦截: http://developer .android.com/sdk/android-2.0.html。值得一试。
以下代码直接来自网站:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** DO ACTION HERE ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

Some quick searching suggests you should place the Back intercept during onKeyUp(): http://developer.android.com/sdk/android-2.0.html. It's worth a try.
The following code is directly from the site:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** DO ACTION HERE ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
埖埖迣鎅 2024-09-22 10:41:28

您应该调用父构造函数。

onKeyDown() 方法调用

super.onKeyDown();

onBackPressed()

super.onBackPressed();

You should call parent constructors.

In onKeyDown() method call

super.onKeyDown();

and in onBackPressed()

super.onBackPressed();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文