Driyanto Saputro
Driyanto Saputro

Reputation: 103

onBackPressed add double tap exit with navigation drawer?

I want to make coding as below ..

boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        Fragment fragment = getFragmentManager().findFragmentById(R.id.container);
        if (fragment instanceof MainHomeFragment) {
            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);
        }
        else {
            super.onBackPressed();
        }
    }
}

My problem when the drawer is open, onbackpressed can not close the drawer .. I would like to add the code below ... where should I put the code ?

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
       mDrawerLayout.closeDrawer(GravityCompat.START);
    }

Upvotes: 1

Views: 553

Answers (2)

Uday Mishra
Uday Mishra

Reputation: 212

 @Override
                public void onBackPressed() {DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                if (drawer.isDrawerOpen(GravityCompat.START)) {
                    drawer.closeDrawer(GravityCompat.START);
                } else {
                   doExitApp()
    }

override your on backpressed method in Activity

public void doExitApp(){
                if ((System.currentTimeMillis() - exitTime) > 2000) {
                    Toast.makeText(this, R.string.press_again_exit_app, Toast.LENGTH_SHORT).show();
                    exitTime = System.currentTimeMillis();
                } else {
                    finish();
                }
            }

Upvotes: 1

Harry Sharma
Harry Sharma

Reputation: 2200

Add this code to your onBackPress method

        if (getFragmentManager().getBackStackEntryCount() > 0) {
    getFragmentManager().popBackStack();
} else {

            if (menu1.isOpened()) {

                menu1.close(true);

            } else {
                if (drawer_layout.isDrawerOpen(Gravity.LEFT)) {

                    drawer_layout.closeDrawer(Gravity.LEFT);

                    doubleBackToExitPressedOnce = false;

                } else {

                    if (doubleBackToExitPressedOnce) {
                        super.onBackPressed();
                        return;
                    }

                }
                this.doubleBackToExitPressedOnce = true;
                Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show();

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

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

Upvotes: 0

Related Questions