如何以编程方式在Android中按下后退按钮?


78

在我的应用程序中,我具有注销功能。如果用户单击注销,它将转到主屏幕。现在,我通过按“后退”按钮退出我的应用程序。但是我想要的是我需要像退出按钮功能一样自动(即以编程方式)退出。我知道通过调用finish()可以完成此功能。但是,事情要转到上一个活动。


即使您按下返回按钮,也会显示以前的活动……
塔伦(Tarun)2012年

8
只需使用finish();
VJ 2012年

1
@Tarun我正在使用此代码清除所有历史记录ExitActivity.this.finish(); Intent intent1 = new Intent(ExitActivity.this,PinActivity.class); intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent1);
vinothp

@ user1216003您的方法正确。您可以将后退按钮设置为意图,与返回按钮相同。
VJ 2012年

Answers:


121

onBackPressed()受支持,因为:API级别5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        onBackPressed();
    }
}

@Override
public void onBackPressed() {
    //this is only needed if you have specific things
    //that you want to do when the user presses the back button.
    /* your specific things...*/
    super.onBackPressed();   
}

3
这有什么意义呢?您正在编写android默认情况下的功能。当按下后退按钮时,它将调用onBackPressed()。
drulabs 2012年

3
@KKD,如果您必须支持低于5的API,则必须使用上述代码。.android
塔伦(Tarun)

1
然后onBackPressed可以使用...在onBackPressed()中启动ExitIntent
塔伦

1
感谢您的评论,我不使用后退按钮..我使用注销按钮..当用户单击它时,弹出对话框询问是或否..如果是,它将转到主屏幕,我必须自动退出,但我被卡在那里...这是需要的,因为我正在我的应用程序中使用警报功能..每当警报弹出消息时,主屏幕就会显示该消息的背景..所以我需要删除它,这就是我正在尝试的内容
vinothp

我在某些平板电脑上遇到过onBackPressed()问题,例如在崩溃中。
Demonick

41

您不需要覆盖onBackPressed()-它已经定义为用户按下后退按钮时默认情况下您的活动将执行的操作。因此,onBackPressed()只要您想“以编程方式按下”后退按钮,就可以致电。

那只会导致 finish()被调用;)

我认为您对后退按钮的功能感到困惑。默认情况下,这只是对finish(),因此它仅退出当前活动。如果您在该活动之后还有其他事情,则会显示该屏幕。

您可以做的是从登录名启动活动时,添加一个CLEAR_TOP标志,这样退出活动时就不会出现登录活动。


嗨,谢谢您的回答。听起来不错,但是我尝试过您的方法再次出现在相同的登录屏幕中。.您能帮我这个
忙吗

1
这是正确的答案,但是您应该对其进行编辑,因为它并不总是“仅仅是对finish()的调用”。就我而言(它完全按照我的预期工作)是一种在片段堆栈中向后移动的方法,并且直到您到达该堆栈中的第一个项目时才调用finish()。
叶夫根尼·辛金

9

有时,重写onBackPressed()方法很有用,因为如果您使用片段,并且在您按下后退按钮时在它们之间进行切换,则它们会返回到上一个片段。


1
这是正确的,值得更多投票。
叶夫根尼·辛金

5

onBackPressed在您的活动中覆盖它后调用。


2
谢谢您的评论。OnBackPressed我可以在按下后退按钮时插入代码。我想要的是我想自动调用后退按钮...我清楚了

做一件事...无论您要调用什么地方,只要您要调用,都只需调用此函数。您可以根据标志或所需的任何事件在onCreate内调用它。
drulabs 2012年


0

只需添加finish(); 在您的第一堂课(登录活动)中onPause(); 方法。就这样

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.