2013-04-30 55 views
0

我在我的應用程序中有3個活動。如何啓動這種情況下的活動?

首頁 - >列表 - >詳細

當我在詳細的活動,我想有一個家按鈕,將我重定向到家庭活動,並關閉其他活動。然後,我試過這段代碼:

Intent intent = new Intent(this, HomeActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

因爲FLAG_ACTIVITY_CLEAR_TOP是:

如果設置,以及正在啓動的活動已經在 當前任務運行,然後,而不是推出的一個新實例即 活動,其上的所有其他活動將關閉,並且 此Intent將作爲 新Intent遞送到(現在在上面)舊活動。

我得到了我想要的,但它仍然會onCreate。有沒有辦法啓動家庭,而不是去onCreate?

+0

哇,對不起,我錯過了這個選項,在AndroidManifest.xml中的Activity中聲明'android:launchMode =「singleTask'。我將刪除這個問題 – Rendy 2013-04-30 15:05:34

+0

通過使用上面的代碼,你只需創建一個新的主頁 - 在現有的細節活動之上的活動,而不是那個,試着完成(調用finish()on)Detail-Activity和List-Activity,以使主頁活動變得可見 – prageeth 2013-04-30 15:05:52

+1

對於任何對android:launchMode = 「singleTask」呢,我引用它的文檔http://developer.android.com/guide/topics/manifest/activity-element.html「系統在新任務的根目錄創建活動並將意圖路由到但是,如果活動的一個實例已經存在,則系統通過調用onNewIntent()方法將意圖路由到現有實例,而不是創建新實例。「 – Rendy 2013-04-30 15:10:41

回答

0

您無法控制Activity的生命週期。這取決於Android決定繼續運行哪些活動以及關閉哪些活動。這意味着當一個活動失去焦點時,它不一定被銷燬或關閉,但可能只是失去焦點並繼續運行,但也可能不會。這取決於Android;你無法控制這種行爲。

如果要在給定狀態下恢復Activity,則必須保存所有需要的數據並將其恢復到onCreate()

+0

是的,我們無法控制活動的生命週期,但實際上我們可以做到。請看我上面的評論,我想念這個選項'android:launchMode =「singleTask' :) – Rendy 2013-04-30 15:14:26

1

你的想法和Android的還不完全兼容。 ;)

當你「啓動家庭」,這意味着它將是推出,這意味着它將被創建。

但是,您可以使用Activity.startActivityForResult()開始ListDetail。您的「家」按鈕,然後將finish您的Detail活動。在ListonActivityResult回調中,您只需要通過使用Activity.finish()onActivityResultHome就可以瞭解事件並知道您現在回來了。

+0

Hi Class Stacker,實際上有辦法做到這一點,請看我對我的問題的評論。 launchMode =「singleTask」 – Rendy 2013-04-30 15:13:27

+0

@Rendy當然。我無法想象這種方法有助於邏輯。有一個與邏輯匹配的控制流通常是一個好主意。因爲這樣,您的「主頁」按鈕與「返回」按鈕相反。除非你的邏輯非常微不足道,否則實現起來並不好玩,即使如此,我也不會這樣做,因爲它是違反直覺的。此外,還有其他情況下,您的應用程序將收到一個新的「家」意圖,並希望能夠區分它們。所以,不要像你認爲應該這樣做。 – 2013-04-30 15:20:08

+0

這是因爲我正在考慮實際上我在家庭活動中使用了很多圖片,我不想重新加載它,實際上我沒有需要刷新的視圖。感謝您的提醒:) – Rendy 2013-04-30 15:23:34