【问题标题】:check if Activity is in Stack if up button is pressed in Android如果在 Android 中按下向上按钮,则检查 Activity 是否在 Stack 中
【发布时间】:2015-10-29 21:08:42
【问题描述】:

如何检查指定的Activity 是否在堆栈中,如果没有启动它们。

case android.R.id.home:
            finish();
            return true;

如您所见,现在它只是完成了当前的Activity,通常它会显示之前启动的 Activity。 所以它看起来像:

活动1 -> 活动2 -> 活动3

我想跳过activity2,如果用户想从activity3上升到activity2,那么它必须被启动。

我希望很清楚我想做什么,如果不只是问的话!

亲切的问候!

【问题讨论】:

  • 你不能只是 finish() 活动 2 并开始活动 3,当用户从活动 3 开始活动 2 时。

标签: android


【解决方案1】:

您可以使用 Intent flags 在使用意图开始指定活动之前添加其中任何一个来实现您想要的目标

例如,如果您在活动 3 中并且想要转到活动 2,并且如果它已经在堆栈中,则将其放在前面,您可以使用 FLAG_ACTIVITY_REORDER_TO_FRONT 标志

如果存在的话,这将把现有的活动放在首位

例子:

Intent intent = new Intent(..);
intent.addFlags(FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

..

但是,如果您真的想访问活动堆栈 AFAIK,则无法像 elsewhere 所述那样访问,但您可以通过其他方式实现该行为..

例如,如果您想跟踪活动 2,您可以在应用程序中添加一个变量来指示活动 2 是否存在,并使用该信息进行构建。

【讨论】:

  • 不幸的是,这不是我想要的。我该怎么做才能检查activity2是否在堆栈中或仍然处于活动状态?
  • 从您的帖子中,我收到一条消息,如果活动 2 已经存在,并且如果不从“从头开始”启动它,那么您正试图将它放在前面,这正是该标志要做的事情如果不是,请说明你要做什么
  • 附言。更新了答案以包含有关访问活动堆栈的信息
  • 好的,我会解释我想要什么。 SplashScreen -> LogInScreen -> WorkActivity。如果用户已经登录并直接进入 WorkActivity,我想跳过 LogInScreen。如果用户按下向上按钮,我想打开 LogInScreen。如果这是用户第一次打开应用程序,堆栈如下所示:SplashScreen->LogInS..->WorkA... 所以我不能真正使用 Intent,因为 LogInScreen 已经在堆栈中,对吗?
  • “向上”按钮是指“返回按钮”吗?为什么你不只是在人们按下后退按钮后产生新的 LogInScreen ?像这样:启动闪屏 -> 完成闪屏,如果用户已登录,则显示工作活动,如果未显示登录屏幕 -> 如果用户在工作活动中按下后退按钮,则完成并显示登录屏幕 -> 并循环。最重要的是,这似乎是一种自定义导航行为,很可能会使您的用户感到困惑,因此不建议这样做
猜你喜欢
  • 2015-10-30
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多