0

У меня есть 3 мероприятия в моем приложенииAndroid выход из предыдущей деятельности

  1. Acta
  2. ActB
  3. ACTC

Пусть я в деятельности ActB и я загрузке ActC с вне finish();ActB

Затем, когда нажмите кнопку в ActC, необходимо перенаправить приложение на ActB. Но на этот раз, когда я нажимаю обратно из перенаправленного ActB, отображается еще ActB (ранее загруженный).

Есть ли способ убить все действия, которые были загружены ранее, когда мы нажимаем кнопку в ActC?

Я новичок в андроид и его губит мое время

Пожалуйста, помогите заранее спасибо

+0

Вам нужен новый экземпляр 'ActB', созданный, когда вы нажимаете' Button' из 'ActC'? Если нет, вы можете просто называть 'finish()' in 'C', когда вы нажимаете' Button' – codeMagic

ответ

0

Предположим, вы переехали так: A -> B -> C Все предыдущие экземпляры будут находиться в задней части предыдущих действий. до тех пор, пока это не будет вашим требованием создать новый экземпляр активности, тогда сделайте это. , когда вы нажимаете кнопку, вы хотите попасть в B, но если вам не нужен новый экземпляр B, вы можете пойти с элементом backstack и, согласно мне, вы должны.

нажатием кнопки вы можете просто вызвать onBackPressed() активности, которая вызывается при нажатии кнопки возврата устройства.

Также, как сказал Vee, вы можете использовать этот флаг для очистки действий над вашей текущей деятельностью.

+0

привет, я двигаюсь как это A -> B. А закончен. Тогда я назвал B -> C. B не закончен. Когда я вернулся, как c -> B, тогда вам нужно закончить ранее незавершенный B и начать новый B – ramesh

+0

@ramesh, это то, что я сказал ramesh, если вы хотите закончить actB, возвращаясь из ActC в ActB, почему бы вам не сделать просто закончите его, двигаясь от B до C., если вы нажмете кнопку в ActC, чтобы перейти в ActB, и вы хотите новый экземпляр B, тогда используйте ответ Дэвида, чтобы сделать это. Но действительно ли нужно каждый раз создавать новый экземпляр? Это не рекомендуется вообще, если не существует такого требования. – Siddhesh

2

При запуске ActC из ActB, сделайте это с этим флагом на намерении:

Intent intent = new Intent (this, ActB.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Javadoc:

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

0

Если вы хотите «убить» действие, вы должны называть finish();

Для достижения вашей цели вы можете выполнить следующее.

При запуске ActB от ActA после вызова startActivity (...); put finish();

Таким образом, вы убили активность А, сделайте то же самое в ActB при вызове ActC. Затем, когда вы снова вызовете ActB от ActC, он начнет совершенно новую работу.

+0

Спасибо за ваш комментарий. Но мне нужно перейти в ActB, когда нажимаем кнопку «Назад» от ActC. По вашему предложению приложение выйдет, когда вернется. Любая идея? – ramesh

+0

Извините, я неправильно понял вас тогда. Вы можете переопределить кнопку «Нажать клавишу« Назад »и начать свою деятельность, вот несколько примеров того, как это легко сделать: http://stackoverflow.com/questions/3141996/android-how-to-override-the-back-button -so-it-doesnt-finish-my-activity http://stackoverflow.com/questions/2000102/android-override-back-button-to-act-like-home-button. – JanBo

0

Если вы не нужно новый экземпляр B, то вы не можете просто позвонить finish() в вашем onClick() из C и это приведет вас обратно в B и нет необходимости в Intent или любой другой код.

Если вам нужен новый экземпляр B, вы можете использовать предложение Vee, имея в виду, что это очистит Activities от стека, если вы добавите больше промежутка.

Если вам не нужен новый экземпляр B но хотите передать данные обратно на него, то вы можете использовать флаг FLAG_ACTIVITY_REORDER_TO_FRONT

Intent i = new Intent(ActC.this, ActB.class); 
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
// can send data to ActB if needed with putExtras() 
startActivity(i); 
finish(); // if you want to destroy C and take it off the stack 

это не будет создавать новый экземпляр B, но довести его до в верхней части стека, поэтому, когда вы нажимаете кнопку «Назад», у вас не будет второго экземпляра.

2

Просто происходит от ActB к ACTC, используйте Intent и отделка() после вызова Intent

Intent intent = new Intent(this, ActC.class); 
startActivity(intent); 
finish(); 

И затем, если вы хотите, чтобы вернуться к B с C, а затем сделать то же самое в обратном направлении, так что переключатель

Intent intent = new Intent(this, ActB.class); 

А остальное то же самое.

0

Когда пользователь нажимает кнопку в ActC к восходит к ActB (путем создания нового ActB) это сделать:

Intent intent = new Intent(this, ActB.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Это закончат как ActC и предыдущий ActB и создать новый ActB.