当按下手机上的后退键时,我想阻止一个特定的活动返回到它的前一个活动。

具体来说,我有登录和注册屏幕,当成功登录/注册发生时,都会启动一个名为HomeScreen的新活动。一旦启动了HomeScreen,我想阻止用户通过按BACK键返回登录或注册屏幕。

我尝试使用Intent。FLAG_ACTIVITY_NO_HISTORY,但由于应用程序有Facebook集成,当“登录与Facebook”使用时,Facebook应该返回到初始登录屏幕,因此我应该保留这些活动的历史。

我想过在主屏幕上重写BACK按钮的行为,当我按下该按钮时直接完成应用程序

@Override
public void onBackPressed() {
    finish();
}

但这也行不通。


当前回答

只需重写onKeyDown方法并检查返回按钮是否被按下。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    {
        //Back buttons was pressed, do whatever logic you want
    }

    return false;
}

其他回答

只需重写onKeyDown方法并检查返回按钮是否被按下。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    {
        //Back buttons was pressed, do whatever logic you want
    }

    return false;
}

以下解决方案在通常的登录/主活动场景或实现阻塞屏幕时非常有用。

为了最小化应用程序而不是回到以前的活动,你可以像这样重写onBackPressed():

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

moveTaskToBack(boolean nonRoot)留下你的后台堆栈,只是把你的任务(所有活动)在后台。与用户按Home键时相同。

参数boolean nonRoot -如果为false,则仅当活动是任务的根时有效;如果为真,它将适用于任务中的任何活动。

@Override
public void onBackPressed() {
}

当你创建onBackPressed()时,只需删除super.onBackPressed();这应该可以工作

如果您不想回到应用程序上的所有活动,可以使用

android:launchMode="singleTask"

更多信息请访问:http://developer.android.com/guide/topics/manifest/activity-element.html

把finish()放在后面

Intent i = new Intent(Summary1.this,MainActivity.class);
            startActivity(i);
finish();