如何让活动再次启动(堆叠在之前的活动之上)?

时间:2013-05-15 16:26:04

标签: android android-activity

我正在实现一个包含各种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?

2 个答案:

答案 0 :(得分:3)

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

    android:launchMode="singleTop"

显然将某个活动的活动次数限制为1.这就是为什么它再次通过onResume()而不是onCreate()

答案 1 :(得分: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);

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