Android 实现ActionBar向上按钮

Android 实现ActionBar向上按钮,android,android-activity,android-actionbar,Android,Android Activity,Android Actionbar,我正在使用以下方法实现ActionBar中的Up按钮: 除了一种情况外,它工作正常:如果活动A创建活动B,然后我按下向上键,它将导航到A,没有问题 但是,当我进入活动B,然后切换到另一个应用程序,然后切换回我的应用程序,现在我按下向上按钮,它会将我导航到主屏幕,而不是活动A 当我调试时,我可以看到NavUtils.shouldUpRecreateTask(这个,upIntent)在这两种情况下都返回false,并且对于这两种情况,upIntent实际上也是活动A。所以我不确定问题出在哪里 @S

我正在使用以下方法实现ActionBar中的Up按钮:

除了一种情况外,它工作正常:如果活动A创建活动B,然后我按下向上键,它将导航到A,没有问题

但是,当我进入活动B,然后切换到另一个应用程序,然后切换回我的应用程序,现在我按下向上按钮,它会将我导航到主屏幕,而不是活动A

当我调试时,我可以看到NavUtils.shouldUpRecreateTask(这个,upIntent)在这两种情况下都返回false,并且对于这两种情况,upIntent实际上也是活动A。所以我不确定问题出在哪里

@SuppressLint("NewApi")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    if (itemId == android.R.id.home) {
        Intent upIntent = NavUtils.getParentActivityIntent(this);
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
            // This activity is NOT part of this app's task, so create a new task
            // when navigating up, with a synthesized back stack.
            TaskStackBuilder.create(this)
                    // Add all of this activity's parents to the back stack
                    .addNextIntentWithParentStack(upIntent)
                    // Navigate up to the closest parent
                    .startActivities();
        } else {
            // This activity is part of this app's task, so simply
            // navigate up to the logical parent activity.
            NavUtils.navigateUpTo(this, upIntent);
        }
        //finish();
        return true;
    } else if (itemId == R.id.wrap_menu_item) {
        wrapText();
        invalidateOptionsMenu();
        return true;
    } else {
        return super.onOptionsItemSelected(item);
    }
}

已将活动更改为属性

android:launchMode="singleInstance"


解决了这个问题。之所以有意义,是因为“单实例”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动另一个活动,则该活动将分配给不同的任务。所以Up之前工作的唯一原因是因为活动A“在”前一个活动的下面:它给人一种错觉,以为它要回到前一个活动。

将活动A的属性从

android:launchMode="singleInstance"


解决了这个问题。之所以有意义,是因为“单实例”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动另一个活动,则该活动将分配给不同的任务。所以Up之前工作的唯一原因是因为活动A“在”前一个活动的下面:它给人一种错觉,以为它要回到前一个活动。

请原谅我的无知,但我认为Android会根据活动历史自动处理启动操作?而不是根据这么多小的东西在Android中编码以保持一切正常。您能否从问题中的选项ItemSelected中共享代码。那会有帮助的。你宣布活动A为活动B的父项了吗?请原谅我的无知,但我认为Android会根据活动历史自动处理up操作?不是根据这么多小事情在Android中编码以保持一切正常。您能否从问题中的选项ItemSelected中共享代码。这会有帮助。您是否已将活动A声明为活动B的父级?