2010-09-26 48 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