2010-12-03 46 views
9

在我的應用程序中,從我的着陸頁開始執行第8步「嚮導」,其中數據從第1步一直傳遞到第8步。爲保持數據完好無損步驟,我沒有在任何一個活動中調用finish()。但是,當所有步驟完成後,是否可以關閉我已開始的所有8個活動並返回到目標頁面?單擊按鈕後關閉活動堆棧

這裏各種各樣的圖示:

主頁 - 步驟1 - > 2 - > 3 - > 4 - > 5 - > 6 - > 7 - > 8

此時,當用戶點擊「保存」,關閉所有步驟(8)並返回主頁。到目前爲止,我一直在創建一個新的意圖,但我意識到這不是最好的解決方案。一個簡單的背壓讓他回到第七步。

任何幫助表示讚賞。

+0

「爲了保持數據不變,而仍然在兩者之間......」不確定你的意思是什麼,但請記住,你不能保證其中的一項活動在Android之後不會被關閉背景。確保你不依賴於他們在那裏。 – 2010-12-03 19:51:36

+0

@Mayra:無論如何,我可以阻止Android關閉任何活動?我不認爲這些步驟至少需要幾分鐘的時間,理想情況是這樣。但你永遠不能太確定。 – 2010-12-03 20:07:52

+1

不,你不能。有關詳細信息,請查看Activity生命週期文檔:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle無論如何,您應該正確處理停止和重新啓動,以防有人從您的應用程序中單擊並離開您的應用程序回到它。 – 2010-12-03 21:08:22

回答

20
Intent intent = new Intent(this, Home.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

這將殺死您的第8個屏幕之間的所有活動,並啓動您的hom屏幕。你也可以在清單launchmode =「singleTop」中設置你的主屏幕的活躍度。看到這個鏈接 - developer.android.com/guide/topics/fundamentals.html#acttask

4

另一種方法是使用StartActivityForResult(...)來啓動每個活動,並讓活動在finish()之前調用setResult()。然後,如果意圖非空,則在每個Activity的onActivityResult(...)方法中調用finish()。

這將創建完整堆棧,並在最後一次完成時自動鏈接完成它們。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (data == null) { 
     return; // back button, resume this activity 
    } 

    // Propagate result down the stack. 
    setResult(0, data); 
    finish(); 
} 

這給了你更多的控制,讓原來的活動通過onActivityResult接受的結果,而不是創造的意圖,這可能是如果原始請求其他國家要保留更直觀的(在其開始意圖,特別是)。