11

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

所以我的问题:

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

我希望能够在活动 A 返回时发出刷新 listView 的信号。

谢谢!

4

4 回答 4

14

您可以在活动 A中添加代码以刷新列表视图。onResume()

@Override
protected void onResume() {
    super.onResume();
    //Code to refresh listview
}
于 2012-08-14T05:41:03.303 回答
8

使用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
        // ....
    }
}

出于某种原因,我在将其放入 Fragment 时遇到了麻烦。所以你必须把它放在活动中。

于 2016-05-14T13:52:15.337 回答
3

我有另一种方法可以做到这一点,在某些情况下可能会派上用场 - 我保留私有 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
    }
}
于 2016-05-22T00:04:13.867 回答
1

使用 startActivityForResult 启动 B 活动。并在活动 A 的 onActivityResult() 方法上检查活动 B 的数据。对 listView 使用 notifyDataSetChanged 来更新内容。

于 2012-08-14T05:37:43.337 回答