繁体   English   中英

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

[英]How to make an activity launch itself again (stacking on top of previous activities)?

我正在使用各种AP​​I调用实现明细列表(取决于我们当前列表的下限)。 第一次打开活动(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(启动新的收藏夹活动而不是EventListActivity),则它将正常工作并启动收藏夹活动。 因此,我不确定是什么阻止了EventListActivity重新启动,而不是通过其onResume进行启动。

我知道:

    startActivity(intent);
    mActivity.finish();

是重新启动/重新创建活动的快速(且可能很肮脏)的方法,因此,不应遗漏mActivity.finish()在自身之上启动新的EventListActivity吗?

原来问题出在Android清单中。 在此活动下,设置为:

    android:launchMode="singleTop"

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

我相信,请尝试使用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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM