2010-03-17 82 views
7

在我的應用程序中,您可以瀏覽多個活動,直到活動堆棧非常深。同時關閉幾個android活動

我們希望每個活動都有一個按鈕,讓您直接回到主菜單 - 即彈出除第一個活動以外的所有活動。

我已將該按鈕放在視圖中,我可以輕鬆地將它放在應用程序中的每個活動中,但我無法弄清楚如何一次性關閉幾個活動。

(如果可能的話,這將是一件好事,如果視圖可以工作了多少活動本身關閉 - 即檢測堆棧自身的活動是如何深)

回答

16

看一看意圖標誌它說它將目標活動帶到堆棧的頂部,從而移除可能在其之上的所有其他內容。因此,使用該按鈕,您可以將其添加到所有活動中,以便啓動一個針對主菜單的意圖,並設置該標誌。

從文檔:

如果設置和活動是 推出的 當前任務已在運行,則代替 推出該 活動的新實例,所有其他活動的在其上面的 將被關閉,並且這個 意圖將作爲新的意圖被傳遞到(現在的 頂部)舊活動。

例如,考慮一個任務 組成的活動:A,B,C,D. 如果d用 意圖解析爲活動B的組分 調用startActivity(),則C和d將是 成品和B收到給出 意圖,導致堆棧現在 點是:a,B.

活動B在上面的例子中當前運行的實例將 要麼接受新的意圖你是 出發在這裏onNewIntent() 方法,或者自己完成並且以新的意圖重新開始。如果 已宣佈其推出模式爲 「多」(默認),你有 沒有設置FLAG_ACTIVITY_SINGLE_TOP在 的目的相同,那麼這將是 完成並重新創建;對於所有其他 啓動模式,或者如果 FLAG_ACTIVITY_SINGLE_TOP設置,則 此Intent將被傳送到 當前實例的onNewIntent()。

這次發射模式也可以用來結合 良好的效果與 FLAG_ACTIVITY_NEW_TASK:如果用來 啓動任務的根系活力,它 會帶來該任務的當前運行 實例的 前景,然後將其清除爲其根狀態 。例如,在通知 管理器啓動 活動時,這是特別有用的,例如 。

+0

會做 - 只是想確保它是完全正確的第一個:我已經被那個之前蜇了... – teedyay 2010-03-17 13:29:42

+1

確實 - 這對我有意想不到的效果:intent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop ); – scolestock 2012-01-03 20:39:25

-1

你可以聲明第一個活動android:launchMode="singleTask"more),然後用一個Intent啓動它。

編輯:我的建議是基於你想有一個活動的單個實例返回到的假設。否則它是不正確的。

+1

在這裏建議使用singleTask表示不理解單個任務是幹什麼的......沒關係,它是令人困惑的,它對活動的行爲有很大的影響。所以除非你明白並希望它對你做的一切,請避免它。 99%的應用程序只需要使用正常或有時單發啓動模式。 – hackbod 2010-03-17 16:56:08