如何将当前活动退出到主屏幕(不使用"主页"按钮)?

stf*_*tfn 1 android exit homescreen android-activity

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

我想要做的是模仿"Home"按钮,它将一个回到Android的主屏幕.所以这就是导致我出现问题的原因:

  • 我有3个发射器活动.第一个(连接到主屏幕图标)只是一个(密码保护的)配置活动.它不会被用户使用(只是管理员)
  • 其中一个(通过app小部件访问)是一个问卷调查应用程序.我允许通过"后退"按钮或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);
Run Code Online (Sandbox Code Playgroud)

最后一个屏幕显示的内容类似于"感谢您参与"以及之前描述的按钮,该按钮应该返回到主屏幕.但我真的没有得到如何正确退出活动.我已经使用了,this.finish();但这又奇怪地再次打开了"谢谢"屏幕.那么我怎样才能通过跳回主屏幕退出?

很抱歉给您带来不便.
此致,
Steff

Ste*_*ley 8

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

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

如果你这样做,那么一旦你finish()活动A,用户将在他们启动你的应用程序之前返回到他们所在的任何地方 - 如果它是以appwidget开始的话,可能是主屏幕.