Android:检测活动何时返回上一个活动

时间:2012-08-14 05:33:57

标签: android

我有一个带有listView的活动A,用户点击任何启动活动B的项目。根据用户在活动B中的操作,可能会更改活动A上的listView。

所以我的问题:

当用户从活动B返回活动时,如何告诉活动A它已恢复?

我希望能够在返回到活动A时刷新listView中的listView。

谢谢!

4 个答案:

答案 0 :(得分:8)

您可以在活动A的onResume()中添加代码以刷新 listview

@Override
protected void onResume() {
    super.onResume();
    //Code to refresh listview
}

答案 1 :(得分:2)

使用startActivityForResult是最优雅的方式。每次关闭并打开应用程序时都会发生OnResume,这将使用更多资源,特别是如果您刷新了大量数据。

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

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) {
        // Refresh your ListView here
        // ....
    }
}

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

答案 2 :(得分:1)

使用startActivityForResult启动B活动。并检查活动B中的数据,活动A s onActivityResult()方法。使用notifyDataSetChanged为listView更新内容。

答案 3 :(得分:0)

我有另一种方法可以做到这一点,在某些情况下可能会派上用场 - 我保留私有的Bundle变量,让我们称之为state,当我开始一个活动时,我放了一个字符串说我开始了哪项活动:

state.putString("startedActivity", "A");
Intent intent = new Intent(this, ActivityA.class);
startActivity(intent);

我将状态包存储到持续的设备更改(旋转等):

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putAll(state);
}

onCreate我加载状态:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
        savedInstanceState = new Bundle();
    }
    state = savedInstanceState;
}

然后在onResume方法中,我可以检查一下,我是否只是在某个活动中。请注意,我会立即从状态中删除字符串,因此在轮换更改等时不会再显示该字符串。

public void onResume() {
    super.onResume();
    if (state.getString(STARTED_ACTIVITY, null) != null) {
        // we just came from another activity!
        state.putString(STARTED_ACTIVITY, null); // clear the state
        // do whatever you need
    }
}