2013-02-13 57 views
1

我有了這樣的啓動流的應用:如何在API去一個新的活動時清除返回堆棧<= 10

StartupActivity - >的LoginDialog - > LoginActivity - > HomeActivity

當我從LoginActivity到HomeActivity去我打電話:

Intent intent = new Intent(this, HomeActivity.class); 
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
{ 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
} 
else 
{ 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
} 
startActivity(intent); 
finish(); 

On >= API 11,這使得它,以便HomeActivity是一個全新的任務和StartupActivity不再在後面的堆棧上。

但是,在API <= 10上,FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP從背面堆棧中清除LoginActivity,但StartupActivity仍然存在。如果用戶從HomeActivity單擊回來,它會將它們帶回StartupActivity

如何從後端堆棧清除StartupActivity?

  • 從我的研究,這似乎是最好的辦法是startActivityForResult(),但我能做到這一點從對話?誰會得到結果?

摘要

  • StartupActivity,我展示LoginDialog
  • LoginDialog,我去LoginActivity沒有清除回棧。
    • 這是因爲我希望用戶能夠從LoginActivity回到StartupActivity
  • LoginActivity,我去HomeActivity疏通背部棧
  • 按back仍然可以追溯到StartupActivitydevices <= API 10

回答

1

我想通了,怎麼辦呢?

當LoginDialog啓動LoginActivity時,我可以使用startActivityForResult()使LoginActivity將結果傳遞迴StartupActivity。如果結果是成功的登錄,我可以完成StartupActivity。

LoginDialog可以從多個位置觸發,但如果從StartupActivity觸發以便調用startActivityForResult(),我可以設置一個標誌。

我被困住的事情是如何使用對話框中的startActivityForResult將結果返回到啓動對話框的活動中......並且我明白了這一點。

0

添加在AndroidManifest.xml文件下列

android:noHistory="true" 

所有你想從後臺刪除的活動。您必須將其放在<activity>標籤內。

或者只要在開始新活動時立即致電完成StartupActivity。

我會建議你作爲一個正確的方式來做到這一點的第一個選項。

乾杯。

看看這個答案 - >Answer

+0

不幸的是,這不起作用,因爲我* *想要StartupActivity的歷史記錄。我希望你能夠從LoginActivity回到它,但我不想讓你在成功進入HomeActivity之後再回到它。 – zedman 2013-02-14 02:53:57