0

我正在实现一个带有各种 API 调用的向下钻取列表(取决于我们目前在列表中的位置)。我们第一次打开活动 (EventListActivity) 时,它调用 APICall1。当您单击从 JSON 响应填充的列表项时,它将使用父 ID(来自 APICall1)调用 APICall2。如果返回的数据不是树的子节点,我们会使用新的父 ID(来自之前的 APICall2)再次调用 APICall2。如果是孩子,我们最后调用APICall3。

基本上,无论我如何实现它,我都需要 EventListActivity 调用自身并堆叠在以前的活动之上(因为用户需要返回上一个屏幕)。但是,问题是当我尝试从 EventListActivity 启动 EventListActivity,而不是通过 onCreate 并实际重新启动活动时,它正在点击 onResume。

listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {

    if (status == GET_SPORTS) {
        status = GET_CATEGORIES;
        //parent_id = ; //currently hardcoded in

        Bundle params = new Bundle();
        params.putInt("status", status);
        params.putInt("parent_id", parent_id);

        //Intent intent = new Intent(mActivity, FavoritesActivity.class);
        Intent intent = new Intent(mActivity, EventListActivity.class);
        intent.putExtras(params);
        startActivity(intent);
    } else if (status == GET_CATEGORIES) {
        status = GET_EVENTS;
        //parent_id = ; //currently hardcoded in

        Bundle params = new Bundle();
        params.putInt("status", status);
        params.putInt("parent_id", parent_id);

        Intent intent = new Intent(mActivity, EventListActivity.class);
        intent.putExtras(params);
        startActivity(intent);
    } else if (status == GET_EVENTS) {
        //do things!
    }
}
});

如果我在第 14 行取消注释 Intent intent... 并注释掉第 15 行(启动新的 FavoritesActivity 而不是 EventListActivity),它工作正常并且启动 FavoritesActivity 就好了。所以我不确定是什么阻止了 EventListActivity 重新启动而不是通过它的 onResume。

我知道:

    startActivity(intent);
    mActivity.finish();

是一种重新启动/重新创建活动的快速(可能是肮脏)方式,所以不应该忽略 mActivity.finish() 在其自身之上启动一个新的 EventListActivity 吗?

4

2 回答 2

3

事实证明,问题出在 Android Manifest 中。在此活动下,有以下设置:

    android:launchMode="singleTop"

这显然将某个活动可以激活的次数限制为 1。这就是为什么它会经历onResume()而不是onCreate()再次经历。

于 2013-05-15T17:25:55.683 回答
2

尝试使用Intent.FLAG_ACTIVITY_NEW_TASK应该可以做到这一点,我相信。所以改变你Intent

Intent intent = new Intent(mActivity, EventListActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtras(params);
    startActivity(intent);

这将在堆栈上创建一个新任务。

于 2013-05-15T16:38:13.013 回答