2010-09-26 2 views
4

Как закрыть целую иерархию действий и показать новую активность, отсутствующую в текущей задаче?Закрыть иерархию активности в Android

Контекст

Рассмотрим FTP-браузер, который возобновляет предыдущую сессию запуска. Каждая папка отображается в ее собственной деятельности. Когда я нажимаю на папку, в папке запускается новое действие. Если я нажму кнопку «Назад», приложение вернется к предыдущему действию, которое соответствует родительской папке.

Я могу выйти из меню в любое время. Выход из системы должен привести меня к активности входа (не отображаться текущая задача, когда приложение возобновило сеанс) и закрыть все остальные действия. Как я могу это сделать?

Из того, что я прочитал, если деятельность была в текущей задаче, я мог бы использовать FLAG_ACTIVITY_CLEAR_TOP в намерении, но это не мое дело.

ответ

0

Один подход может быть использован startActivityForResult. Например, ваша первая активность - это LoginActivity, а последующие действия - FolderActivity. Таким образом, поток будет
1. LoginActivity (пусковая активность)
2. Папки активности (корень как папки)
3. FolderActivity (содержимое Clicked папки) ... и так далее
так теперь используют 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

Спасибо, бхуп! Это то, что мы делаем прямо сейчас (наша константа называется RESULT_KILLER_VIRUS: P), но она казалась ужасно сложной и подверженной ошибкам. Надеюсь, что есть лучшее решение. – hpique

+0

Как насчет использования ActivityGroup совместно с LocalActivityManager? У вас может быть LoginActivity и FolderActivityGroup. Используйте LocalActivityManager для запуска FolderActivity, и когда пользователь выходит из системы, вы можете уничтожить все действия в FolderActivityGroup, вызвав LocalActivtyManager.removeAllActivities(). – bhups

Смежные вопросы