Создать ветку стека активности и очистить ее - PullRequest
0 голосов
/ 13 сентября 2011

Я знаю, что подобные вопросы уже задавались много раз, но мой немного отличается.Например, у меня есть дерево действий типа A (корневая активность) -BCDE (A запускает B, B запускает C и т. Д.).Также у меня есть две кнопки, которые могут запускать действия F и G, они доступны везде (они похожи на меню и их launchMode = "singleTask")

Если одно из "специальных" действий вызывается из BCD или E,появится всплывающее окно с текстом «Вы действительно хотите испортить процесс бронирования?».Если пользователь нажимает «да», то изменения активности на «G», действия BCD и E должны быть удалены из стека активности, и повторное нажатие «кнопки назад» возвращает пользователя к операции A (или F, если G вызывается из F).

Я мог бы сделать это, установив флаг "Intent.FLAG_ACTIVITY_CLEAR_TOP", но это не подходит, потому что мне нужно как-то определить, была ли G-операция вызвана из одного из B / C / D / E-действий.Если это не так (я имею в виду, что он вызывался из действий A или F), тогда кнопка «Назад» должна работать как обычно.

Я уже пробовал: broadcastRecievers через файл манифеста - я пытался вызвать «finish ()»о деятельности BCDE от другого.Это немного глупо, потому что один из них уже может быть удален методом GC.

"getCallingActivity ()".Не могу заставить это работать.Хотел сравнить, была ли вызывающая активность одной из B / C / D / E

"startActivityForResult (намерение, результат)" - она ​​не работала (onActivityResult не вызывался), потому что у меня есть "launchMode ="singleTask "в моем файле манифеста для действий F и G.

Я также пытался создать новую задачу Task для дерева BCDE. Но понял, что она даже отображается как вторая задача в меню запуска.

Я буду очень признателен за любую помощь, даже теоретическую.

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Я не уверен, что может быть onResultReceived, но попробуйте:

@Override
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent intent){
super.onActivityResult(requestCode, resultCode, intent);

...etc...

}

Просто используйте intent.putExtra() ... для получения информации от одного занятия к другому. Если вы хотите, чтобы он был передан обратно, используйте this.setResult(int, intent) в рамках вашей «высшей» деятельности, и он откроется. Если вы хотите, чтобы он начинал с самого начала, то для этого тоже есть флаг FLAG_ACTIVITY_FORWARD_RESULT. Я думаю, что это предотвращает необходимость отлавливать результат и затем пересылать его снова к следующему наименьшему действию, хотя это может быть неправильно.

0 голосов
/ 16 сентября 2011

Я решил эту проблему с помощью putExtra (). Я передал строку действиям F и G из B, C, D, E. Когда F и G были вызваны друг от друга и A, я ничего не пропустил.

Переписав один метод в действиях F и G, я достиг необходимого результата:

    @Override
public void onBackPressed() {
    if (passedString != null) {
        final Intent a = new Intent(this, A.class);
        a.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(a);
    }
    super.onBackPressed();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...