Android - onBackPressed()不起作用

7

我有一个针对Android 2.1的应用程序,并且我想要覆盖返回按钮。

我按照这里的例子进行:

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

我的代码如下:


    @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中,我甚至没有看到按钮按下的信息。

3个回答

11

您是否正在使用onKeyUp()

在Android 1.x中只需使用onKeyDown(),或在Android 2.x中使用onBackPressed()


4
一些快速搜索建议您在 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);
}

谢谢,现在它可以在2.x设备上运行了,但是它无法在我的1.6设备上运行,因为上述API仅从API级别5开始提供。 - Donal Rafferty

0

你应该调用父类的构造函数。

onKeyDown() 方法中调用。

super.onKeyDown();

而且在onBackPressed()

super.onBackPressed();

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