何时使用新布局以及何时使用新活动?

时间:2010-03-09 07:07:21

标签: java android

我在Android上制作游戏,我正在尝试添加一组菜单屏幕。每个屏幕占据整个显示器,并具有可用于其他屏幕的各种转换。作为粗略的总结,菜单屏幕是:

  1. 开始屏幕
  2. 难以选择的屏幕
  3. 游戏画面。
  4. 暂停屏幕。
  5. 屏幕上的游戏。
  6. 您可以通过几种不同的方式在屏幕之间切换:

    1 - > 2

    2 - > 3

    3 - > 4(暂停游戏)

    4 - > 1(退出游戏)

    4 - > 3(恢复游戏)

    3 - > 5(游戏结束)

    显然,在屏幕之间移动时我需要一些存储状态,例如开始游戏时的难度级别选择以及当屏幕上的游戏显示时玩家的得分是什么。

    有人可以给我一些建议,以便在Android中实现上述屏幕和转换的最简单方法吗?如果我不小心的话,所有的创建/破坏/暂停/恢复方法都让我对编写脆弱的代码感到紧张。

    我不喜欢在每个屏幕上使用Activity。它似乎太重了,不得不使用意图传递数据似乎是一个真正的痛苦,每个屏幕本身并不是一个有用的模块。由于“后退”按钮并不总是回到上一个屏幕,我的菜单布局似乎不适合活动模型。

    目前,我将每个屏幕表示为XML布局文件 我有一项活动。我在每个布局上设置不同的按钮以调用setContentView来更新主要活动显示的屏幕(例如,暂停按钮将布局更改为暂停屏幕)。该活动保持所需的所有状态(例如当前难度级别和游戏高分),这使得在屏幕之间共享数据变得容易。这似乎与LunarLander样本大致相似,只是我使用多个屏幕。

    我现在拥有的声音听起来不错,还是我没有按照典型的Android方式做事?是否有一个我可以使用的课程(例如像ViewFlipper这样的课程)可以让我的生活更轻松?

    顺便说一下,我的游戏画面是作为存储游戏状态的SurfaceView实现的。我需要在此视图中的状态在调用setContentView之间保持不变(例如,从暂停状态恢复)。在活动开始时创建游戏视图是正确的想法,保留对它的引用,然后在我希望游戏屏幕出现时使用setContentView的这个引用?

1 个答案:

答案 0 :(得分:1)

这个问题已被问到很多。你读过这些其他帖子吗?

Android: What is better - multiple activities or switching views manually?。这个链接特别谈到了Android Design Guidelines,“根本没有提到切换视图;它以Activity-as-View设计为中心。”

Android - Should I use multiple activities or multiple content views

Android app with multiple activities

How to pass the values from one activity to previous activity

我不确定你的后退按钮是什么意思并不总是正确地回到正确的屏幕。我有一个与你的游戏结构类似的游戏,后退按钮总能让用户正确地进行活动链。

此外,使用onResume,onPause等在某种程度上是必要的。如果手机响铃,您的应用会发生什么变化? (是的,我知道,有些人仍然会做一些奇怪的事情,例如使用手机接听电话!:P)操作系统会尝试在您的活动中调用onPause方法,但如果没有实现,那么您的应用程序将无法按预期运行。 onResume的另一个有用之处是它允许您在用户返回视图后立即更新表。例如,您的播放器刚刚完成一个级别,然后返回到选择难度屏幕。如果您只是从内存中恢复上一个屏幕,则可能尚未更新以考虑该级别刚刚完成。但是,如果你在onResume中放入一些代码来处理它,那么它将始终在玩家看到屏幕之前执行。

最后,你说围绕活动传输数据是一种意外的痛苦 - 是的,这可能是真的。但是,无论你怎么做,我通常都会发现传输任何类型的复杂数据都是一种痛苦。意图真的更糟糕,还是只是因为事情并不像你希望的那么容易?我并不是指任何冒犯;我经常发现在代码中实现的直觉似乎很容易令人沮丧。