1

我相信这将得到回答,但我证明无法找到它。所以请原谅我的冗余。

我想要做的是模拟“主页”按钮,该按钮将一个返回到 Android 的主屏幕。所以这就是导致我出现问题的原因:

  • 我有 3 个启动器活动。第一个(连接到主屏幕图标)只是一个(受密码保护的)配置活动。用户不会使用它(只是管理员)
  • 其他 2 个(均通过应用小部件访问)之一是问卷调查应用。我也允许通过“后退”按钮或 GUI 后退按钮在问题之间跳转。问卷完成后,我总结给出的答案并提供一个“完成”按钮,该按钮应将用户带回主屏幕。

对于问卷调查应用程序,我使用一个调用自身的活动(称为 ItemActivity)(使用意图时也是递归吗?)从一个问题跳到另一个问题:

Questionnaire.serializeToXML();  
Intent i = new Intent().setClass(c, ItemActivity.class);  
if(Questionnaire.instance.getCurrentItemNo() == Questionnaire.instance.getAmountOfItems()) {  
    Questionnaire.instance.setCompleted(true);  
} else Questionnaire.instance.nextItem();  
startActivity(i);

最后一个屏幕显示类似“感谢您的参与”以及之前描述的按钮,该按钮应将其带回主屏幕。但我真的不知道如何正确退出活动。我曾经使用过this.finish();,但这奇怪地再次出现了“谢谢”屏幕。那么我怎样才能通过跳回主屏幕来退出呢?

很抱歉给您带来不便。
问候,
斯特夫

4

1 回答 1

8

听起来正在发生的事情是您同时打开了多个活动副本。每次您启动一个新的活动实例时,您只是将新的活动添加到堆栈中 - 所有旧活动仍然存在。当您调用 时this.finish(),它只是向您显示下一个最近打开的活动。我不确定为什么那是“谢谢”屏幕,因为大概它只会在最后打开,但是我没有完全按照你的活动被调用的顺序。

您可以尝试解决的方法是:1)finish()每次针对不同的问题开始一项新活动后都使用 a(这样一次只打开一个问题活动),或者 2)看看您是否可以使用意图标志 CLEAR_TOP。这将启动目标活动,同时杀死堆栈中可能位于其上方的任何内容。例如,如果您有活动:A、B、C、C、C、C、C(每个问题等),那么以 CLEAR_TOP 开头的 A 将终止 B 和 C 的所有实例。您可以将其放入您的程序结构中通过更改用户在开始调查问卷时看到的第一个屏幕。默认情况下,这将显示一条“欢迎”消息,并带有一个开始调查问卷的按钮。但是,如果它以与意图捆绑的特定值开头,它将显示“谢谢”

如果您这样做,那么一旦您进行finish()了活动 A,用户将返回到他们启动您的应用程序之前的任何位置 - 如果它是使用应用程序小部件启动的,则可能是主屏幕。

于 2010-05-03T15:16:58.403 回答