2010-09-26 49 views
4

如何關閉整個活動層次結構並顯示當前任務中不存在的新活動?關閉Android中的活動層次

語境

考慮一個FTP瀏覽器上繼續推出了上屆會議。每個文件夾都顯示在自己的活動中。當我點擊一個文件夾時,會爲該文件夾啓動一項新活動。如果我按下後退按鈕,應用程序將返回到前一個活動,該活動對應於父文件夾。

我可以隨時從菜單中註銷。註銷應該讓我進入登錄活動(應用程序恢復會話時不顯示當前任務),並關閉所有其他活動。我怎樣才能做到這一點?

從我讀過的內容來看,如果活動在當前任務中,我可以在意圖中使用FLAG_ACTIVITY_CLEAR_TOP,但這不是我的情況。

回答

0

一種方法可以使用startActivityForResult。因此,例如,您的第一個活動是LoginActivity,後續活動是FolderActivity的活動。所以流將
1. LoginActivity(發射活動)
2.文件夾活動(如根文件夾)
3. FolderActivity(點擊文件夾的內容)...等等
所以現在使用startAcitivityForResult啓動任何新的文件夾活動。

public class LoginActivity extends Activity { 
    onCreate() { 
    } 
    onLogin() { 
    startActivityForResult(intent, 100 /*some request code*/); //start Folder Activity, 
    } 
    @override 
    onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if(requestCode == 100 && resultCode == LOGOFF_ACTION) { 
     //sign out and show the login screen 
    } 
}

public class FolderActivity extends Activity{ onCreate() { } onClickOnSomeFolder() { startActivityForResult(intent /*with folder details etc*/, 100); } @override onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode == 100 && resultCode == LOGOFF_ACTION) { setResult(resultCode, intent); finish(); } else if(requestCode == 100 && resultCode == BACK_BUTTON) { /*No need to finish this activity*/ } } onBackButton(){ setResult(BACK_BUTTON, intent); finish(); } onLogOff(){ setResult(LOGOFF_ACTION, intent); finish(); } }

所以現在如果用戶選擇使用菜單退出,那麼活動將以相同的順序開始完成,直到達到LoginActivity。

+0

感謝bhups!這就是我們現在正在做的事(我們的常量被稱爲RESULT_KILLER_VIRUS:P),但它看起來非常複雜且容易出錯。希望有更好的解決方案。 – hpique 2010-09-27 08:03:50

+0

如何將ActivityGroup與LocalActivityManager結合使用?您可以擁有LoginActivity和FolderActivityGroup。使用LocalActivityManager啓動FolderActivity,當用戶註銷時,您可以通過調用LocalActivtyManager.removeAllActivities()來銷燬FolderActivityGroup中的所有活動。 – bhups 2010-09-27 08:42:01