首页 > 解决方案 > 如何始终在返回按钮上返回相同的活动?

问题描述

我有一个带有菜单的主要活动。菜单项导致其他活动。我正在尝试实现它,以便当我从菜单开始一个新活动时,按下后退按钮后,无论之前打开了多少其他活动,应用程序都会返回到主活动。

我曾尝试使用 CLEAR_TOP 标志,但这并不能解决问题。

menuItem.setOnClickListener(v -> {
        Intent i = new Intent(AppMenuActivity.this, SomeActivity.class);
        overridePendingTransition(0, 0);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        resideMenu.closeMenu();
    });

标签: javaandroidandroid-activity

解决方案


来自FLAG_ACTIVITY_CLEAR_TOP android 文档:

FLAG_ACTIVITY_CLEAR_TOP

public static final int FLAG_ACTIVITY_CLEAR_TOP

如果它已声明其启动模式为“多重”(默认)并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建;对于所有其他启动模式,或者如果设置了 FLAG_ACTIVITY_SINGLE_TOP,则此 Intent 将被传递到当前实例的 onNewIntent()。

这是什么意思?

  • 如果您的活动的启动模式是“多重/标准/默认”并且您没有设置FLAG_ACTIVITY_SINGLE_TOP相同的意图,那么它将完成并重新创建。
  • 如果您的活动的启动模式不是“多重/标准/默认”或者您设置FLAG_ACTIVITY_SINGLE_TOP了相同的意图,那么这个意图将被传递到当前实例的onNewIntent().

因为您的 MainActivity 具有“默认”启动模式,并且您没有设置FLAG_ACTIVITY_SINGLE_TOP相同的意图,所以它将完成并重新创建。

但是您希望用户回到 MainActivity 的当前实例,因此您需要设置FLAG_ACTIVITY_SINGLE_TOP相同的意图。

只需更改您的代码

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

推荐阅读