Переопределить BackButton при открытом меню - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь добиться, когда пользователь нажимает кнопку «Назад», когда MENU виден, состояние menuActual и MENU изменяется с видимого на невидимое.Если MENU не открыт и пользователь щелкает обратно, то отображается Toast с сообщением "Press again to Exit", и если вы нажмете назад в течение 2 секунд, приложение закроется.

Код, который у меня есть:

@Override
    public void finish() {

    if (MENU.getVisibility() == View.VISIBLE){
        MENU.setVisibility(View.INVISIBLE);
        menuActual.setVisibility(View.INVISIBLE);

    }else {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            moveTaskToBack(true);

            return;
        }else {

            this.doubleBackToExitPressedOnce = true;
            Toast.makeText(this, "Tap again to Exit!", Toast.LENGTH_SHORT).show();

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

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

Я объявил boolean doubleBackToExitPressedOnce = false;

Приложение доходит до отображения Toast, говорящего "Press again to Exit", но еслиснова нажимается назад, приложение говорит "AppName isn't responding"

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

Спасибо!

1 Ответ

0 голосов
/ 14 октября 2018

Сделайте это в onBackPressed как это:

private boolean doubleBackToExitPressedOnce = false;
private Handler handler;
private Runnable runnable;

@Override
public void onBackPressed() {
    if (MENU.getVisibility() == View.VISIBLE) {
        MENU.setVisibility(View.INVISIBLE);
        menuActual.setVisibility(View.INVISIBLE);
        return;
    }

    if (!doubleBackToExitPressedOnce) {
        doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Tap again to Exit!", Toast.LENGTH_SHORT).show();

        handler = new Handler();
        handler.postDelayed(runnable = new Runnable() {

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

    // Removes the callBack
    handler.removeCallbacks(runnable);

    // Replace this next line with finishAffinity() if you want to close the app.
    super.onBackPressed();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...