【问题标题】:How can I return to my main activity from another activity that is more than one away in the stack?如何从堆栈中不止一个的另一个活动返回到我的主要活动?
【发布时间】:2012-06-29 16:57:03
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 效果很好。谢谢!

标签: android android-intent nullpointerexception activity-stack


【解决方案1】:

有很多方法可以做到这一点。最简单的方法可能是在第二个 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(),这样就无法通过返回导航访问它们。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2018-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 1970-01-01
          相关资源
          最近更新 更多