Android закрыть приложение на кнопку назад
Приложение выглядит примерно так: MainActivity -> UserActivity -> DetailsActivity. (приблизительный порядок действий).
Я хотел бы закрыть приложение, когда нажата кнопка «Назад» в разделе «Подробности» (третье действие в строке).
Хотелось узнать, хорошо ли это сделать, и что было бы лучшим способом сделать это?
- Отключить / проверить местоположение макета (запретить спуфинг gps)
- Отключить сенсорные события для всех видов
- Как сохранить состояние во время изменения ориентации в Android, если состояние сделано из моих classов?
- Ресурсы Android $ NotFoundException: Идентификатор ресурса # 0x7f030027
- Как отобразить маршрут между двумя геокоординатами на картах Google?
- Как удалить дочерние узлы в firebase android?
- Изменение формы уведомления
- Несоответствие обнаружено в RecyclerView, Как изменить содержимое RecyclerView при прокрутке
- Не удалось добавить оконный токен android.os.BinderProxy недействителен; работает ли ваша деятельность?
- Как сжимать код - предел метода 65k в dex
- Динамическая загрузка ресурсов Android
- Завершить работу по истечении периода времени
- Как отладить apk, подписанный для выпуска?
Если я правильно вас понимаю, вы хотите закрыть активность, даже если стек не пуст, что означает, что в стеке более 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();