当前位置: 首页 > 知识库问答 >
问题:

Android从后台堆栈中删除活动

哈朗
2023-03-14

好吧,所以我有点困惑该怎么处理这个。因此,我有了主活动,从那里可以启动一个活动到DegreePlan活动,从那里可以启动另一个活动到EditDegreeplan。我已经将EditDegreeplan设置为在Android清单中没有历史记录。问题是在他们保存EditDegreeplan后,它会启动一个活动到Degreeplan。因此,如果用户按下后退键,他们必须按两次才能再次进入主活动。我想摆脱它,所以他们只需要按一次。不过,我对如何做到这一点感到困惑。

如果我将DegreePlanActivity设置为noHistory,那么在EditDegreePlan中,他们就不能返回到它。

我尝试过重写onBackPmed方法并将意图启动到主活动。然后的问题是,他们必须按回多次退出应用程序。

那我该怎么办?

共有3个答案

潘佐
2023-03-14

我建议您使用starActivityForResult(),而不是简单的starActive(),当您启动EditDegreeProp-Active时,如Android教程中所述。

在EditDegreePlan活动中,然后调用

setResult(RESULT_OK);
finish();

如果您不希望从EditDegreePlan活动中获得任何数据,那么您不必实现onActivityResult。

国斌斌
2023-03-14

API的简单解决方案

 Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
 nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(nextScreen);
 ActivityCompat.finishAffinity(currentActivity.this);
简烨烁
2023-03-14

FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈,可以使用以下代码:

Intent intent = new Intent(this, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

请记住,这个标志只清除中间活动,例如,如果您的Back Stack中有A,B,C,那么使用这个标志从C活动转到D,这并不清除Back Stack,堆栈将是A,B,C,D但是如果你用这个标志从活动D到活动A,B,C,D活动将从堆栈中弹出,你在后堆栈中只有A。

 类似资料:
  • 当我在我的个人资料活动中点击注销按钮时,我想把用户带到登录页面,在那里他需要使用新的凭证。 所以我用了这个代码: 在。 但问题是,当我点击登录活动上的设备返回按钮时,它会把我带到Profile活动。我期待的应用程序应该关闭时,我按下设备返回按钮上的登录活动。 我做错了什么? 我还在清单中为我的登录活动添加了 非常感谢。

  • 当显示主片段时,我试图清除后堆栈中的所有片段。在导航图中,我添加了这个动作 在登录片段中。我尝试了findNavController()。导航(LoginFragmentDirections.actionLoginFragmentToHomeFragment()) 和 我从这里的文件中了解到https://developer.android.com/guide/navigation/navigat

  • 我知道关于这个主题,已经有很多关于堆栈溢出的问题,但没有什么对我有用。我想实现的是,我想清除特定方法调用上堆栈后的所有活动。 假设我在我的应用程序中有一个入口点,即方法。现在我从五个不同的活动中调用此方法。登录后始终显示一个屏幕。现在我想实现的是,无论从哪里调用如果登录成功,那么用户应该转到下一个活动(活动2),并且在双击该活动(活动2)时,用户应该退出应用程序。那就是我希望我的活动后堆栈在方法成

  • 我希望当用户按下后退按钮时,我的活动从后退堆栈中清晰可见。我正在使用此意图来打开我的活动: 我希望当我按下后退按钮时,我的OutGoingActivity活动将从堆栈中删除。 每当我启动我的活动时,一个新的活动应该被打开,而不是从堆栈中打开。

  • 我尝试使用Android导航组件,但后堆栈有问题。 我有片段A,B。要从A导航到B,我写下: 但我如何才能返回到点击的返回按钮?

  • 问题内容: 有什么规范的方法可以从堆栈中删除添加的中间件?似乎应该可以直接修改数组,但是我想知道是否有一个我应该首先考虑的文档化方法。 问题答案: 实际上来自Connect(不是Express),它真正要做的就是将中间件功能推送到应用程序的。 因此,您应该很好地将函数拼接出数组。 但是,请记住,周围没有文档,也没有删除中间件的功能。您冒着将来版本的Connect进行更改与代码不兼容的风险。