1

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

例如,如果用户打开了 some Activities,则返回堆栈应该是:

  • 活动_A
  • 活动_B
  • Activity_C [当前显示]

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

  • 活动_A
  • Activity_B [当前显示]

而且,如果他再次按下按钮:

  • Activity_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我项目中的任何一个。

4

3 回答 3

0

您可以覆盖后退按钮事件,然后在活动之间移动,但活动 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);
}
于 2014-10-13T13:44:13.987 回答
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);
    }
}
于 2014-10-13T13:50:34.747 回答
-1

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

于 2014-10-13T13:37:10.747 回答