簡體   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