[英]How to make an activity launch itself again (stacking on top of previous activities)?
我正在使用各種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(啟動新的收藏夾活動而不是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.