在调用startActivity时,在onStop()中查找下一个Activity

时间:2012-02-18 18:52:40

标签: android android-activity android-intent

通过使用startActivity()启动一个新的Activity来调用onStop()之后,我如何确定当前Activity的onStop()方法中接下来哪个Activity?

目前我唯一的想法: 声明我用作全局变量的intent,并使用intent.getClass()或类似的东西在onStop()方法中检查它。这样可以吗?不知何故感觉就像快速而肮脏的方法。

感谢您的帮助!

编辑: 所以这是场景:

Activity1是一个列表视图,用户选择一行或多行,然后单击“提交”,所有选定的行现在都会提交给后台任务中的服务器。

我在我的服务中使用一个数组来存储所选id之前的submissin,所以如果用户离开listview而没有点击提交,那么这个数组仍然会被过时的选择填充。

因此,如果用户选择一行或多行,然后在没有“提交”的情况下退出Activity1,我希望丢弃选择,所以我调用方法在Activity1的onStop()方法中清除该数组。这很好用,但当然有不同的方法可以离开Activity1。例如,我有一个包含3个条目的上下文菜单,每个条目都会启动另一个活动。

现在我需要保留我的数组值以防止从上下文菜单中选择一个特殊的单个活动(比如说Activity2)。

很抱歉,如果不清楚,但我不是在谈论活动实例,而是关于一般活动的类型。

所以我在onStop()方法中需要知道的是,如果我们从Activity1切换到Activity2.java或Activity3.java。

也许Activity1的onStop()甚至不适合我明确或不明确的决定?

再次感谢

1 个答案:

答案 0 :(得分:1)

您可能希望在此处添加一些关于您的意图的说明,因为问题有点模糊。

默认情况下,启动Acitvity时,它将被放置在称为后端堆栈的队列中。当活动结束时,它会出列,前一个活动被带到前台。

在开始新活动时很不舒服,如果你没有正确设置它,你将创建该活动的新实例,即使后一个堆栈中已存在一个。如果我理解你的问题,你会寻找:

Intent intent = new Intent(getContext(), NewClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

除了提到的活动之外,这将清除堆栈,如果它存在于后堆栈中,则将其置于前台。

This SO thread显示了如何清除堆栈(Android guide)。

查看here,其中介绍了如何管理任务和活动,但Google警告不要操纵默认的beahviour。