Android onBackPressed避免退出

时间:2014-10-13 13:30:27

标签: android back-stack onbackpressed

当用户按下设备上的后退按钮时,我想移至上一个Activity但不要返回Home.

例如,如果用户打开了一些Activities,则后备堆应该是:

  • Activity_A
  • Activity_B
  • Activity_C [当前显示]

当用户按下Back button时,它应该得到:

  • Activity_A
  • Activity_B [当前显示]

然后,如果他再次按下按钮:

  • 活动_A [当前显示]

然后我想停用此按钮以避免返回Home screen

这可能吗?

到目前为止,我正在使用这种方法,但我读过Android L不支持它:

protected int getActivitiesStackSize()
{
    ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1);
    return taskList.get(0).numActivities; 
}

@Override
public void onBackPressed()
{
    // Pop activity
    if (getActivitiesStackSize() != 1) super.onBackPressed();
}

Activity_A可能是我项目中的任何Activity

3 个答案:

答案 0 :(得分:0)

您可以覆盖后退按钮事件,然后在活动A之间移动,但活动A除外,后退按钮仍应退出。示例

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {

        //Move to previous activity

        return true;
    }

    // If it wasn't the Back key, bubble up to the default
    // system behavior
    return super.onKeyDown(keyCode, event);
}

答案 1 :(得分:0)

试试这个:

  public boolean onKeyDown(int keyCode, KeyEvent event) {
    //Handle the back button
    if(keyCode == KeyEvent.KEYCODE_BACK && isTaskRoot()) {
        //Ask the user if they want to quit
        new AlertDialog.Builder(this)
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setTitle(R.string.quit)
        .setMessage(R.string.really_quit)
        .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                //Stop the activity
                finish();    
            }
        })
        .setNegativeButton(R.string.no, null)
        .show();

        return true;
    }
    else {
        return super.onKeyDown(keyCode, event);
    }
}

答案 2 :(得分:-1)

使用android:noHistory =&#34; true&#34;在您希望不导航到的活动的清单中。没有历史记录不会让活动存储在堆栈中。在Activity_B中按回应用程序将被关闭。如果这是您想要的,您可以使用此功能。