I have a navigation bar without any actionbar (I don't want an actionbar). I'm trying to make it so that I have a button that can open the navigation drawer.
I know there's a method called openDrawer for the DrawerLayout http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)
I didn't know how to use it, but i have tried making a button when click, runs this method:
DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);
mDrawerLayout.openDrawer(mDrawerLayout);
When i click it on it, it gives me a Java NullPointerException. Anybody has any idea?
EDIT: This code is inside a fragment, and I'm trying to refer those drawer layout outside the fragment. I used debugger, and it is showing that mDrawlerLayout is NULL.
Any advice?
Thanks!
It works on Button click
I wrote an answer about this here: https://stackoverflow.com/a/18199771/880349
You directly get the current drawer inside a view/fragement so that you won't get a NullPointerException
drawerLayout.openDrawer(Gravity.START);
I have a simpler solution which uses
isDrawerOpen()
ofDrawerLayout
.The code below closes or opens the navigation drawer based on the drawer's current state (Opened/Closed)
Thanks to @athor & @Ashish Tana.
It took me so much time to figure out the error (
NullPointerException
) I am getting.Mine works this way; Instead of
getView()
, I usegetActivity()
and open the drawer bymDrawerLayout.openDrawer(Gravity.LEFT);
.It's giving you a null pointer because you are trying to find the drawer layout in the fragment's view, when it is actually in the activities view.
A quick hack to do what you want is to find the view like:
That should work. A better way is to have a method on the activity for opening the drawer
In the activity onCreate run your findViewById:
mDrawerLayout should be a member variable of your activity.
Then in your fragment you can call:
An even better way to do it is to create a listener in the fragment and set the activity as a listener to the fragment. Then you can call a method on the activity, similar to above. I'll let you do some research on how to do that.