Android возвращается к первому действию при нажатии кнопки

Я пишу приложение, где я имею дело с 4 действиями, скажем, A, B, C и D. Активность A вызывает B, B вызывает C, C вызывает D. В каждом из действий у меня есть кнопка «home», кнопка. Когда пользователь нажимает кнопку «домой» в любой из операций B, C, D, приложение должно вернуться к экрану активности?

Как имитировать «домашнюю» кнопку в этом случае?

Solutions Collecting From Web of "Android возвращается к первому действию при нажатии кнопки"

button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(D.this, A.class)); } }); 

Объявите A в своем манифесте с помощью android:launchMode="singleTask" . Таким образом, когда вы вызываете startActivity() из других ваших действий, а A уже работает, он просто выводит его на передний startActivity() . В противном случае он запустит новый экземпляр.

Единственная проблема, с которой я вижу использование android:launchMode="singleTask" – это когда вы сворачиваете приложение и запускаете приложение, снова нажав значок приложения, а затем начинайте с нуля и не приобретайте его состояние. Поэтому я решил использовать

 intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); 

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

 Intent intent = new Intent( context, MyActivity.class ); intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); current_activity.startActivity( intent ); 

Это работает для меня

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

В манифесте:

 android:name=".A" android:launchMode="singleTask" 

Я использую https://github.com/greenrobot/EventBus для этого. В корневой активности вы должны подписаться на событие

. EventBus.getDefault () регистр (это);

Затем вы должны определить обратный вызов события

  public void onEvent(LogoutEvent event) { // your implementation logout(); } 

И слушатель кнопки выхода из системы должен иметь такой код:

 finish(); // you must finish previous activity EventBus.getDefault().post(new LogoutEvent()); 

Это все