如何检测是否从儿童活动回来?

时间:2011-11-02 14:33:59

标签: android android-activity

如何在从子活动中按下后退按钮后检测活动是否成为焦点,以及如何在此时执行某些代码?

4 个答案:

答案 0 :(得分:13)

一种可能性是使用startActivityForResult()启动您的子活动并实施onActivityResult(),当您从子活动返回时,将调用该活动。

答案 1 :(得分:5)

js的答案是对的,但这里有一些已调试的代码。

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

public static final int OPEN_NEW_ACTIVITY = 12345;

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

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中。

答案 2 :(得分:3)

您正在寻找的方法可能是您可以在母班中实现的onResume方法;)。您必须知道在第一次启动任何活动时也会调用onResume。查看活动的生命周期:http://developer.android.com/images/activity_lifecycle.png

此致

答案 3 :(得分:0)

您还可以覆盖onBackPressed()方法和onOptionsItemSelected()方法,并在其中添加一些逻辑。例如,我把它放到我的BaseActivity中,所有其他活动都来自:

@Override
public void onBackPressed() {
    // your logic
    super.onBackPressed();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        // your logic
    }
    return super.onOptionsItemSelected(item);
}