Search code examples
javaandroiddrawerlayoutnavigation-drawerdrawer

Android drawer open works only once


Android drawer open works only once. I have tried several approaches. My Code:

   public void openDrawer() {
        ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, drawer, R.string.drawer_open, R.string.drawer_close);
        drawer.setDrawerListener(mDrawerToggle);
        mDrawerToggle.syncState();
        if(drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawers();
        } else {
            drawer.openDrawer(GravityCompat.START);
        }
    }

and approach 2:

public void openDrawer() {
    if(drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawers();
    } else {
        drawer.openDrawer(GravityCompat.START);
    }
}

In Both cases works only first time it is opened and closed.

EDIT Problem is that I call method from presenter. It is working if I bind it to OnClickListener in Activity. I guess I will need something like preventDefault.


Solution

  • Try this way, it works for me in many cases.

    EDIT: Add this part to your onCreate() method. And call it only once.

    ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, drawer, R.string.drawer_open, R.string.drawer_close);
        drawer.setDrawerListener(mDrawerToggle);
        mDrawerToggle.syncState();
    

    then set a click listener to your custom button.

    customButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (drawer.isDrawerOpen(navigationView)) {
                        closeDrawer();
                    } else {
                        openDrawer();
                    }
                }
            });
    

    these are helper methods

    public void openDrawer() {
        drawer.openDrawer(GravityCompat.START);
    }
    
    public void closeDrawer() {
        drawer.closeDrawer(GravityCompat.START);
    }