java - 如何始终在返回按钮上返回相同的活动?
问题描述
我有一个带有菜单的主要活动。菜单项导致其他活动。我正在尝试实现它,以便当我从菜单开始一个新活动时,按下后退按钮后,无论之前打开了多少其他活动,应用程序都会返回到主活动。
我曾尝试使用 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();
});
解决方案
来自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);
推荐阅读
- django - 添加到 auth_user
- javascript - Lodash orderBy 函数未正确排序
- javascript - 在折线图 D3 中获得流畅的动画
- nuxt.js - 页面重新加载时如何运行客户端功能?
- javascript - 更新 x 轴 d3js
- informatica - Informatica PowerCenter Workflow - Windows 计算机上工作流会话中的平面文件路径
- prometheus - 如何在 Prometheus Grafana 中计算正常运行时间百分比或停机时间百分比
- flutter - 无法在颤动中向自定义底部导航添加操作
- javascript - Javascript 删除按钮
- javascript - 试图了解全局 javascript 变量的范围