使新活动取代堆栈中的父项

时间:2010-12-02 17:09:40

标签: android

我已阅读activities, stacks and launch modes,但很难理解如何将此信息应用于我的具体问题。

基本上我想要做的是启动一个新活动,并确保它占用了父级在堆栈中的位置,而不是放在堆栈的顶部。我有以下两种情况:

  1. 我有登录活动。用户登录时,将启动新活动。当用户点击“返回”时,我不希望他被发送回登录活动,而是退出程序。

  2. 我有一个活动显示在tabhost中(或者更确切地说是在tabhost中的framelayout中,我想)。此活动有一个按钮,单击此按钮可启动新活动。我希望这项新活动能够取代父母的位置。也就是说,我不想打开一个新的全屏活动,而是希望它在tabhost中将父元素放在framelayout中。此外,我不希望按反键来引导用户返回父活动。

  3. 如果有人能指出我正确的方向,我将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

  1. 您只需在登录活动中拨打finish()即可。这将把它从活动堆栈中删除。

  2. 这是一个更难的答案。我在这里最好的建议是使用ViewFlipper而不是启动新的Activity,您可以管理切换视图。或者,如果您需要按钮来启动新的Activity,则可以使用ActivityGroup并以此方式管理Activity。他们都有自己的复杂性,所以你需要调查哪些可能更适合你。

答案 1 :(得分:0)

在第一种情况下,您需要在登录活动中调用finish()。 还要检查此清单设置以在启动新任务时完成活动。 http://developer.android.com/guide/topics/manifest/activity-element.html#finish

在第二种情况下,您可以使用两个视图作为框架或ViewFlipper。然后覆盖keyevent以处理后退按钮单击。 http://developer.android.com/reference/android/view/View.html#onKeyDown(int,android.view.KeyEvent) 检查用户是否在第二个视图中单击并显示您的第一个视图。如果它们位于第一个视图中,您可能希望在覆盖的方法上返回false以让系统处理该事件。 [可能关闭那个活动]

或者对于第二个选项,在某些情况下可能只是删除选项卡并使用选项菜单。这样您就可以正常方式使用您的活动。