在活动堆栈中查找活动位置

时间:2011-02-14 18:51:34

标签: android android-activity stack

基本上我现在有两个屏幕。问答屏幕。当您单击答案时,您认为它在问题屏幕上,它会将您带到答案屏幕,告诉您是否正确。下一部分是从该屏幕返回到问题屏幕,然后您会被问到另一个问题。目前,这会产生大量新活动,并且很容易失控。 我需要的是知道什么时候问题活动得到3并停止。基本上从原因屏幕中您可以返回查看问题,但是当您处理新问题时,它应该删除旧页面和原因页面。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

在答案活动中,您应该调用this.finish(),然后返回问题活动。并且在Question Activity中使用startActivityForResult启动AnswerActivity,这样当Answer完成时会通知Activity一个问题,所以你可以显示一个新的Question等等。所以每个AnswerActivity都会被销毁。如果您需要帮助,请发布代码示例。如果您以这种方式构建,则不需要在堆栈中查找活动。

问题活动

this.startActivityForResult(Intent, requestCode); // somewhere in your code to launch the Answer Activity

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // now we have returned from the AnswerActivity and it has been destroyed
    // do any processing here on the answer or show a new question.
}

回答活动

public void onBackClick(View v) {
  //on click handler for a back button or something.
  this.setResult(resultCode, Intent /* some data to give back to parent */);
  this.finish();
}

答案 1 :(得分:0)

我不知道从框架直接执行此操作的方法,但您可以手动执行(我认为)。您可以在应用程序级别维护一个整数列表,表示问题活动的任务ID。每次Activity启动时,都会将getTaskId()的值推送到此列表中。在启动活动的代码中,您可以广播问题活动响应的意图。如果getTaskId值位于列表中的某个位置,则可以在活动上调用finish()并从列表中删除其任务ID。

这是一个非常hacky的解决方案,但据我所见,singleTop launchMode只是不起作用