Я хочу завершить одно действие другим, например:
В Activity [A] при нажатии кнопки я вызываю Activity [B], не завершая Activity [A].
Теперь в Activity [B] есть две кнопки: New и Modify . Когда пользователь нажимает кнопку «Изменить», выдает активность [A] из стека со всеми отмеченными опциями.
Но когда пользователь нажимает на Новой кнопке от активности [B], то я должен закончить операцию [A] из стека и перезагрузок , что активность [A] снова в стек.
Я пытаюсь, но не могу завершить действие [A] из стека ... Как мне это сделать?
Я использую код как:
Из действия [A]:
Intent GotoB = new Intent(A.this,B.class);
startActivityForResult(GotoB,1);
Другой метод в той же деятельности
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1)
{
if (resultCode == 1) {
Intent i = getIntent();
overridePendingTransition(0, 0);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(i);
}
}
}
А в Activity [B] при нажатии кнопки:
setResult(1);
finish();
Ответы:
Сделайте свою деятельность A в файле манифеста:
launchMode = "singleInstance"
Когда пользователь нажимает кнопку «Новое», выполните
FirstActivity.fa.finish();
и вызовите новое намерение.Когда пользователь нажимает кнопку «Изменить», вызовите новое намерение или просто завершите действие B.
ПЕРВЫЙ ПУТЬ
В своем первом действии объявите одно
Activity object
подобное:теперь используйте этот объект в другом,
Activity
чтобы завершить подобное первое действие,ВТОРОЙ ПУТЬ
При вызове действия,
FirstActivity
которое вы хотите завершить, как только вы продолжите, вы можете добавить флаг во время вызоваFirstActivity
Но с этим флагом действие будет завершено, даже если вы этого не хотите. и когда-нибудь,
onBack
если вы хотите показать,FirstActivity
вам придется вызывать его с помощью намерения.источник
Вы можете это сделать, но я думаю, вам не следует нарушать нормальный поток активности. Если вы хотите завершить свое действие, вы можете просто отправить трансляцию из вашего действия B в действие A.
Создайте широковещательный приемник перед началом занятия B:
Отправьте трансляцию из действия B в действие A, когда вы хотите завершить действие A из B
Надеюсь, у вас это сработает ...
источник
broadcast_receiver
unregisterReceiver()
Это довольно стандартный коммуникационный вопрос. Один из подходов - использовать ResultReceiver в действии A:
а затем в Activity B вы можете просто закончить его по запросу следующим образом:
Попробуйте что-нибудь подобное.
источник
Есть один подход, который вы можете использовать в своем случае.
Шаг 1: начните действие B с действия A
Шаг 2: Если пользователь нажимает кнопку изменения, запускает действие A с помощью.
FLAG_ACTIVITY_CLEAR_TOP
Кроме того, передайте флаг дополнительно.Шаг 3: Если пользователь нажимает кнопку «Добавить», запускает действие A с помощью.
FLAG_ACTIVITY_CLEAR_TOP
Также передайте флаг дополнительно.FLAG_ACTIVITY_CLEAR_TOP
очистит все открытые действия до целевого и перезапустится, если в целевом действии не определен режим запускаШаг 4: Теперь
onCreate()
метод Activity A, необходимо получить этот флаг.источник
Начните свою деятельность с кода запроса:
И вы можете закрыть его из любой другой активности, например:
источник
См. Мой ответ на вопрос о переполнении стека. Завершить все предыдущие действия .
Вам нужно добавить расширение
Intent.FLAG_CLEAR_TOP
. Этот флаг гарантирует, что все действия выше целевого действия в стеке завершены и что оно отображается.Еще одна вещь, которая вам понадобится, - это
SINGLE_TOP
флаг. С помощью этого вы не позволяете Android создавать новое действие, если оно уже создано в стеке.Просто будьте осторожны, если действие уже было создано, намерение с этими флагами будет доставлено в вызываемом методе
onNewIntent(intent)
(вам необходимо перегрузить его для его обработки) в целевом действии.Затем у
onNewIntent
вас есть метод с именем restart или что-то, что вызоветfinish()
и запустит новое намерение по отношению к самому себе, или естьrepopulate()
метод, который установит новые данные. Я предпочитаю второй подход, он менее затратный, и вы всегда можете выделитьonCreate
логику в отдельный метод, который вы можете вызвать для заполнения.источник
Я только что применил решение Непстера и работает как шарм. Есть небольшая модификация для запуска из фрагмента.
К вашему фрагменту
И к вашему OnNewIntent () Activity, который вы хотите перезапустить.
источник
Я думаю, что у меня самый простой подход ... нажимать new в B ..
и в A получить это
источник
Я знаю, что это старый вопрос, некоторые из этих методов у меня не работали, поэтому для всех, кто смотрит в будущее или сталкивается с моими проблемами, это сработало для меня.
Я переопределил
onPause
и вызвалfinish()
этот метод.источник
Сначала позвоните,
startactivity()
затем используйтеfinish()
источник