安卓系统中是否有默认的设备返回键监听器?

19

我有两个活动A和B。当我在A中点击按钮时,它会显示B;当我在B中点击按钮时,它回到A。我已经在finish()方法之后设置了overridePendingTransition方法,这样它可以正常工作。但是,如果当前活动是B,此时我点击设备上的默认返回按钮,它会显示从右到左的过渡效果以显示A活动。

我如何监听设备上的默认返回键?

编辑:

Log.v(TAG, "back pressed");
finish();
overridePendingTransition(R.anim.slide_top_to_bottom, R.anim.hold);
5个回答

45
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
以下链接是由安卓开发者亲自撰写的详细解释如何处理后退键事件:

Using the back key


你能否编辑你的问题,展示一下你目前遇到的代码?我们中的某个人可能能够帮助你。 - Jamie Keeling
只需将您的代码片段复制并粘贴到我的活动类中。只需将//do somthing on back替换为我的编辑代码片段(请参见问题)。 - Praveen
好的,它正常工作了。我们必须在类中指定要完成的活动。activity.this.finish(); 就这样。非常感谢。 - Praveen
链接中的 onBackPressed 代码对我来说完美运行。 - computercarguy
从片段怎么办? - JMB

29

对于 Android 2.0 及更高版本,Activity 类中有一种特定的方法:

@Override  
public void onBackPressed() {
    super.onBackPressed();   
    // Do extra stuff here
}

2
这是Android 2.x的首选方法。然而,对于早期版本的Android,您仍需要使用onKeyDown() - CommonsWare
无法工作... 我不能在 logcat 上打印语句。我已经尝试了两种方法。 - Praveen
我不知道什么时候改变了,但是“super.onBackPressed();”不再必要。 - computercarguy

2
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK){
        //Do stuff
    }

    return super.onKeyDown(keyCode, event);
}

0

我在一个带有媒体播放器的活动中使用这段代码。当用户按下返回按钮时,我需要停止播放,但仍然能够返回到先前的活动。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        try{
            mp.stop(); //this line stops the player
            return super.onKeyDown(keyCode, event);//this line does the rest 
        }
        catch(IllegalStateException e){
            e.printStackTrace();
        }
        return true;
    }

    return super.onKeyDown(keyCode, event); //handles other keys
}


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