2010-05-03 104 views
1

我相信这会得到答复,但我证明无法找到它。所以请原谅我的冗余。如何退出当前活动到主屏幕(不使用“Home”按钮)?

我想要做的是模拟“主页”按钮,它将一个回到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); 

最后屏幕会显示“谢谢参与”以及之前描述的按钮,它们应该带回到主屏幕。但我真的不知道如何正确退出Activity。我有例如使用this.finish();但这很奇怪地再次出现“Thank you”屏幕。那么,我怎么才能跳回到主屏幕?

对不起。
问候,
Steff

回答

8

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

您可以尝试修复它可以是:1)在针对不同问题开始新活动(因此一次只打开一个问题活动)后每次使用finish(),或者2)查看是否可以使用意向标志CLEAR_TOP。这会启动目标活动,同时杀死堆栈中可能超过它的任何东西。例如,如果您有活动:A,B,C,C,C,C,C(每个问题等),那么使用CLEAR_TOP启动A将会终止B和C的所有实例。您可以将它放入程序结构中通过改变用户在开始调查问卷时看到的第一个屏幕。默认情况下,这会显示一个“欢迎”消息,并用按钮启动问卷。但是,如果它是以与该意图捆绑的特定值开始的,则会显示“谢谢”消息。

如果你这样做,那么一旦你的活动A,用户将返回到他们开始你的应用程序之前的任何地方 - 大概是主屏幕,如果它开始与一个appwidget。

+0

谢谢,我会给它一个。我在阅读你的答案后,想知道我是否采用了一种完全错误的问卷调查方法...... – stfn 2010-05-04 07:54:01

相关问题