猿问

菜单打开时覆盖 BackButton

我想要实现的是,当用户在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"


努力弄清楚为什么会这样,这是漫长的一天。


MYYA
浏览 155回答 1
1回答

郎朗坤

做到在onBackPressed这样的:private boolean doubleBackToExitPressedOnce = false;private Handler handler;private Runnable runnable;@Overridepublic 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();}
随时随地看视频慕课网APP

相关分类

Java
我要回答