Android,如何检测活动是否从另一个活动回来?

时间:2014-07-06 14:52:53

标签: android

对于Android,假设3个活动a1 a2 a3及其点击层次结构为a1-> a2-> a3。

我的问题是在a2中,如何通过按后退键从a3中检测到它,而不是从a1中输入?

5 个答案:

答案 0 :(得分:9)

您可以使用onActivityResult检查其他活动的回复。将此代码放在您的a2活动中......

将请求代码声明为活动顶部的常量:

public static final int OPEN_NEW_ACTIVITY = 123456;

将它放在开始新活动的地方:

Intent intent = new Intent(this, NewActivity.class);
startActivityForResult(intent, OPEN_NEW_ACTIVITY);

活动结束后执行某些操作。文档建议您使用resultCode,但根据具体情况,按下按钮时,您的结果可以是RESULT_OKRESULT_CANCELED。所以我会把它留下来。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == OPEN_NEW_ACTIVITY) {
        // Execute your code on back here
        // ....
    }
}

出于某种原因,我把它放在片段中时遇到了麻烦。所以你必须把它放在Activity中。

您实际上不必在a3活动中添加任何代码,但如果您愿意,可以发回数据。

答案 1 :(得分:6)

onCreate在遇到背压时不会被调用。

通过后退按键可以通过多种方式推断您是否已经到达此活动。

  1. boolean上调用的oncreate中设置onCreate

  2. 通过调用startActivityForResult启动C活动,当您从C onActivityResult返回时,将调用它。

答案 2 :(得分:4)

在开始活动时加入一些关键意图。

   Intent intent = new Intent(getBaseContext(), A1Activity.class);
   intent.putExtra("I_CAME_FROM", "a1");
   startActivity(intent)

在打开的活动中阅读:

   String flag = intent.getStringExtra("I_CAME_FROM");
   if(flag.equlas("a1")){
   //you came from a1 activity
   }

这样您就可以了解自己的来源。

答案 3 :(得分:3)

您可以使用以下方法

首次创建活动时的

onCreate()(从a1到a2)。当您通过按下后退按钮返回时,不会调用此方法。

onRestart()活动处于后台并进入前台(在a3中按下)

答案 4 :(得分:1)

您可以通过调用:

来检测到该活动是从另一个活动返回的
onRestart()

并在此功能中添加所需的内容