Как выйти из приложения Android на backpress? - PullRequest
0 голосов
/ 09 мая 2018

Ситуация может быть как, скажем, у меня есть 5 мероприятий.Скажите «Основная деятельность», «Деятельность 1», «Деятельность 2», «Деятельность 3» и «Деятельность 4».

Можно напрямую использовать «Деятельность 1,2,3 и 4» с помощью кнопок, вставленных в макет «Основная деятельность».

Ситуация: пользователь входит в основное занятие и нажимает кнопку, чтобы войти в занятие 2. Затем он снова нажимает и возвращается в основное занятие.оттуда он теперь входит в Занятие 3 с помощью другой кнопки и, аналогично, когда он нажимает кнопку «Назад», он входит в Основное Занятие.

Основное Занятие -> Занятие 2 -> Основное Занятие ->Упражнение 3 -> Основное занятие.

Проблема: теперь, когда пользователь входит из Упражнения 3 в Основное занятие.Пользователь находится на макете основной активности.И теперь, если пользователь нажимает кнопку «Назад» на своем телефоне, для выхода из приложения потребуется следующий процесс:

Основная операция -> Деятельность 3 -> Основная операция -> Деятельность2 -> Основная активность -> ВЫХОД

Необходимо выполнить: я хочу выйти из приложения из самой основной операции, если пользователь нажимает кнопку возврата на своем телефоне, а затем вместоследуя указанному выше пути для выхода из приложения, Я хочу, чтобы пользователь мог иметь возможность выйти из самого основного действия, отображая простое поле AlertDialog .

Как это можно сделать,как я не могу найти решение этой проблемы?

Ответы [ 4 ]

0 голосов
/ 09 мая 2018

это обычно используемый способ выхода из приложения , также я рекомендую использовать атрибут "nohistory" в манифесте для действий, отличных от MainActivity.

boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }

this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        doubleBackToExitPressedOnce=false;                       
    }
}, 2000);

}

и для других действий используйте метод nohistory в манифесте

     <activity
        android:name="com.omniapay.salesservice.Activities.LoginActivity"
        android:label="LOGIN"
        android:noHistory="true" />
0 голосов
/ 09 мая 2018

Вам необходимо переопределить onBackPressed() внутри вашего MainActivity() и используйте finishAffinity для завершения всех действий

onBackPressed()

Вызывается, когда активность обнаружила нажатие клавиши «Назад».

finishAffinity(): added in API level 16

Завершите это действие, а также все действия сразу под ним в текущем задании, которые имеют ту же привязку.

ОБРАЗЕЦ КОДА

@Override
public void onBackPressed() {
  super.onBackPressed();
  ActivityCompat.finishAffinity(MainActivity.this);
}

EDIT

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

@Override
public void onBackPressed() {

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
                .setTitle("Alert")
                .setCancelable(false)
                .setMessage("Are your sure want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.finishAffinity(MainActivity.this);
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });

        builder.show();

}
0 голосов
/ 09 мая 2018

Хорошей практикой написания кода является двойное нажатие клавиши для выхода из основного действия.

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
    super.onBackPressed();
    return;
}

this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        doubleBackToExitPressedOnce=false;                       
    }
}, 2000);

}

0 голосов
/ 09 мая 2018

добавить свой MainActivity

@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
...