【问题标题】:finish caller activity when starting another one在开始另一个活动时完成调用者活动
【发布时间】:2014-07-16 08:49:17
【问题描述】:

就像在图中我想在开始另一个活动时关闭所有以前的活动。我尝试了很多标志,但它似乎不起作用。例如。在 Activity A 上启动 Activity B 时,我调用了

Intent intent = new Intent(this, ActivityB.class);
intent = intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent = intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Intent intent = new Intent(this, ActivityB.class);
intent = intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent = intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

但是finish() 方法没有在活动 A 中调用。 我有一个名为 Navigation 的全局类,它扩展了 Activity 以在一个类中处理此类事情。所有橙色活动都扩展了我的导航,蓝色活动没有。 BackButton 行为似乎工作正常,但在启动另一个活动时不会调用 finish() 方法。我必须明确调用finish() 吗?在哪里?如果我在onStop 中执行此操作,我将无法在重新启动应用程序时返回到 Activity X。

【问题讨论】:

    标签: android android-activity back-button activity-finish


    【解决方案1】:

    之后

    startActivity(intent);
    

    简单地说

    finish();
    

    在您想要完成的活动中。 只有在 ie 时才需要标志。你想清除活动堆栈

    【讨论】:

    • 每次我开始另一个活动时调用 finish() 时我的堆栈是否清除?
    • finish() 仅完成调用它的那个活动。当你得到即。活动堆栈上的 3 个项目比调用 finish() 时得到 2 个项目。没有其他项目被删除。如果您想清除所有项目,请使用:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    • 那么我必须使用这个标志并调用 finsih?你知道显示当前堆栈的方法吗?
    • 哦,如果我想通过后退按钮返回,我不能调用完成吗? (从登录调用注册/忘记密码时)?
    • finish() -> 只完成这个被调用的活动。标志 -> 清除所有活动堆栈(甚至是调用者活动)。不管它在哪里被调用。后退按钮 -> 在标准实现中 - 完成当前活动。所以:登录 -> 注册(在堆栈上返回登录)-> 登录(没有在堆栈上注册)登录 -> 注册(在堆栈上完成登录)-> 登录(没有在堆栈上注册)登录 -> 注册(带有标志的意图) - > 其他活动(有清除堆栈)
    【解决方案2】:

    您做得对,只需在代码中添加 finish() 即可:

    Intent intent = new Intent(this, ActivityB.class);
    intent = intent = intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2014-10-22
      相关资源
      最近更新 更多