Я начинаю с действия A->B->C->D->E .. когда я иду от D->E, в стеке не должно быть активности, но пользователь может использовать кнопку «Назад» из D и перейти к C (без обновление Activity C, как обычная функция возврата)
Очистить задний стек активности
Ответы (3)
Вы можете добавить BroadcastReceiver
ко всем действиям, которые хотите закрыть (A, B, C, D):
public class MyActivity extends Activity {
private FinishReceiver finishReceiver;
private static final String ACTION_FINISH =
"com.mypackage.MyActivity.ACTION_FINISH";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finishReceiver= new FinishReceiver();
registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH));
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(finishReceiver);
}
private final class FinishReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_FINISH))
finish();
}
}
}
... и закрыть их, позвонив ...
sendBroadcast(new Intent(ACTION_FINISH));
... в действии E. Проверьте этот хороший пример тоже.
person
Trinimon
schedule
14.08.2013
вы спасаете жизнь....большое спасибо...
- person W00di; 14.08.2013
:) к сожалению, по этому вопросу было слишком много сторонников, хотя он немного отличается от упомянутого дубликата. Приведенное выше решение может показаться слишком большим, однако оно довольно гибкое и мощное :)
- person Trinimon; 14.08.2013
Спасибо, что поделились решением. Этот случай определенно отличается, новой активности раньше не было в заднем стеке.
- person Roman; 14.01.2014
Это фантастическое решение. Гораздо мощнее и понятнее, чем другие.
- person MattCochrane; 09.12.2016
Добавьте флаг FLAG_ACTIVITY_CLEAR_TOP к своему намерению, чтобы очистить стопку других ваших действий, когда вы начинаете свою деятельность E, например:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
затем начните свою деятельность:
startActivity(intent)
Дополнительная информация: Task и BackStack
person
Arash GM
schedule
14.08.2013
но это работает только в том случае, если активность уже находится в стеке
- person W00di; 14.08.2013
@sabya: пожалуйста, объясните больше о вашей проблеме, это немного неясно
- person Arash GM; 14.08.2013
из документов: если установлено, и запускаемое действие уже выполняется в текущей задаче, то вместо запуска нового экземпляра этого действия все остальные действия поверх него будут закрыты, и это намерение будет доставлено в старая активность (теперь сверху) как новое намерение. (см. developer.android.com/reference/android/content/Intent.html< /а>)
- person Trinimon; 14.08.2013
@Arash: я начинаю с действия A и перехожу к действию B, затем C, D, затем перехожу к действию E из действия D. Но когда пользователь нажимает кнопку «Назад» из E, в стеке не должно быть никаких действий.
- person W00di; 14.08.2013
@sabya: если ваша активность связана с одними и теми же задачами, поэтому этот флаг должен очистить ваш задний стек, просто добавьте этот флаг перед началом последней активности.
- person Arash GM; 14.08.2013
@ Араш Я уже сделал это ... это не работает ... если я сделаю ваш метод и начну действие A вместо E, оно будет работать, как вы сказали ... но я этого не хочу. Я хочу, чтобы новое действие E запускалось без истории стека
- person W00di; 14.08.2013
Добавьте флаги к своему объекту, это очистит все действия в стеке.
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
это правильное решение, чтобы очистить действия, уже находящиеся в стеке.
Надеюсь это поможет..
person
mananjani
schedule
14.08.2013
тоже не работает... :(
- person W00di; 14.08.2013