0

我有一个带有一堆按钮的主菜单活动。一个按钮启动一个新活动,允许用户填写和提交表单。当用户提交表单时,第三个活动开始,基本上只是一个带有一些内容的屏幕和一个返回主菜单的按钮。但是,当我创建意图并转到主要活动时,setContentView() 不起作用,并且我的按钮分配导致 NullPointerException。

我知道有一些方法可以通过意图标志或调用完成()返回堆栈。我没有成功使用诸如Intent.FLAG_ACTIVITY_CLEAR_TOP. finish() 将不起作用,因为我还有两项活动,而不是一项。回到主要活动的正确方法是什么?

谢谢

4

4 回答 4

6

有很多方法可以做到这一点。最简单的方法可能是在第二个 Activity 启动 Intent 后调用 finish(),如下所示:

startActivity(activity3intent);
finish();

当第三个活动开始时,这将从堆栈中删除您的第二个活动。然后,您的 MainMenu 按钮可以在第三个活动上调用完成,让您返回第一个活动。

如果您更喜欢使用 Intent Flags,请尝试将其添加到从 Activity 3 调用 Activity 1 的 Intent 中:

activity1intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这将使 Activity 1 重新成为焦点,并清除 Stack 上的任何内容。CLEAR_TOP 标志处理摆脱堆栈的其余部分,但 IIRC 不会启动 Activity 的新实例,如果它已经存在于堆栈中。如果您希望启动 Activity 1 的新实例,请不要使用任何标志,而是在 Activity 2 和 3 都发送了它们的 Intent 之后调用 finish(),这样就无法通过后退导航访问它们。

于 2012-06-29T17:12:36.567 回答
0

在活动 2 中,如果您调用startActivity(yourIntent); finish()它应该允许您在活动 3 完成时返回活动 1。

于 2012-06-29T17:14:46.567 回答
0

如果用户填写并提交您的表单,请尝试通过在提交表单的按钮的侦听器中调用 finish() 方法来关闭您的活动。

于 2012-06-29T17:18:17.500 回答
0

您还可以创建一个包含所有活动的静态类,以便您可以正确处理它们。这既非常有用又非常低效,但无论如何。

于 2012-07-27T07:41:35.657 回答