2013-11-15 154 views
1

这里的另一项活动是我的活动方案:启动活动将堆栈

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。

您认为哪一种方法可以达到我想要的效果?

回答

1

我不知道这是一个很好的用户体验。为什么用户希望看到A3,如果他按下A4中的BACK按钮?

但是,如果这是你想要做的,我肯定会选择第三种选择。 A2应该启动A3并传递一个额外的信息告诉A3立即启动A4。从编码的角度来看,这种选择是最直接的,如果他们必须维护它,对其他人来说很容易。

+0

我想要这样做的主要原因是因为A2是一种通知中心。我想通过创建足够的路线/活动堆栈将用户重定向到选定的内容。 – neoxigen

+0

在选择#3中,我将不得不为每个要重定向到另一个活动的活动修改onCreate()方法。在选择#2中我不需要那样做。考虑到这一点,你是否仍然认为#3是最佳选择? – neoxigen

+0

是的,我仍然认为#3是最好的选择。重定向到另一个活动就像2行代码。至少这可以让你清楚6个月后回去看看你在做什么。我一直推荐这种类型的“调度员”活动来解决您需要以非Andoid直接支持的方式更改正常导航流程的情况。 –

0

从A2创建A4;

在A4上拦截回按事件;

重写它并创建A3完成A4。

我觉得这是一个很好的解决方案,因为用A3你不会真的回来。该系统将快乐:)

在A4

public void onBackPressed() { 
    finish(); 

    Intent intent = new Intent(this, A3.class);  
    startActivity(intent); 
} 
+1

如果A3引用了A4,那么您的代码将创建一个新的A3,在大多数情况下这不是真正的交易 –

+0

您是对的:)我的解决方案是针对静态路由。所以#2是最好的。 –

+0

感谢您的回答。正如史蒂夫所说,我也希望能够访问A4槽A3 – neoxigen