Android закрыть приложение на кнопку назад
Приложение выглядит примерно так:
MainActivity → UserActivity → DetailsActivity. (приблизительный порядок действий).
Я хотел бы закрыть приложение, когда нажата кнопка "Назад" в разделе "Подробности" (третье действие в строке).
Хотелось узнать, хорошо ли это сделать, и что было бы лучшим способом сделать это?
Ответы
Ответ 1
Если я правильно вас понимаю, вы хотите закрыть активность, даже если стек не пуст, что означает, что в стеке более 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
:)
Ответ 2
Это можно сделать, переопределив событие кнопки "Назад"
не добавлять историю для конкретной активности в конкретном состоянии.
@Override
public void onBackPressed()
{
if ( ! getIntent().getExtras().getBoolean(FROM_SETTINGS_KEY))
moveTaskToBack(true); // exist app
else
finish();
}
в моем примере он проверяет флаг, откуда я начал свою деятельность, если он запускается из настроек, тогда действуйте нормально, иначе сделайте его сверху и выйдите из приложения назад, нажав
Ответ 3
Попробуйте это, добавьте noHistory
в ваш файл манифеста каждый вид деятельности.
android:noHistory="true"
Ответ 4
попробуйте это.
quitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView)
{
finish();
moveTaskToBack(true);
}
});
Ответ 5
При запуске UserActivity из MainActivity поместите finish() после startActivity().
сделать то же самое в UserActivity, когда вы запустите DetailsActivity
Ответ 6
Внутри текущей деятельности:
@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;
}
Ответ 7
1) Создайте файл с именем Constants.java в проекте
2) Добавьте этот код в этот файл
public static void killAll() {
for (Activity act : Constants.activity_stack) {
act.finish();
}
Constants.activity_stack.clear();
}
3) Теперь, когда вы находитесь в главной операции в onCreate(), добавьте нижеприведенный фрагмент
// add to stack
Constants.activity_stack.add(this);
4) Аналогично добавьте активность пользователя в стек
5) В детали поставки в onBackPressed() используйте нижеприведенный фрагмент
Constants.killAll();//will kill all the activities and bring you out of the application.
Ответ 8
Вот полный класс, который показывает, как вызывается другая активность при нажатии кнопки в первом действии.
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();
}
}
Ответ 9
Это работает для меня:
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
Ответ 10
Если вы вызываете функцию UserActivity из MainActivity, завершите вызов() после startActivity(). Ниже приведен код:
Intent userActivity = new Intent(MainActivity.this, UserActivity.class);
userActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
MainActivity.this.startActivity(userActivity );
finish();
Ответ 11
на вашей деятельности
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return super.onOptionsItemSelected(item);
}
public void onBackPressed(){
Intent a = new Intent(Qeydiyyat.this,Login.class);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);