【问题标题】:Start activity adding another activity on the stack开始活动在堆栈上添加另一个活动
【发布时间】:2013-11-16 02:17:15
【问题描述】:

这是我的活动场景:

A1 -> A2 -> (A3) -> A4

我目前在 A2,我想从 A2 直接转到 A4,但是如果用户在 A4 中按下后退按钮,则转到 A3。如果用户在A3中按下后退按钮,则转到A2,如果用户在A2中按下后退按钮,则转到A1。哪一种是实现这一目标的最佳方式?

到目前为止,我已经尝试了三种不同的选择:

  1. 使用 TaskStackBuilder:无法完全实现我想要的,因为我要创建一个新的活动堆栈,因此重新创建了 A1 和 A2(我希望不要重新创建它们)。

  2. 从 A2 连续调用 startActivity(A3) 和 startActivity(A4)。

  3. 从 A2 调用 startActivity(A3),设置 Intent Extra。在A3的onCreate()方法中,检查Intent Extra的值,根据它的值自动启动A4。

你认为哪一个是实现我想要的最好的方法?

【问题讨论】:

    标签: android android-intent android-activity


    【解决方案1】:

    我不确定这是不是良好的用户体验。如果用户在 A4 中按下 BACK 按钮,为什么会期望看到 A3?

    但是,如果这是您想要做的,我肯定会选择选择 #3。 A2 应该启动 A3 并传递一个额外的内容,告诉 A3 立即启动 A4。从编码的角度来看,这种选择是最直接的,如果必须维护它,其他人也很容易遵循。

    【讨论】:

    • 我想这样做的主要原因是因为A2是一种通知中心。我想通过创建足够的路线/活动堆栈将用户重定向到所选内容。
    • 在选择#3 中,我必须为每个我想重定向到另一个活动的活动修改 onCreate() 方法。我不需要在选择#2 中这样做。考虑到这一点,您仍然认为#3 是最佳选择吗?
    • 是的,我仍然认为#3 是最好的选择。重定向到另一个活动就像 2 行代码。至少当你在 6 个月后回头看它时,这清楚地表明你在做什么。我一直推荐这种类型的“调度程序”活动,以解决您需要以 Andoid 不直接支持的方式更改导航正常流程的情况。
    【解决方案2】:

    从 A2 创建 A4;

    拦截A4上的后按事件;

    覆盖它并创建 A3 整理 A4。

    我发现它是一个很好的解决方案,因为使用 A3 你不会真正回去。系统会很高兴:)

    在 A4 上

    public void onBackPressed() {
        finish();
    
        Intent intent = new Intent(this, A3.class);    
        startActivity(intent);
    }
    

    【讨论】:

    • 如果 A3 调用了 A4,您的代码将创建一个新的 A3,这在大多数情况下并不是真正的交易
    • 你是对的 :) 我的解决方案是静态路由。所以#2是最好的。
    • 感谢您的回答。正如史蒂夫所说,我也希望能够访问 A4 槽 A3
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多