2016-10-03 167 views
0

這對我來說是必要的,因爲我在我的應用程序中使用了導航抽屜,並且我不希望每次單擊該項目時都會爲我開始新的活動。Android開發,當我開始一個新的活動時,我已經啓動了一個新的活動,我該如何轉向我之前推出的活動?

例如,導航抽屜中有兩個項目,A和B.首先,我單擊A,然後啓動A-activity。然後我點擊B,它開始B活動。最後我再次點擊A,我想返回到最後一個A活動及其狀態,而不是開始一個新的A活動。我怎麼做到的?

非常感謝!

+0

什麼是你的後退按鈕做??????? –

+0

我想你可以使用'fragment',而不是'activity' –

回答

1

它取決於你的導航意圖。

啓動模式將無法幫助你了,除非你有你想要保存,而不是重新創建只有一個活動,在這種情況下,你可以嘗試使用singleTask啓動模式 - 它有它自己的堆棧中,並創建新任務確保您的活動僅在該任務中出現一次 - 我不建議這樣做,除非您真的知道自己在做什麼以及爲什麼做。 Read this瞭解更多有關不同啓動模式的深入見解。另外,請勿使用singleInstance - 它只是在根目錄下創建一個具有單個活動的新任務,但您仍然需要了解如何切換到正確的任務。

您可能會嘗試在啓動和活動時使用Intent.FLAG_ACTIVITY_CLEAR_TOP,但是您從後臺堆棧推出的其他活動仍將被重新創建,我想這不是您的意圖。

我在提議什麼 - 使用一個Activity和開關Fragments代替(請參閱Handle Navigation Click Event部分)。強烈推薦使用導航抽屜來實現屏幕切換的方式(並且您會感受到更少的痛苦,並且看到屏幕切換更快!)。您將能夠保存片段實例狀態,並使用保存的捆綁包設置片段(更不用說您可以在根目錄中使用單個導航抽屜,而不是每個活動都使用一個抽屜。 FLAG_ACTIVITY_REORDER_TO_FRONT可以幫助你,但需要更多的研究。

乾杯!

+0

是的,我使用標誌FLAG_ACTIVITY_REORDER_TO_FRONT並實現了我的目標。不需要在manifest中設置singleInstance或singleTask。現在活動堆棧中只有一個A-activity,當我在其他活動中啓動它,它只會放在堆棧頂部,其他活動不會被刪除。但是,我認爲使用Fragments確實是一種特殊的方式,因爲現在我的應用程序中存在一些缺陷。我再次進行A-activity,屏幕顯示有點閃爍。 – Niubility

2

比方說,你有4個activites像這樣:

甲 - >乙 - 「ç - > d

,其中d是最高活性,A是根系活力。如果你正在'回退'到活動B,那麼你需要做兩件事來避免碰到B的onCreate方法。

1.)使B成爲「SingleTask」活動。您可以在Android Manifest中執行此操作。簡而言之,這意味着只有一個B的「實例」將永遠存在於這個任務中。如果B在它被調用時已經在運行,那麼它將被簡單地置於前面。這是你如何做到的。

<activity 
    android:name=".ui.MyActivity" 
    android:launchMode="singleTask"/> 

但是你不想把B帶到前面。你想「回落」到B讓你的籌碼看起來像

甲 - >乙

2)這個標誌添加到您的意圖是「開始」 B.這確保了C和d是除去。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

現在,當'D'將新的Intent調用到B時,B將被恢復並且C和D將被移除。 B將不會被重新創建,它只會調用onNewIntent。

+0

這不是真的正確答案的問題;另外,請至少尊重原作者:http://stackoverflow.com/a/37465579/1001883 – aleien

1

您可以設置活動A作爲一個實例,當你希望啓動使用FLAG_ACTIVITY_REORDER_TO_FRONT這樣的:

清單中

<activity 
     android:launchMode="singleInstance" 
     android:name="com.test.activity_a" 
     android:label="Activity A" /> 

代碼:

Intent intent = new Intent(context, cls_a); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
+0

你不要在這裏需要'singleInstance',它做了什麼 - 只創建一個任務,只有一個活動,根本不幫助解決問題。但! 'FLAG_ACTIVITY_REORDER_TO_FRONT' - 使用該標誌看起來像個好主意(: – aleien

相關問題