Android закрыть приложение на кнопку назад

Приложение выглядит примерно так: MainActivity -> UserActivity -> DetailsActivity. (приблизительный порядок действий).

Я хотел бы закрыть приложение, когда нажата кнопка «Назад» в разделе «Подробности» (третье действие в строке).

Хотелось узнать, хорошо ли это сделать, и что было бы лучшим способом сделать это?

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

Ну, если есть только один … просто:

finish(); 

В противном случае трюк:

 Intent intent = new Intent(Main.this, Main.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); 

И в той же деятельности в onCreate :

 if (getIntent().getBooleanExtra("EXIT", false)) { finish(); } 

Итак, вы очищаете стек, а затем убиваете единственную, оставленную … вы можете сделать это в любой деятельности и, конечно же, использовать ее в onBackPressed 🙂

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

 @Override public void onBackPressed() { if ( ! getIntent().getExtras().getBoolean(FROM_SETTINGS_KEY)) moveTaskToBack(true); // exist app else finish(); } 

в моем примере он проверяет флажок, откуда я начал свою деятельность, если он запущен из настроек, тогда действуйте нормально, иначе сделайте его сверху и выйдите из приложения назад

Попробуйте это, добавьте noHistory в ваш файл манифеста каждый вид деятельности.

 android:noHistory="true" 

попробуй это.

  quitBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View paramView) { finish(); moveTaskToBack(true); } }); 

Когда вы запустите UserActivity из MainActivity, поместите finish () после startActivity (). сделать то же самое в UserActivity, когда вы запустите DetailsActivity

Внутри вашей текущей деятельности:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { Intent intent = new Intent(CurrentActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); } return super.onKeyDown(keyCode, event); } 

Внутри MainActivity OnCreate:

 if (getIntent().getBooleanExtra("EXIT", false)) { finish(); return; } 

1) Создайте файл с именем Constants.java в проекте

2) Добавьте этот код в этот файл

  public static void killAll() { for (Activity act : Constants.activity_stack) { act.finish(); } Constants.activity_stack.clear(); } 

3) Теперь, когда вы находитесь в главной операции в onCreate (), добавьте нижеприведенный fragment

  // add to stack Constants.activity_stack.add(this); 

4) Аналогично добавьте активность пользователя в стек

5) В детали поставки в onBackPressed () используйте приведенный ниже fragment

 Constants.killAll();//will kill all the activities and bring you out of the application. 

Вот полный class, который показывает, как вызывается другая активность при нажатии кнопки в первом действии.

 public class FirstActivity extends Activity implements View.OnClickListener { Button goToSecondActivityButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_activity); ((TextView) findViewById(R.id.textRecommendationMessage)).setText("This is the first activity"); goToSecondActivityButton= (Button) findViewById(R.id.button_go_to_second_activity); goToSecondActivityButton.setOnClickListener(this); } @Override public void onClick(View view) { goToSecondActivity(); } private void goToSecondActivity() { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); finish(); } } 

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

 public void onBackPressed(){ Intent a = new Intent(Intent.ACTION_MAIN); a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); } 

Если вы вызываете функцию UserActivity из MainActivity, завершаете вызов () после startActivity (). Ниже приведен код:

 Intent userActivity = new Intent(MainActivity.this, UserActivity.class); userActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); MainActivity.this.startActivity(userActivity ); finish(); 
  • Как загрузить ImageView по URL в Android?
  • Отправка данных из вложенных fragmentов в родительский fragment
  • Как объединить два APK в один, чтобы оба приложения могли быть установлены одновременно
  • Обновление сервисов Google Play
  • Android Google Maps API V2 Увеличить до текущего местоположения
  • Уникальный идентификатор Android-устройства
  • Запрос API Google Places отклонен для автозаполнения Android, даже с помощью правильного ключа api
  • Как получить текущий buildType в конфигурации Android Gradle
  • Android SDK AsyncTask doInBackground не работает (подclass)
  • Как установить шрифт для меню «Параметры»?
  • Разница между app-debug.apk и app-debug-unaligned.apk
  • Interesting Posts

    Как получить RouteData по URL?

    Создание горячих клавиш или сочетаний клавиш для вставки определенной текстовой фразы в Mac OSX

    Можно ли ссылаться на ячейку excel в комментарии?

    Каков наиболее эффективный способ получить индекс iteratorа std :: vector?

    В Windows 7 я могу создать Symlink или Junction для winsxs или папок установщика

    Как добавить типы файлов в Windows 8 «Файловые ассоциации»?

    Как отключить восстановление системы и удалить папки информации о системном томе в Windows?

    itertools.groupby () не группируется правильно

    Как определить, является ли какая-либо из моих операций самой фронтальной и видимой для пользователя?

    Банк-кард-ридер заставляет Outlook запрашивать карту

    Когда я печатаю «ничего не выходит, и если я его снова наберу, то 2 из них выйдет как таковой»,

    Почему этот компилятор кода C ++ (не-void функция не возвращает значение)

    Как обращаться с кнопкой «Назад» в диалоговом окне?

    Android HttpClient и HTTPS

    Как выводить только захваченные группы с sed?

    Давайте будем гением компьютера.