Закрыть иерархию действий в Android - PullRequest
4 голосов
/ 27 сентября 2010

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

Context

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

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

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

1 Ответ

0 голосов
/ 27 сентября 2010

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

<p>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.
...